4

我正在尝试在 python webscraper 中构建一个函数,该函数将移动到结果列表中的下一页。我无法在美丽的汤中找到元素,因为链接位于许多其他标签的末尾,并且没有任何属性,例如类或 ID。

这是html的一个片段:

<a href="http://www.url?&=page=2">
     Next
    
   </a>

我一直在阅读 bs4 文档,试图了解如何提取 URL,但我被难住了。我认为它可以通过以下任一方式完成:

  1. 在父元素中找到最后一个 .a['href'] ,因为它始终是最后一个。
  2. 根据它始终具有“下一个”文本的事实来查找href

我不知道如何编写可以解决 1. 或 2. 的问题。

我走对了吗?有没有人有任何建议来实现我的目标?谢谢

4

1 回答 1

2

要查找<a>包含 text 的标签Next,您可以执行以下操作:

from bs4 import BeautifulSoup


txt = '''
<a href="http://www.url?&=page=2">
     Next
    
   </a>'''


soup = BeautifulSoup(txt, 'html.parser')    
print(soup.select_one('a:contains("Next")')['href'])

印刷:

http://www.url?&=page=2

或者:

print(soup.find('a', text=lambda t: t.strip() == 'Next')['href'])

要获取<a>某个元素内的最后一个标签,您可以索引ResultSetwith [-1]

from bs4 import BeautifulSoup


txt = '''
<div id="block">
    <a href="#">Some other link</a>
    <a href="http://www.url?&=page=2">Next</a>
</div>
'''


soup = BeautifulSoup(txt, 'html.parser')

print(soup.select('div#block > a')[-1]['href'])
于 2020-09-01T17:46:24.513 回答