检查div类是否存在会返回错误

时间:2019-03-24 16:00:35

标签: python web-scraping beautifulsoup

在我使用beautifulsoup登录某些产品后,我尝试从网页上进行剪贴簿留言。在某些情况下,产品不再可用。该网页仅在没有产品的页面上具有如下所示的div类

<div class="alert alert-danger">
    <p>There is an error</p>

我愿意

if soup.find_all('div', {'class': 'alert'}):
    print('Alert...')

if soup.find_all('div', {'class': 'alert alert-danger'}):
    print('Alert...')

但是我得到的'int'对象在产品位置没有属性文本

请求的状态码为200

如何解决此问题,并代替空的产品显示某些内容?

2 个答案:

答案 0 :(得分:2)

嗯,也许这是您的解决方案

from bs4 import BeautifulSoup
p = '<div class="alert alert-danger">\n<p>There is an error</p>'

alert = 'alert'    

soup = BeautifulSoup(p, 'html.parser').div['class']

if alert in list(soup):
    print("Alert....")

答案 1 :(得分:1)

我从两个代码示例中运行了 if 的内容:

soup.find_all('div', {'class': 'alert'})

soup.find_all('div', {'class': 'alert alert-danger'})

在两种情况下,我都可以得到:

[<div class="alert alert-danger">
 <p>There is an error</p>
 </div>]

所以我无法复制您的错误。也许您使用的是 BeautifulSoup 的某些旧版本?

我的版本是 4.7.1 。尝试升级您的 BeautifulSoup 安装。

编辑

另一种方法是如何检查文档是否包含div 带有class="alert"的元素:

if soup.find_all('div', class_='alert'):
    print("Alert....")

请注意,关键字参数的末尾包含_,以便 与 Python 重新定义的单词( class )不同。这是一个相对较新的 BeautifulSoup 的功能。