Я пытаюсь собрать результаты поиска 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, но не должен ли он анализировать и собирать данные, как это происходит для стандартных периодов времени, или может быть другая проблема?