【问题标题】:BeautifulSoup to find text within <img alt tagBeautifulSoup 在 <img alt 标签中查找文本
【发布时间】:2013-01-11 22:29:59
【问题描述】:

这是我从这行 Python 代码中得到的结果

listm = soup.findAll('td',{'class':'thumb'})

当我遍历列表时,这里是一个项目的示例......

<a href="/property-search/property-details/1021206?StrtNum=1507"><img alt="1507 BOSTWICK LN" src="/res/slir/w75-h57-c4:3/propertyimages/20120904/BB/DSCN0738.JPG"/></a>

但是,我真正想要的是&lt;img alt= 中的“1507 BOSTWICK LN”

我已经尝试了 .get_text 并返回一个空白,我已经尝试过 lista = soup.findAll('td',{'class':'thumb'},{'alt':'img'}),以及其他几个没有让我知道文本的变体。

我想让 BeautifulSoup 返回文本,还是使用正则表达式?我对 RE 的了解很丰富,任何意见都将不胜感激!

【问题讨论】:

    标签: python regex beautifulsoup


    【解决方案1】:

    试试这个:

    listm = soup.findAll('td',{'class':'thumb'})
    for elem in listm:
        print elem('img')[0]['alt']
    

    这应该在每个td 中找到img 标记并打印alt 属性的值。

    编辑:

    您不应假设存在img 标签。改为这样做:

    listm = soup.findAll('td',{'class':'thumb'})
    for elem in listm:
        imgs = elem('img')
        if imgs:
            print imgs['alt']
    

    【讨论】:

    • 嗨;谢谢你们两位的精彩回复!使用 if imgs: print imgs['alt'] 或 if imgs is not None: print imgs 有什么区别?
    • 能不能用,没有区别。然而,根据 PEP8,if imgs: 是合适的。链接在这里:python.org/dev/peps/pep-0008
    • 如果这个答案对你有帮助,你应该接受它是正确的 =)
    【解决方案2】:

    您的td 元素包含一些嵌套元素;在每个 td 元素中搜索 img 标记,然后通过项目查找获取 alt 属性:

    for td in listm:
        img = td.find('img')
        if img is not None:
            print img['alt']
    

    【讨论】:

    • 别担心 =) 我猜你的平局速度更快!此外,你的答案更好。我不检查img 标签。我只是假设它的存在。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-10-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-01-30
    相关资源
    最近更新 更多