2017-07-06 192 views
0

我只是想用正則表達式來檢索所有元素具有「//」在我的HTML字符串中的HTML標籤,我跟着回答了這個問題:Using BeautifulSoup to find a HTML tag that contains certain textBeautifulSoup找不到包含某些文字

然後我編寫一個類似:

from BeautifulSoup import BeautifulSoup 
import re 

html_text = \ 
""" 
<html> 
    <!--&lt;![endif]--> 
    <head> 
     <link rel="stylesheet" href="//abc.com/xyz" /> 
     <meta rel="stylesheet" href="//foo.com/bar" /> 
    </head> 
</html> 
""" 

soup = BeautifulSoup(html_text) 

for elem in soup(text=re.compile(r'//')): 
    print elem 

我希望我會喜歡的結果:

//abc.com/xyz 
//foo.com/bar 

但我什麼也得不到。我不知道爲什麼他們的測試用例能夠正常工作,但我的是否有錯誤,或者我錯過了我的腳本中的某些內容?

+0

在他們的例子中,他們正在尋找他們標籤的'text'內容,你的被定義爲'href'屬性。嘗試用'href'替換'text'(即'soup(href = re.compile(r「//」))')。 – zwer

+0

@zwer非常感謝:D – Blurie

回答

2

錯誤的屬性設置在評論問題

soup = BeautifulSoup(html_text, 'lxml') 

for elem in soup(href=re.compile(r'//')): 
    print elem.get('href') 

提取方法,你需要分析發現之後,標籤包含數據的數據。

def has_requires_chars(tag): 
    value_list = [] 
    attrs_value = tag.attrs.values() 
    for avalue in attrs_value: 
     if type(avalue) is list: 
      value_list = value_list + avalue 
     else: 
      value_list.append(avalue) 
    for value in value_list: 
     if "//" in value: 
      return True 
    return False 

soup = BeautifulSoup(html_text, 'lxml') 
for elem in soup.find_all(has_requires_chars): 
    print elem 
+0

非常感謝,它很有用,但如果它並不總是「href」屬性,我們怎麼也能捕捉到這個呢? – Blurie

+0

如果您的案例沒有合適的過濾器,您可以編寫自己的方法併發送到'find_all()'。 –