2017-07-06 7 views
0

を含むHTMLタグを見つけることができません。その後、Using BeautifulSoup to find a HTML tag that contains certain textBeautifulSoupは、私はちょうど私のHTML文字列に「//」を持っているすべての要素を取得するために正規表現を使用したい、と私はこの質問から答えをたどる特定のテキスト

そして、私は同様のものをコーディング:

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'属性として定義されています。 'text 'を' href'(例えば '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()'に送ることができます。 –

関連する問題