首页 > 解决方案 > 硒中的元素迭代

问题描述

我正在尝试制作一个网络抓取工具,它可以抓取《纽约时报》搜索结果页面并抓取和存储出版日期、作者、标题等内容。标题和日期等其他所有字段都被正确抓取和存储,但作者却没有,因为有些文章没有作者元素。

我要做的是遍历搜索结果并存储作者姓名,如果找不到该姓名,我想将其设置为-1。我有这段代码,但它没有将 -1 存储在缺少的作者的位置。

(我刚刚开始进行网络抓取,这是我的第一个项目。)

from selenium import webdriver
from selenium.common.exceptions import NoSuchElementException
import time
authors = []

driver = webdriver.Firefox()
driver.get('https://www.nytimes.com/search?dropmab=false&query=Machine%20Learning&sort=newest')

for i in range(6):
    time.sleep(3)
    driver.find_element_by_xpath('(//button[contains(.,"Show More")])').click()

result_cards = driver.find_elements_by_css_selector('li.css-1l4w6pd')

for item in result_cards:
    try:
        author = item.find_elements_by_xpath('(//p[@class="css-15w69y9"])')
    except NoSuchElementException:
        print("No author found for this")
        author = -1
for auth in author:
    authors.append(auth.text)

标签: pythonseleniumweb-scraping

解决方案


在最后一个for循环中,您正在迭代author这将引发错误,因为它不可迭代。

您可以省略最后一个 for 循环。

我对您的 try-except 语句进行了一些更改,这些语句应该可以完成您的工作。

for item in result_cards:
    try:
        author = item.find_elements_by_xpath('(//p[@class="css-15w69y9"])')
        authors.append(author)
    except NoSuchElementException:
        print("No author found for this")
        authors.append(-1)

上面的代码会将作者附加到authors列表中,如果找到作者,否则它将附加-1 到您的列表中。


推荐阅读