【问题标题】:Python extracting number from HTML tag using beautiful soupPython使用漂亮的汤从HTML标签中提取数字
【发布时间】:2013-11-26 18:53:46
【问题描述】:

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

    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(见下文示例):

案例1:

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

我的代码适用于有记者分享或找不到 URL 的情况。 但是,我的代码在以下情况下会中断:

案例2:

<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 中,没有找到记者。我得到的错误是:

Traceback(最近一次调用最后一次): 文件“muckrackscraper.py”,第 65 行,在 记者分享= int(re.match(r'\d+',记者结果[0].get_text()).group()) AttributeError:“NoneType”对象没有属性“组”

提前感谢您的帮助!

【问题讨论】:

    标签: python html regex beautifulsoup


    【解决方案1】:

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

    来自re.match documentation

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

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

    【讨论】:

    • 感谢您的帮助!
    猜你喜欢
    • 2020-02-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-11-07
    • 2019-09-06
    相关资源
    最近更新 更多