3

以下は私のコードです。html のイメージ タグ内のイメージの src を取得しようとします。

import re
for text in open('site.html'):
  matches = re.findall(r'\ssrc="([^"]+)"', text)
  matches = ' '.join(matches)
print(matches)

問題は、次のようなものを入れるときです:

<img src="asdfasdf">

動作しますが、HTML ページ全体を挿入すると何も返されません。なぜそれをするのですか?どうすれば修正できますか?

Site.html は、標準形式の Web サイトの HTML コードです。すべてを無視して、画像のソース コードのみを出力するようにします。site.html の内容を確認したい場合は、基本的な HTML Web ページに移動し、すべてのソース コードをコピーします。

4

1 に答える 1

10

BeautifulSoupのようなものでこれを簡単に実行できるのに、正規表現を使用して HTML を解析する理由:

>>> from bs4 import BeautifulSoup as BS
>>> html = """This is some text
... <img src="asdasdasd">
... <i> More HTML <b> foo </b> bar </i>
... """
>>> soup = BS(html)
>>> for imgtag in soup.find_all('img'):
...     print(imgtag['src'])
... 
asdasdasd

コードが機能しない理由textは、ファイルの 1 行にあるためです。したがって、すべての反復で一致する行のみが見つかります。これでうまくいくかもしれませんが、最後の行に画像タグがない場合を考えてみてください。matchesは空のリストになり、joinになり''ます。すべての行で変数をオーバーライドしていますmatches

findallHTML全体を呼び出したい:

import re
with open('site.html') as html:
    content = html.read()
    matches = re.findall(r'\ssrc="([^"]+)"', content)
    matches = ' '.join(matches)

print(matches)

ここでステートメントを使用すると、withより Pythonic になります。また、ステートメントがそれを扱っているfile.close()ため、後で呼び出す必要がないことも意味します。with

于 2013-08-18T00:53:46.763 に答える