Как сделать запрос с помощью временных фильтров в GoogleScraper? - PullRequest
0 голосов
/ 17 ноября 2018

Даже если официальный API Google не предоставляет информацию о времени в результатах запроса - даже нет временной фильтрации по ключевым словам, в расширенном поиске есть опция временной фильтрации:

Результаты Google для stackoverflow за последний час

Библиотека GoogleScraper предлагает множество гибких опций, НО связанных со временем. Как добавить функции времени с помощью библиотеки?

1 Ответ

0 голосов
/ 17 ноября 2018

После небольшой проверки я обнаружил, что время, когда Google отправляет информацию о фильтрации по значению qdr на ключ tbs (возможно, означает time based search, хотя это официально не указано):

https://www.google.com/search?tbs=qdr:h1&q=stackoverflow

Получает результаты за прошедший час.Буквы m и y могут использоваться для месяцев и лет соответственно.

Кроме того, чтобы добавить функцию сортировки по дате, добавьте также значение sbd (должно означать sort by date): https://www.google.com/search?tbs=qdr:h1,sbd:1&q=stackoverflow

Мне удалось вставить эти ключевые слова в BASEGoogle URL GoogleScraper.Вставьте ниже строки в конец метода get_base_search_url_by_search_engine() (непосредственно перед return) в scraping.py:

if("google" in str(specific_base_url)):
    specific_base_url = "https://www.google.com/search?tbs=qdr:{},sbd:1".format(config.get("time_filter", ""))

Теперь используйте параметр time_filter в вашей конфигурации:

from GoogleScraper import scrape_with_config

config = {
            'use_own_ip': True,
            'keyword_file': "keywords.txt",
            'search_engines': ['google'],
            'num_pages_for_keyword': 2,
            'scrape_method': 'http',
            "time_filter": "d15" #up to 15 days ago
        }

search = scrape_with_config(config)

Результаты будут включать только временной диапазон.Кроме того, фрагменты текста в результатах будут иметь необработанную информацию о дате:

one_sample_result = search.serps[0].links[0]
print(one_sample_result.snippet)

4 минуты назад. Это должно быть довольно просто - пусть propertytotalPriceOfOrder = order.items.map (item => + item.unit* + item.quantity * + item.price) ;.где order - весь ваш объект json.

...