使用BS4循环提取HTML数据

2024-09-30 07:29:28 发布

您现在位置:Python中文网/ 问答频道 /正文

我目前正试图循环使用一个大约有1000行的数据帧。每行调用一个网站。到现在为止,一直都还不错。然而,当我试图从网站中提取特定的数据条目时,它在100次循环后停止工作,有时在300次循环后停止工作。我目前的代码是:

for i in rows:
url = "https://www.boerse-stuttgart.de/en/products/investment-products/discount-certificates/stuttgart/{}".format(i)
r = requests.get(url)
soup = BeautifulSoup(r.text, "html.parser")
first_day = soup.find("dt", text="First exchange day").findNext('dd').string

行是我使用的数据帧。我总是得到错误“'NoneType'对象没有'findNext'属性”。我的标签搜索有问题吗?我需要的数据输入在dd标签中,但现在有了具体的名称,我可以直接搜索到它。非常感谢您的帮助


Tags: 数据代码texturlfor网站条目标签
2条回答

你得到'NoneType' object has no attribute 'findNext'是因为你在对不存在的东西调用.findNext()

如果页面上没有带有文本First exchange daydt元素,则此行

soup.find("dt", text="First exchange day")

返回None。当您尝试调用此None值上的.findNext()时,会出现错误

您需要添加一个签入,确保您确实在页面上找到了dt元素;如果你找到它,那么就做findNext()。如果你没有,那就跳过这一步

当您试图在数据不存在的行中查找数据时,会发生此错误

for i in rows:
    url = "https://www.boerse-stuttgart.de/en/products/investment-products/discount-certificates/stuttgart/{}".format(i)
    r = requests.get(url)
    soup = BeautifulSoup(r.text, "html.parser")
    try:
        first_day = soup.find("dt", text="First exchange day").findNext('dd').string
    except:
        print('The required data does not exist in this row')

如果数据可用,执行上述更改将使您能够提取数据,否则它将只打印不可用的数据。您也可以使用if-else,但这是最简单的方法

相关问题 更多 >

    热门问题