【发布时间】:2012-09-21 14:51:33
【问题描述】:
我正在编写一个爬虫来使用urllib 下载静态html 页面。
get_page 函数工作 1 个周期,但是当我尝试循环它时,它不会将内容打开到我输入的下一个 url。
-
如何让
urllib.urlopen不断下载HTML页面? - 如果不行,有没有其他的建议下载 我的 python 代码中的网页?
我下面的代码只返回 seed 列表中第一个网站的 html:
import urllib
def get_page(url):
return urllib.urlopen(url).read().decode('utf8')
seed = ['http://www.pmo.gov.sg/content/pmosite/home.html',
'http://www.pmo.gov.sg/content/pmosite/aboutpmo.html']
for j in seed:
print "here"
print get_page(j)
urllib2 也会出现同样的抓取“一次性”问题:
import urllib2
def get_page(url):
req = urllib2.Request(url)
response = urllib2.urlopen(req)
return response.read().decode('utf8')
seed = ['http://www.pmo.gov.sg/content/pmosite/home.html',
'http://www.pmo.gov.sg/content/pmosite/aboutpmo.html']
for j in seed:
print "here"
print get_page(j)
没有例外,我在 urllib 中遇到 IOError:
Traceback (most recent call last):
File "/home/alvas/workspace/SingCorp/sgcrawl.py", line 91, in <module>
print get_page(j)
File "/home/alvas/workspace/SingCorp/sgcrawl.py", line 4, in get_page
return urllib.urlopen(url).read().decode('utf8')
File "/usr/lib/python2.7/urllib.py", line 86, in urlopen
return opener.open(url)
File "/usr/lib/python2.7/urllib.py", line 207, in open
return getattr(self, name)(url)
File "/usr/lib/python2.7/urllib.py", line 462, in open_file
return self.open_local_file(url)
File "/usr/lib/python2.7/urllib.py", line 476, in open_local_file
raise IOError(e.errno, e.strerror, e.filename)
IOError: [Errno 2] No such file or directory: 'http://www.pmo.gov.sg/content/pmosite/aboutpmo.html'
没有例外,我得到一个带有 urllib2 的 ValueError:
Traceback (most recent call last):
File "/home/alvas/workspace/SingCorp/sgcrawl.py", line 95, in <module>
print get_page(j)
File "/home/alvas/workspace/SingCorp/sgcrawl.py", line 7, in get_page
response = urllib2.urlopen(req)
File "/usr/lib/python2.7/urllib2.py", line 126, in urlopen
return _opener.open(url, data, timeout)
File "/usr/lib/python2.7/urllib2.py", line 392, in open
protocol = req.get_type()
File "/usr/lib/python2.7/urllib2.py", line 254, in get_type
raise ValueError, "unknown url type: %s" % self.__original
ValueError: unknown url type: http://www.pmo.gov.sg/content/pmosite/aboutpmo.html
回答:
发生 IOError 和 ValueError 是因为存在某种 Unicode 字节顺序标记 (BOM)。在第二个 URL 中发现了一个不间断空格。感谢您为解决问题提供的所有帮助和建议!
【问题讨论】:
-
您是否手动检查过这些网站确实不同?
-
有一点需要注意,你的导入应该在文件的顶部,而不是在 try except 块中。
-
尝试在异常处理程序中打印一些东西,看看是否有异常。
-
@antti,我尝试在异常处打印一张便条。 urllib.open 在第一次之后就无法正常工作,这就是它遇到
except的原因。 @hayden,文件顶部的导入很昂贵。尤其是在爬行方面。 -
这不是一个解决方案,但由于 Python 多年来的发展方式,您应该使用
urllib2.urlopen... 如果您不介意第 3 方模块,则使用 @987654331 @强烈推荐
标签: python web-crawler urllib2 urllib