从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 ..抓住。越简单越好