2017-01-20 71 views
0

什麼美麗的湯發現正則表達式字符串使用?

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

我能夠得到使用BeautifulSoup

上述形式的鏈接列表形式的HTML鏈接我的代碼如下

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

然而,我想在鏈接中找到包含文字「Fetch」的鏈接。

我試過形式

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

但是,這是行不通的。我該如何選擇只有具有href的標籤a,並且文本部分中包含單詞「Fetch」?

回答

2

一個正則表達式可以在這裏矯枉過正,但它允許對可能的擴展:

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

太棒了!我將它重新編寫爲lambda函數。謝謝 ! – DrBug

+1

使用soup.findAll(lambda標記:tag.has_attr('href')和re.search('Fetch',tag.text)) – DrBug

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

你可以使用正則表達式作爲過濾,它將使用re.search方法來過濾標籤。

text/string是標籤的文本值,text = re.compile("Fetch")意味着找到它的文本值包含標籤「取」

Document

還有一件事,用find_all()findAll()findall()是不是一個關鍵的詞bs4