BeautifulSoup:检查文本字段级别,如果没有找到HTML标签匹配



从HTML中使用标签和类提取数据,如下所示

在某些网页上,电话号码。缺少,因此脚本失败。

基本上,如果电话号码。存在(如,<a href="tel:(111) 222-1111" class="phone-number" data-clickstream-phone-module>(111) 222-1111</a>),那么下面的工作完美-它拉出电话号码。并将其放入输出文件中。

但是如果电话没有。缺少(如<p class="no-phone-no">No number available</p>),则此脚本失败。

with open(filename, "w+") as output:
#For Factory Name and & phone no.
for a in soup.select('.head-desc'):
facdetails = [
a.select_one('h3').text,
a.select_one('.phone-number').text,
]
output.write('-'.join(facdetails)+'n')

我想在(a.select_one('.phone-number').text)字段级别实现检查,这样如果电话号码。在not available中,只需附加/写入&;No number available&;到输出文件,并继续进一步的代码处理,而不是脚本失败并停止。

有什么意见吗?

PS:我确实通过这个SO线程- BeautifulSoup:如果没有找到HTML元素,则返回None,但它似乎提供了在整个SOUP元素级别工作的解决方案。我正在寻找检查"a.select_one('.phone-number').text">

有多个这样的字段要处理,所以我正在寻找一个检查和处理字段级别

生成的错误信息:

---> 22                     a.select_one('.phone-number').text,
AttributeError: 'NoneType' object has no attribute 'text'

尝试这将解决您的问题,如果文本返回None脚本不会失败,换句话说,如果<p class="no-phone-no">No number available</p>中没有电话号码,将传递它并找到一个带有电话号码的字段。

try:
for a in soup.select('.head-desc'):
facdetails = [
a.select_one('h3').text,
a.select_one('.phone-number').text,
]
output.write('-'.join(facdetails)+'n')
except AttributeError:
facdetails = [a.select_one('h3').text] # Edit

最简单的方法是添加try ..抓住。越简单越好

相关内容

最新更新