我试图检索以下网址:http://www.winkworth.co.uk/sale/property/flat-for-sale-in-masefield-court-london-n5/HIH140004。
import urllib2
response = urllib2.urlopen('http://www.winkworth.co.uk/rent/property/terraced-house-to-rent-in-mill-road--/WOT140129')
response.read()
但是我得到一个空字符串。当我通过浏览器或使用cURL进行尝试时,它可以正常工作。有什么想法会发生什么?
答案 0 :(得分:10)
我在使用requests
库时收到了回复,但在使用urllib2
时未收到回复,因此我尝试了HTTP请求标头。
事实证明,服务器需要Accept
标头; urllib2
无法发送requests
和cURL发送*/*
。
也可以使用urllib2
发送一个:
url = 'http://www.winkworth.co.uk/sale/property/flat-for-sale-in-masefield-court-london-n5/HIH140004'
req = urllib2.Request(url, headers={'accept': '*/*'})
response = urllib2.urlopen(req)
演示:
>>> import urllib2
>>> url = 'http://www.winkworth.co.uk/sale/property/flat-for-sale-in-masefield-court-london-n5/HIH140004'
>>> len(urllib2.urlopen(url).read())
0
>>> request = urllib2.Request(url, headers={'accept': '*/*'})
>>> len(urllib2.urlopen(request).read())
37197
这里服务器有问题; RFC 2616州:
如果不存在Accept头字段,则假定为 客户接受所有媒体类型。