【发布时间】:2020-10-22 17:58:50
【问题描述】:
我正在编写一个 Python 脚本,使用 selenium chromedriver 从指定数量的结果页面中抓取所有谷歌搜索结果(链接、标题、文本)。
我的代码似乎只是从第一页之后的所有页面中抓取第一个结果。 我认为这与我的 for 循环在 scrape 函数中的设置方式有关,但我无法将其调整为我想要的工作方式。任何有关如何解决/更好地解决此问题的建议。
# create instance of webdriver
driver = webdriver.Chrome()
url = 'https://www.google.com'
driver.get(url)
# set keyword
keyword = 'cars'
# we find the search bar using it's name attribute value
searchBar = driver.find_element_by_name('q')
# first we send our keyword to the search bar followed by the ent
searchBar.send_keys(keyword)
searchBar.send_keys('\n')
def scrape():
pageInfo = []
try:
# wait for search results to be fetched
WebDriverWait(driver, 10).until(
EC.presence_of_element_located((By.CLASS_NAME, "g"))
)
except Exception as e:
print(e)
driver.quit()
# contains the search results
searchResults = driver.find_elements_by_class_name('g')
for result in searchResults:
element = result.find_element_by_css_selector('a')
link = element.get_attribute('href')
header = result.find_element_by_css_selector('h3').text
text = result.find_element_by_class_name('IsZvec').text
pageInfo.append({
'header' : header, 'link' : link, 'text': text
})
return pageInfo
# Number of pages to scrape
numPages = 5
# All the scraped data
infoAll = []
# Scraped data from page 1
infoAll.extend(scrape())
for i in range(0 , numPages - 1):
nextButton = driver.find_element_by_link_text('Next')
nextButton.click()
infoAll.extend(scrape())
print(infoAll)
【问题讨论】:
-
这是什么问题,您是否遇到错误?
-
@Jortega 没有收到错误,问题是:我希望返回的结果集包括第 1 - 5 页的所有结果(或任何在 numPages 中指定的页数) .但是我得到的结果只显示了第 1、2、3、4 和 5 页的第一个结果。我想弄清楚如何让它从数据集中包含的每个页面上的所有结果中抓取数据.
标签: python selenium selenium-webdriver selenium-chromedriver