BS4,确定.text是否为空

时间:2017-08-10 18:47:14

标签: python

我正在尝试抓一个网页。在某些情况下,所有数据都存在,但是当用户符合资格时它返回400错误。我试图找出如何判断文本是否为空。

这是HTML:

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

这是我正在尝试的代码:

https://hastebin.com/xubibivara.py

它返回:

Silver III

Silver II

Silver IV

(符合资格的空间)

Silver I

Silver III

Silver III

(符合资格的空间)

Silver V

Silver IV

- 文字显示但排位赛没有。

由于

1 个答案:

答案 0 :(得分:0)

我不确定您的特定问题,但是代码的初稿的经验法则 - 如果某些事情引发异常,您可以处理异常。对刮刀来说尤其如此。

看看下面的代码:

来自bs4 import BeautifulSoup 导入请求

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,所以在这种情况下你应该检查字符串长度:

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")