2014-02-19 68 views
1

我正在使用python with BeautifulSoup 4來查找匹配特定正則表達式的html頁面中的鏈接。我能夠找到與正則表達式匹配的鏈接和文本,但兩者結合在一起將無法正常工作。這裏是我的代碼:我的湯怎麼了?

import re 
import bs4 

s = '<a href="javascript://">Sign in&nbsp;<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

in引人注目的是,下面的工作:print soup.find_all('a')[0] .find_all(text = match)它返回,[u'登錄\ xa0'] – Totem

回答

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評論道路設計