我正在使用漂亮的汤来制作网络刮刀。这是我的功能:
journalist_result = soup.find_all("h4",class_="slab")
if len(journalist_result)>0:
journalist_share = int(re.match(r'\d+', journalist_result[0].get_text()).group())
else:
journalist_share=0
基本上,我想要的是提取共享链接的记者人数。在这种情况下是221(例如见下文):
CASE1:
<h4 class="slab">221 journalists shared this link.
<a href="/pros">Join</a> or <a href="/account/login?next=/whosharedmylink/?url=http://www.cnn.com/">sign in</a> to Muck Rack to view their names.</h3>
我的代码适用于有记者共享或未找到网址的情况。 但是,我的代码打破了以下情况:
CASE2:
<h4 class="slab" style="margin-bottom:5px">
This link hasn't yet been shared by any journalists.<br /><a href="/pros">Learn about using Muck Rack Pro</a> to connect with journalists.
</h4>
这是因为在案例2中,没有找到记者。我得到的错误是:
追踪(最近一次通话): 文件“muckrackscraper.py”,第65行,in journalist_share = int(re.match(r'\ d +',journalist_result [0] .get_text())。group()) AttributeError:'NoneType'对象没有属性'group'
提前收到任何帮助!
答案 0 :(得分:1)
您似乎误解了代码失败的原因。情况2中的不是,但是在情况1中,您不从re.match
检查返回值,然后在None
上尝试函数调用。
如果字符串与模式不匹配,则返回None;请注意这一点 与零长度匹配不同。
所以你的模式与journalist_result[0].get_text()
中的模式不匹配;尝试检查此值,并添加None
。