Python使用漂亮的汤从HTML标签中提取数字

时间:2013-11-26 18:53:46

标签: python html regex beautifulsoup

我正在使用漂亮的汤来制作网络刮刀。这是我的功能:

    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'

提前收到任何帮助!

1 个答案:

答案 0 :(得分:1)

您似乎误解了代码失败的原因。情况2中的不是,但是在情况1中,您不从re.match检查返回值,然后在None上尝试函数调用。

来自re.match documentation

  

如果字符串与模式不匹配,则返回None;请注意这一点   与零长度匹配不同。

所以你的模式与journalist_result[0].get_text()中的模式不匹配;尝试检查此值,并添加None

的检查
相关问题