什么美丽的汤findall正则表达字符串使用?

时间:2017-01-20 07:06:39

标签: python regex web-scraping beautifulsoup

我有HTML格式的链接

<a href="/downloadsServlet?docid=abc" target="_blank">Report 1</a>
<a href="/downloadsServlet?docid=ixyz" target="_blank">Fetch Report 2 </a>

我可以使用BeautifulSoup

获取上述表单的链接列表

我的代码如下

from bs4 import BeautifulSoup
html_page = urllib2.urlopen(url)
soup = BeautifulSoup(html_page)
listOfLinks = list(soup.findall('a'))

但是,我想在引用该链接的文本中找到带有“获取”一词的链接。

我尝试了表格

soup.findAll('a', re.compile(".*Fetch.*"))

但这不起作用。如何仅选择具有href且文本部分中包含“Fetch”一词的标签?

2 个答案:

答案 0 :(得分:3)

正则表达式在这里可能有点过分,但它允许可能的扩展:

def criterion(tag):
  return tag.has_attr('href') and re.search('Fetch', tag.text)

soup.findAll(criterion)
# [<a href="/downloadsServlet?docid=ixyz" target="_blank">Fetch Report 2 </a>]

答案 1 :(得分:2)

import re
soup.findAll('a', text = re.compile("Fetch"))

您可以使用正则表达式作为过滤器,它将使用re.search方法过滤我们的标记。

text/string是代码的文字值,text = re.compile("Fetch")表示查找文本值包含的标记&#39;获取&#39;

Document

还有一件事,使用find_all()findAll()findall()不是bs4中的关键词