基于文本获得href的美丽汤

时间:2012-01-06 07:28:32

标签: python beautifulsoup

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

for a in soup.findAll('a', href=True):
  print(a['href'])

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

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

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

3 个答案:

答案 0 :(得分:4)

您可以传递一个可调用的text参数来检查标记namename

,而不是传递text参数。
for tag in soup.findAll(lambda tag: (tag.name == 'a'
                                     and tag.text == 'Some Value'),
                        href=True):
    print tag['href']

这样,返回的值为Tag而不是NavigableString

另请注意,根据文档:

  

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

因此,即使您只想获得NavigableString,问题中的第二个示例也可能无法正常工作。

答案 1 :(得分:1)

你至少可以这样做:

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

但还有其他方法。

HTH

答案 2 :(得分:0)

在寻找所有'在标签文本的开头:

for tag in soup.findAll(lambda tag: (tag.name == 'a' and re.search('^See all',tag.text)), href=True):
    print 'href: ', tag['href']

for a in soup.findAll('a', href=True):
    if re.search('^See all',a.text):
        print 'href: ',(a['href'])