只抓住连续的第一个链接

时间:2014-04-03 19:35:30

标签: python beautifulsoup

我正在使用python和beautifulsoup来刮擦一张桌子。在此表中,每行都有多个链接。我只对每一行的第一个链接感兴趣。如何跳过该行的其他链接?

3 个答案:

答案 0 :(得分:0)

只需使用find()代替find_all()find()找到第一个匹配项并停止:

  

find_all()方法扫描整个文档以查找结果,   但有时你只想找到一个结果。如果你知道一份文件   只有一个标签,扫描整个标签是浪费时间   文件寻找更多。而不是每次传递limit = 1   你调用find_all,你可以使用find()方法。

演示:

>>> from bs4 import BeautifulSoup
>>> data = """
... <html>
... <head>
...     <title>Test</title>
... </head>
... <body>
...     <div>
...         <a href="">First Link</a>
...         <a href="">Second Link</a>
...         <a href="">Third Link</a>
...     </div>
... </body>
... </html>"""
>>> soup = BeautifulSoup(data)
>>> soup.find_all('a')
[<a href="">First Link</a>, <a href="">Secod Link</a>, <a href="">Third Link</a>]
>>> soup.find('a')
<a href="">First Link</a>

希望有所帮助。

答案 1 :(得分:0)

以下是您可以执行此操作的示例:

## first find all the tr tags
trs =  soup.find_all("tr")

## then for each tr find the a tag from there
for tr in trs:
    tr.find("a")  ## finds the first link

答案 2 :(得分:0)

我只是自己解决这个问题,以为我会给出我的解决方案,该解决方案基于@Sabuj Hassan的上述回答。下面的代码将拉出每个链接,并将其添加到名为“链接”的列表中,然后可以将其添加到df中。希望这可以帮助某个人!

hr.break{ background: 0; border: 0; margin: 0;}