假设有一个包含数百个链接的页面,每个链接在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对象。知道如何实现我的目标吗?
答案 0 :(得分:4)
您可以传递一个可调用的text
参数来检查标记name
和name
:
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'])