我正在使用带有BeautifulSoup 4的python来查找与特定正则表达式匹配的html页面中的链接。我能够找到与正则表达式匹配的链接和文本,但两者结合在一起将无法正常工作。这是我的代码:
import re
import bs4
s = '<a href="javascript://">Sign in <br /></a>'
soup = bs4.BeautifulSoup(s)
match = re.compile(r'sign\s?in', re.IGNORECASE)
print soup.find_all(text=match) # [u'Sign in\xa0']
print soup.find_all(name='a')[0].text # Sign in
print soup.find_all('a', text=match) # []
评论是输出。如您所见,组合搜索没有返回结果。这很奇怪。
似乎与链接文本中包含的“br”标记(或通用标记)有关。如果你删除它,一切都按预期工作。
答案 0 :(得分:0)
您可以查找标签或查找其文字内容,但不能同时查找:
鉴于:
self.name = u'a'
self.text = SRE_Pattern: <_sre.SRE_Pattern object at 0xd52a58>
来自source:
# If it's text, make sure the text matches.
elif isinstance(markup, NavigableString) or \
isinstance(markup, basestring):
if not self.name and not self.attrs and self._matches(markup, self.text):
found = markup
这使@Totem成为了设计的方法