0

Urllib モジュールを使用すると、最初は Web サイトの html を呼び出し/印刷/検索できますが、再試行すると消えてしまいます。プログラム全体でhtmlを保持するにはどうすればよいですか。

たとえば、私がしようとすると:


html = urllib.request.urlopen('http://www.bing.com/search?q=Mike&go=&qs=n&form=QBLH&filt=all&pq=mike&sc=8-2&sp=-1&sk=')
search = re.findall(r'Mike',str(html.read()))

search

私は得る:

['マイク','マイク','マイク','マイク']


しかし、私がこれをもう一度やろうとすると、次のようになります。

results = re.findall(r'Mike',str(html.read()))

私は得る:

[]

「結果」を呼び出すとき。

これはなぜですか?また、どうすればそれを停止/修正できますか?

4

2 に答える 2

2

Pythonに精通していなくてもhtml.read()、httpストリームを読み取ると推測しているため、2回目に呼び出すと、読み取るものは何もありません。

試す:

html = urllib.request.urlopen('http://www.bing.com/search?q=Mike&go=&qs=n&form=QBLH&filt=all&pq=mike&sc=8-2&sp=-1&sk=')
data = str(html.read())
search = re.findall(r'Mike',data)
search

そして、使用します

results = re.findall(r'Mike',data)
于 2013-04-19T15:02:01.843 に答える
1

ストリームを 1 回しか読み取れないという @rvalik の正しい推測に加えて、これdata = str(html.read())は正しくありません。 オブジェクトをurlopen返し、そのオブジェクトの表示表現を返します。例:bytesstr

>>> data = b'Mike'
>>> str(data)
"b'Mike'"

bytesHTML ページのエンコーディング (この場合は UTF-8) を使用してオブジェクトをデコードする必要があります。

from urllib.request import urlopen
import re

with urlopen('http://www.bing.com/search?q=Mike&go=&qs=n&form=QBLH&filt=all&pq=mike&sc=8-2&sp=-1&sk=') as html:
    data = html.read().decode('utf8')

print(re.findall(r'Mike',data))

またはバイトオブジェクトで検索します:

from urllib.request import urlopen
import re

with urlopen('http://www.bing.com/search?q=Mike&go=&qs=n&form=QBLH&filt=all&pq=mike&sc=8-2&sp=-1&sk=') as html:
    data = html.read()

print(re.findall(rb'Mike',data))
于 2013-04-19T15:51:19.367 に答える