基于文本获得href的美丽汤

tip*_*ipu 5 python beautifulsoup

假设有一个包含数百个链接的页面,每个链接在a标签中都有唯一的文本.如何指定标签的文本然后从那里获取href?例如,

for a in soup.findAll('a', href=True):
  print(a['href'])
Run Code Online (Sandbox Code Playgroud)

这会在整个页面中获得所有href,这是过度的.当我这样做:

for a in soup.findAll('a', href=True text="Some Value"):
  print(a['href'])
Run Code Online (Sandbox Code Playgroud)

我无法获取href标记,因为它不再返回Tag对象,而是返回Navigable对象.知道如何实现我的目标吗?

jco*_*ado 5

text您可以传递一个可调用对象作为检查name标记name和 的参数,而不是传递参数text

for tag in soup.findAll(lambda tag: (tag.name == 'a'
                                     and tag.text == 'Some Value'),
                        href=True):
    print tag['href']
Run Code Online (Sandbox Code Playgroud)

这样,返回值是 aTag而不是 a NavigableString

另请注意,根据文档:

如果您使用文本,则您为名称和关键字参数提供的任何值都将被忽略。

因此,即使您只想获得NavigableString.


Zso*_*kai 1

你至少可以做这样的事情:

for a in soup.findAll('a', href=True):
    if self.tag_to_string(a) == "Some Value":
        print(a['href'])    
Run Code Online (Sandbox Code Playgroud)

但还有其他方法。

华泰