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 爬取笔趣阁所有的小说

python beautifulsoup 怎么定位class

python BeautifulSoup解析表

Python BeautifulSoup,遍历标签和属性

在 python BeautifulSoup 上获取带有特定前缀的超链接