0

当我使用 Urllib 模块时,我可以第一次调用/打印/搜索网站的 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流,因此当您第二次调用它时,没有什么可读取的。

尝试:

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

除了您只能读取一次流的@rvalik 的正确猜测之外,这data = str(html.read())是不正确的。 urlopen返回一个bytes对象并str返回该对象的显示表示。一个例子:

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

您应该做的是bytes使用 HTML 页面的编码(在本例中为 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 回答