Python -Google搜索-如何设置灵活的结果选择

时间:2019-04-28 11:59:11

标签: python-3.x selenium selenium-webdriver web-scraping

我正在尝试抓取一些通过Google搜索访问它们的页面,并且需要添加一些限制词列表。

可以说,在Google搜索中,Python的4个最佳结果是:

然后,我想打开第一个结果,该结果不包含诸如: 搜索描述和/或链接中的[“ .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 :(得分:0)

您可以更新选择器以单击所需的链接:

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

这将排除包含子字符串"org""wikipedia"的结果

答案 1 :(得分:-1)

CSS:

也许类似以下内容,它基于href进行了排除(也限制了以http开头的href并删除了类为.fl的类。:not伪类通过条件列表传递-在这种情况下,大多数子字符串要通过包含操作符排除。

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

下面的测试用例已通过多个不同国家/地区的Google搜索进行了测试

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)