Python -Google Search - Как настроить гибкий выбор результатов - PullRequest
2 голосов
/ 28 апреля 2019

Я пытаюсь очистить некоторые страницы, к которым обращается Google Search, и мне нужно добавить список ограниченных слов.

Допустим, 4 лучших результата для Python в поиске Google:

Тогда я хотел бы открыть 1-й результат, который не содержит таких слов, как: [".org", "wikipedia"] в описании поиска и / или ссылке - (поэтому в этом случае скрипт откроет w3schools)

Я пытался завершить работу с различными селекторами / и получить весь документ страницы поиска Google, но пока что никаких положительных результатов не получилось:

search = driver.find_element_by_name('q') 
search.send_keys("Gran Hotel La Florida G.L Monumento")
search.send_keys(Keys.RETURN) # hit return after you enter search text time.sleep(5)
driver.find_element_by_class_name('LC20lb').click()

Это открывает первый результат без рекламы.

Ответы [ 2 ]

0 голосов
/ 28 апреля 2019

CSS:

Может быть, что-то вроде следующего, которое исключает на основе href (также ограничивает href, начиная с http, и удаляет те, у которых есть класс .fl. :not. Псевдоклассу передается список условий - в этом случае, в основном, это подстроки исключить через оператор содержит.

.r [href^=http]:not(.fl,[href*=\.org],[href*=wikipedia])

Тестовый пример, приведенный ниже, с несколькими поисковыми запросами в разных странах

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
from bs4 import BeautifulSoup as bs

d = webdriver.Chrome()
d.get('https://www.google.com/')
d.find_element_by_css_selector('[title=Search]').send_keys('python')
WebDriverWait(d, 5).until(EC.element_to_be_clickable((By.CSS_SELECTOR, '[type=submit]'))).click()
WebDriverWait(d,10).until(EC.presence_of_all_elements_located((By.CSS_SELECTOR,'.r')))
soup = bs(d.page_source, 'lxml')
links =  [link['href'] for link in soup.select('.r [href^=http]:not(.fl,[href*=\.org],[href*=wikipedia])')]
print(links)
0 голосов
/ 28 апреля 2019

Вы можете обновить селектор, нажав на нужную ссылку:

driver.find_element_by_xpath('//h3[@class="LC20lb" and not(contains(text(), "org")) and not(contains(text(), "wikipedia"))]').click()

Это исключит результаты, содержащие подстроку "org" и "wikipedia"

...