Как получить результаты поиска Google после применения пользовательского диапазона дат? - PullRequest
0 голосов
/ 16 апреля 2019

Я пытаюсь собрать результаты поиска Google, отсортированные по пользовательскому диапазону дат, используя Selenium, python и lxml.Я могу успешно получить результаты, используя один из стандартных таймфреймов: Прошлый 24 - Прошлый год.Selenium правильно выполняет пользовательские временные рамки (визуально проверенные) и предоставляет отсортированный URL-адрес через driver.current_url.Но когда я пытаюсь получить ссылки с отсортированного URL-адреса, я получаю несортированные результаты, как если бы фильтр не применялся, что подтверждается сравнением с ручной сортировкой.

Приведенный ниже код работает для всего, кроме настраиваемого диапазона дат:

import requests
import datetime
import time
from urllib.parse import parse_qs, urlparse
from lxml.html import fromstring
from lxml import html
from selenium import webdriver
from selenium.common.exceptions import WebDriverException
options = webdriver.ChromeOptions()
options.add_argument("--headless")
sites = []

line = "'Alice in Chains' AND '2018' AND 'tour dates'"
start = '04/1/2018'
end = '04/20/2018' 
pages = 1

driver = webdriver.Chrome(executable_path='chromedriver.exe', chrome_options=options)
try:
    driver.get('https://www.google.com/search')  
    time.sleep(2)
    search_field = driver.find_element_by_name("q")
    search_field.send_keys(line.strip())
    search_field.submit()
    time.sleep(2)
    driver.find_element_by_id("hdtb-tls").click()
    time.sleep(2)
    driver.find_element_by_class_name('hdtb-mn-hd').click()
    time.sleep(2)
#Selects the elements for custom range  
    driver.find_element_by_css_selector('li#cdr_opt span').click()
    time.sleep(2)
    from_ = driver.find_element_by_css_selector('input#cdr_min')
    from_.send_keys(start)
    time.sleep(2)
    to_ = driver.find_element_by_css_selector('input#cdr_max')
    to_.send_keys(end)
    time.sleep(2)
    go_ = driver.find_element_by_css_selector('#cdr_frm > input.ksb.mini.cdr_go')
    go_.click()    
except WebDriverException:
    if x:
        print('Error reaching site')
    else:
        print('Error retereiving site html')
    driver.quit()
    time.sleep(2)
nxtPage = 0    
for page in range(pages): 
    try:
        html = requests.get(driver.current_url) # URL is the custom date sorted URL
        tree = fromstring(html.content)         # Possible error here?
        results = tree.cssselect('h3.r a')
    except:
        print('help')
        continue   
    for result in results:
        link = result.get('href')
        qs = urlparse(link).query
        c = parse_qs(qs).get('q', [])
        sites.append(c)    
        time.sleep(5)
    nxtPage += 10    
    driver.get(driver.current_url + "&start=" + str(nxtPage))      
else:
    driver.quit()
print(sites)

Как я уже говорил, URL-адрес правильный, и когда я использую Chrome Inspect, я проверяю правильность получающихся URL-адресов.Я в недоумении, почему отсортированные ссылки не собираются.Я не настолько знаком с lxml, но не должен ли он анализировать и собирать данные, как это происходит для стандартных периодов времени, или может быть другая проблема?

...