python/beautifulsoup 查找所有带有特定锚文本的 <a href>
Posted
技术标签:
【中文标题】python/beautifulsoup 查找所有带有特定锚文本的 <a href>【英文标题】:python/beautifulsoup to find all <a href> with specific anchor text 【发布时间】:2012-10-25 19:06:18 【问题描述】:我正在尝试使用漂亮的汤来解析 html 并找到所有带有特定锚标记的 href
<a href="http://example.com">TEXT</a>
<a href="http://example.com/link">TEXT</a>
<a href="http://example.com/page">TEXT</a>
我要查找的所有链接都具有完全相同的锚文本,在本例中为 TEXT。我不是在寻找 TEXT 这个词,我想使用 TEXT 这个词来查找所有不同的 HREF
编辑:
为了澄清寻找类似于使用类来解析链接的东西
<a href="http://example.com" class="visible">TEXT</a>
<a href="http://example.com/link" class="visible">TEXT</a>
<a href="http://example.com/page" class="visible">TEXT</a>
然后使用
findAll('a', 'visible')
除了我正在解析的 HTML 没有类但总是相同的锚文本
【问题讨论】:
【参考方案1】:这样的东西有用吗?
In [39]: from bs4 import BeautifulSoup
In [40]: s = """\
....: <a href="http://example.com">TEXT</a>
....: <a href="http://example.com/link">TEXT</a>
....: <a href="http://example.com/page">TEXT</a>
....: <a href="http://dontmatchme.com/page">WRONGTEXT</a>"""
In [41]: soup = BeautifulSoup(s)
In [42]: for link in soup.findAll('a', href=True, text='TEXT'):
....: print link['href']
....:
....:
http://example.com
http://example.com/link
http://example.com/page
【讨论】:
试图找到一种更快的方法,对我来说,这需要更长的时间来处理,因为它会找到所有 href,然后将每个 href 与文本进行比较以找到匹配项。最好我可以直接解析所需的链接。就像当 href 有一个类时你可以做 findAll('a', 'className') @cwal 哦,明白了(我的糟糕 - 漫长的一天 :))。尝试更新版本 - 它将其构建到过滤器中。这样做是你想要的吗?这会将它们作为生成器加载,而不是全部加载,因此我相信这是您将获得的最快速度(因为 BS 需要预先采取一些方法来检查链接是否符合您的标准)。如果这不起作用,很乐意帮助您考虑另一种方式。 这看起来确实有效!我试过这个,但没有 href=true ,它似乎没有工作。不幸的是,我现在没有时间检查它是否适合我,但我会尽快发回我的结果。谢谢! @cwal 我相信这段代码会返回文本节点,而不是元素节点。尝试将其更改为打印 link.parent['href'] 可以在 text 参数上使用re.compile()
吗?以上是关于python/beautifulsoup 查找所有带有特定锚文本的 <a href>的主要内容,如果未能解决你的问题,请参考以下文章
Python/BeautifulSoup - 如何从元素中删除所有标签?
Python BeautifulSoup 爬取笔趣阁所有的小说