首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >BS4,找出.text是否为空

BS4,找出.text是否为空
EN

Stack Overflow用户
提问于 2017-08-10 18:47:13
回答 1查看 2.8K关注 0票数 1

我正试着刮一个网页。在某些情况下,所有的数据都在那里,但是当用户“限定”时,它会返回一个400错误。我正在设法弄清楚如何判断这段文字是否是空的。

下面是HTML:

https://hastebin.com/abotejaquy.scala --正如你所看到的,大多数标签中都有文本("Silver“),但其中两个没有任何内容。

下面是我正在尝试的代码:

https://hastebin.com/xubibivara.py

它返回以下内容:

银III

银II

银IV

(符合资格的地方)

西尔弗一世

银III

银III

(符合资格的地方)

银V

银IV

-文字出现了,但排位赛没有出现.

谢谢

EN

回答 1

Stack Overflow用户

发布于 2017-08-10 18:53:38

我不确定您的特定问题,但是对于代码的第一稿来说,这是一条经验法则--如果有什么东西引起了异常,您可以只处理异常。铲运机尤其如此。

看看下面的代码:

从bs4导入BeautifulSoup导入请求

代码语言:javascript
复制
request = requests.get(url)
soup = BeautifulSoup(request.content, 'html.parser')
all_tags = list(soup.find_all('div', class_='profile-ranking-rank'))
kitname = list(soup.find_all('div', class_="profile-ranking-title"))

for tag in all_tags:
    try:
       print (tag.text)
    except Exception:
       print("Qualifying")

更新

我不能重现这个异常,但看起来有些跨度中有空字符串。BS4处理它的方式是将.text作为空字符串,而不是None,因此在本例中应该检查字符串长度:

代码语言:javascript
复制
request = requests.get(url)
soup = BeautifulSoup(request.content, 'html.parser')
all_tags = list(soup.find_all('div', class_='profile-ranking-rank'))
kitname = list(soup.find_all('div', class_="profile-ranking-title"))

for tag in all_tags:
    if len(tag.text) > 0:
       print (tag.text)
    else:
       print("Qualifying")
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/45621401

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档