Selenium поиск в Google, а затем сканировать страницу, если ключевое слово существует - PullRequest
0 голосов
/ 19 сентября 2018

1. Я использую Selenium для поиска "дат выхода релиза" в Google.

2. Тогда я хочусканировать всю страницу результатов, если в результатах поиска присутствует мое поисковое слово "дата выпуска" .

Я повторно использую этот код шаблона поиска из предыдущего моего проекта, но этот использовал urllib,Поэтому мне пришлось немного изменить код шаблона поиска.Но это не делает то, что я хочу.Я застрял.Может ли кто-нибудь указать мне правильное направление?

from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
import re

#   Version Alpha 3
#_______________________________________________________________________________

browser = webdriver.Chrome(executable_path=r"C:\Selenium_Drivers\chromedriver.exe")
browser.get('http://www.google.com')

input_element = browser.find_element_by_name('q')
input_element.send_keys('sage release dates')
# input_element.send_keys('Wolters Kluwer release dates')
input_element.submit()

'''
RESULTS_LOCATOR = '//div/h3/a'

WebDriverWait(browser, 10).until(
    EC.visibility_of_element_located((By.XPATH, RESULTS_LOCATOR)))

page1_results = browser.find_elements(By.XPATH, RESULTS_LOCATOR)
'''

page1_results = browser.find_elements_by_class_name('med')

for item in page1_results:
    print(item.text)

#..................................................

keywords = ['release date']

# sequence = page1_results.decode('utf-8', 'ignore')
sequence = page1_results

for k in keywords:
    pattern = '(?i)' + k
    keyword = re.search(pattern, str(sequence))
    if keyword:
        # print(keyword.group(0))
        print('k-1')
        print(k)
        print(keyword)
    else:
        print('k-2')
        print('-')
        print(k)
        print(keyword)




#..................................................
# browser.quit()

1 Ответ

0 голосов
/ 19 сентября 2018

Вы можете просто создать интеллектуальный xpath, чтобы найти, содержат ли результаты поиска элементы с ключевым словом ('sage release date') текстом.Например, проверьте, содержит ли вся страница результатов один из следующих текстов или любой из следующих:

  • элементы результата с текстом 'sage'
  • элементы результата с текстом 'sage release'
  • элементы результата с текстом «даты выхода»

Таким образом, вы можете улучшить свой поиск.Тем не менее, вы изменяете xpath, если вам не нужны дополнительные фильтры.

Если вы хотите, чтобы результаты содержали текст «sage release date», используйте ниже xpath:

//*[contains(text(), 'sage release dates')]

Если вам нужны результаты только с текстом «даты выпуска», используйте ниже xpath:

//*[contains(text(), 'release dates')]

Пример фрагмента кода в Python:

from selenium import webdriver

driver.get('http://www.google.com')
elem = driver.find_element_by_name("q")
elem.send_keys("sage release dates")
elem.submit()

allResults = driver.find_elements_by_xpath("//*[contains(text(), 'sage release dates') or contains(text(), 'sage') or contains(text(), 'release') or contains(text(), 'sage release')]")
releaseDateResults = driver.find_elements_by_xpath("//*[contains(text(), 'release date')]")

print len(allResults)
print len(releaseDateResults)
driver.quit()
...