所以我一直在努力学习如何使用python有效地从网站中提取数据。理想情况下,我希望以比我目前在网站www.transfermarkt.com上更有效的方式收集数据,这是一个足球网站,但出于某种原因,该网站的行为似乎与其他所有网站不同。我试过了。即使是下面的简单代码也只是让我基本上没有回应。任何人都可以解释为什么我不能获得本网站的HTML,但我可以与其他网站。
import urllib
htmlfile = urllib.urlopen("http://www.transfermarkt.com")
htmltext = htmlfile.read()
print (htmltext)
答案 0 :(得分:4)
您指定的网站已在http://www.transfermarkt.com/robots.txt中阻止机器人。因此,您必须使用用户代理作为浏览器进行访问。
所以基本上你的代码应该是
import urllib2
opener = urllib2.build_opener()
opener.addheaders = [('User-agent', 'Mozilla/5.0')]
response = opener.open("http://www.transfermarkt.com")
print (response.read())
答案 1 :(得分:1)
来自urllib#urlopen
文档:
一个警告:read()方法,如果省略size参数或 否定,直到数据流结束才可能读取;没有 确定来自套接字的整个流的好方法 在一般情况下阅读。
如果您检查了您尝试阅读的网站的响应标头,您会看到没有Content-Length
标头,这是因为传输已分块,您需要在获取之前阅读所有这些块内容。
data = htmlfile.read(512)
while data is not None:
htmltext += data
Aswin指出的事情。