已阅读:6,105 次
Python httplib关于User-Agent导致的异常结果
ian | Python | 2012/01/31


在写爬虫抓取苏宁页面信息的过程中,遇到一个让人纠结的问题。最开始的代码如下:

domin = "www.suning.com"
subdomin = "/emall/prd____722554_.html"
conn = httplib.HTTPConnection(domin)
conn.request('GET',subdomin)
 
result = conn.getresponse().read()
print result

发现response状态为200,但是内容为空,这个问题很奇怪,一开始以为是代码出现异常,但是把域名换成其他网站的URL时,结果却是正常的。

于是,抓包看看HTTP请求是否正确,发现HTTP请求包也没有问题。

简单分析了一下,觉得最有可能的原因是,苏宁服务器端有对UserAgent做验证。

User Agent即用户代理,简称 UA,它是HTTP HEAD中一个特殊字符串头,使得服务器能够识别客户使用的操作系统及版本、CPU 类型、浏览器及版本、浏览器渲染引擎、浏览器语言、浏览器插件等。一些网站常常通过判断 UA 来给不同的操作系统、不同的浏览器发送不同的页面,因此可能造成某些页面无法在某个浏览器中正常显示,但通过伪装 UA 可以绕过检测。

于是修改代码,在请求包中加入UA参数。新的代码如下:

domin = "www.suning.com"
subdomin = "/emall/prd____722554_.html"
 
conn = httplib.HTTPConnection(domin)
conn.putrequest('GET',subdomin)
conn.putheader("User-Agent", "Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Trident/5.0)")
conn.putheader("Accept", "*/*")
conn.endheaders()
 
result = conn.getresponse().read()
print result

再次抓包测试一下,新的HTTP请求包如下:

运行程序,结果正常,整个页面的数据都被抓取下来了。

原创文章,转载请注明:转载自ian的个人博客[http://www.icodelogic.com]
本文链接地址: http://www.icodelogic.com/?p=469

tags:

1条评论

  1. Web Designer 说:

    Great, thanks for your share!
    @2012-04-12 15:08

发表评论

你需要先 登录 才能回复