我在网上抓取某个网站时遇到了一个有趣的现象。使用Python的urllib2(Python 2.7)时会出现这个问题。例如:
import urllib2
LINK = "http://www.sample.com/article/1"
HEADERS = {'User-Agent': 'Mozilla5.0/...'} # Ellipsis for brevity
req = urllib2.Request(link, data=None, headers=HEADERS)
resp = urllib2.urlopen(req, timeout=20).read()
以下是奇怪的结果:
1)当一个有效的用户代理被传递到请求头时,服务器将返回一个状态200和一个页面,说明在处理请求时出现问题(无效的html)。这意味着我能够从服务器获得一个成功的响应,其中包含损坏的数据。在
2)当传递无效的用户代理时(空头{}),服务器将超时。但是,如果超时设置为一个大值(在本例中为20秒),服务器将以缓慢的方式返回有效数据。在
当以前没有请求时,这个问题会出现在服务器上,因此我认为服务器可能期望从请求中获得某种cookie来提供有效的数据。有人知道为什么会这样吗?在
您不知道服务器端发生了什么。
你可以继续做实验,猜猜它在另一边是如何工作的。如果这是一个用户代理的问题-只要继续发送它(也许每隔一段时间更改一次)为您的所有请求,包括第一个。在
另外,我会在一个新的会话中打开chrome dev工具(匿名),并记录您正在执行的所有操作,这样您就可以看到真正的浏览器发出的请求的结构。在
相关问题 更多 >
编程相关推荐