3

HTMLソースコードで画像を見つけなければなりません。私は html.parser の代わりに regex を使用しています。なぜなら、私は html.parser をよく知っているからです。しかし、子供のように html 解析を使用する方法を説明していただければ、喜んでその道を進みます。

Beautifulsoup を使用できません。

ここで正規表現と html ( example )に関する多くの質問と回答を読んだので、このトピックに関する感情を認識しています。

しかし、聞いてください!

これが私のコーディングの試みです(Python 3):

import urllib.request
import re

website = urllib.request.urlopen('http://google.com')
html = website.read()
pat = re.compile (r'<img [^>]*src="([^"]+)')
img = pat.findall(html)

regex101.com で正規表現を再確認したところ、img リンクを見つけることができましたが、IDLE で実行すると構文エラーが発生し、キャレットが強調表示され続けます。なんで?

私は正しい方向に向かっています...はい?

更新: こんにちは。簡単な回答が得られるのではないかと考えていましたが、コミュニティの神経質になったようです。

私は間違いなくプログラミングが初めてでひどいものです。それを回避する方法はありません。私はすべてのコメントを読んでおり、ユーザーが私に示してくれたすべての助けと忍耐に本当に感謝しています.

4

3 に答える 3

2

正規表現に問題はありません。次の 2 つの点が欠けています。

  1. Python には正規表現型がないため、文字列でラップする必要があります。文字列を使用しrawて、文字列がエスケープ解釈なしでそのまま正規表現コンパイラに渡されるようにします
  2. .read()呼び出しの結果は、文字列ではなくバイト シーケンスです。したがって、バイトシーケンスの正規表現が必要です。

2 つ目は Python3 固有のものです (Py3 を使用しているようです)。

すべてをまとめると、前述の行を次のように修正するだけです。

pat = re.compile (rb'<img [^>]*src="([^"]+)')

rraw およびbバイト シーケンスを表します。

さらに、 http://stackoverflow.com<img>のように、タグに画像を実際に埋め込む Web サイトでテストします。http://google.comを処理しても何も見つかりません

どうぞ:

Python 3.3.2+
Type "help", "copyright", "credits" or "license" for more information.
>>> import urllib.request
>>> import re
>>> website = urllib.request.urlopen('http://stackoverflow.com/')
>>> html = website.read()
>>> pat = re.compile (rb'<img [^>]*src="([^"]+)')
>>> img = pat.findall(html)
>>> img
[b'http://i.stack.imgur.com/tKsDb.png', b'http://i.stack.imgur.com/dmHl0.png', b'http://i.stack.imgur.com/dmHl0.png', b'http://i.stack.imgur.com/tKsDb.png', b'http://i.stack.imgur.com/6QN0y.png', b'http://i.stack.imgur.com/tKsDb.png', b'http://i.stack.imgur.com/L8rHf.png', b'http://i.stack.imgur.com/tKsDb.png', b'http://pixel.quantserve.com/pixel/p-c1rF4kxgLUzNc.gif']
于 2013-10-20T13:09:18.513 に答える
1

を使用する代わりにurllib、私は使用しました。ここrequestsからダウンロードできます。彼らは同じことをします.APIが優れているので、私はもっと好きです. 正規表現文字列はわずかに変更されています。タグの前にいくつかの空白がある場合に備えて追加されます。あなた正しい方向に向かっていました。モジュールの詳細については、こちらをご覧ください。requests\simgre

ここにコードがあります

import requests
import re

website = requests.get('http://stackoverflow.com//')
html = website.text
pat = re.compile(r'<\s*img [^>]*src="([^"]+)')
img = pat.findall(html)

print img

そして出力:

[u'http://i.stack.imgur.com/tKsDb.png', u'http://i.stack.imgur.com/L8rHf.png', u'http://i.stack.imgur.com/tKsDb.png', u'http://i.stack.imgur.com/Ryr18.png', u'http://i.stack.imgur.com/ASf0H.png', u'http://i.stack.imgur.com/tKsDb.png', u'http://i.stack.imgur.com/tKsDb.png', u'http://i.stack.imgur.com/tKsDb.png', u'http://i.stack.imgur.com/Ryr18.png', u'http://i.stack.imgur.com/VgvXl.png', u'http://i.stack.imgur.com/tKsDb.png', u'http://i.stack.imgur.com/tKsDb.png', u'http://i.stack.imgur.com/tKsDb.png', u'http://i.stack.imgur.com/tKsDb.png', u'http://i.stack.imgur.com/6QN0y.png', u'http://pixel.quantserve.com/pixel/p-c1rF4kxgLUzNc.gif']
于 2013-10-20T12:56:40.287 に答える
0

re.compile (r'<img [^>]*src="([^"]+)')

パターンを囲む引用符 (一重または二重) がありません

于 2013-10-20T12:40:34.900 に答える