【问题标题】:Extracting HTML Data with BS4 loop使用 BS4 循环提取 HTML 数据
【发布时间】:2020-06-08 10:48:19
【问题描述】:

我目前正在尝试遍历我拥有的大约 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

rows 是我使用的数据框。我总是得到错误“'NoneType'对象没有属性'findNext'”。我的标签搜索有问题吗?我需要的数据条目在 dd 标记内,但现在有具体的名称,据我所知,我可以直接搜索。任何帮助是极大的赞赏。

【问题讨论】:

    标签: python web-scraping beautifulsoup


    【解决方案1】:

    当您尝试在不存在的行中查找数据时发生错误。

    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,但这是最简单的方法。

    【讨论】:

    • 这真的很有帮助!该代码现在可以使用,我可以实际使用它。非常非常感谢。
    【解决方案2】:

    您收到 'NoneType' object has no attribute 'findNext' 是因为您在不存在的东西上调用 .findNext()

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

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

    返回None。当您尝试在此 None 值上调用 .findNext() 时,您会收到错误消息。

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

    【讨论】:

    • 是的,非常感谢。您的回答和 Atharva 解决了我的问题,因此我可以使用它。我对编码完全陌生,实际上在我的代码的另一点使用了检查,但不知何故无法将其转化为这个问题。无论如何,再次感谢!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-08-05
    相关资源
    最近更新 更多