此贴内容已移至:
【总结】静态网页抓取,动态网页抓取,模拟登陆的注意事项和心得
如果不加User-Agent,则有些网址的访问,会被禁止的
此点,之前别人很多人已总结。
此处,还是再啰嗦一遍。
比如,直接通过浏览器访问,csdn的某个图片地址:
http://my.csdn.net/uploads/201205/03/1336005998_9131.png
是可以的。
那是因为浏览器访问时,(用IE9的F12可以抓取到)已添加对应的User-Agent:
User-Agent Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Win64; x64; Trident/5.0)
而当用程序去模拟访问时,直接用Python代码,比如:
resp = urllib2.urlopen(fileUrl, timeout=gConst['defaultTimeout']);
是会出错的:
HTTP Error 403: Forbidden |
而加上对应的User-Agent后,即可:
gConst = { 'UserAgent' : 'Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.1; WOW64; Trident/5.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; InfoPath.3; .NET4.0C; .NET4.0E)', 'defaultTimeout': 20, # default timeout seconds for urllib2.urlopen } request = urllib2.Request(fileUrl, headers={'User-Agent' : gConst['UserAgent']}); resp = urllib2.urlopen(request, timeout=gConst['defaultTimeout']);
如果得不到对应的Cookie,则去看看是否是由于自动跳转导致的
如果程序中得不到cookie(因此无法模拟登陆)可以看看是否是 内部自动跳转 auto redirect 而导致 无法获得cookie
在模拟登陆的时候,常常会遇到,虽然代码已经正常模拟执行某个http的请求了。
但是返回的结果中,却没有得到对应的cookie(以及返回的html值也不对,是之后的某个网页的内容)
此时,就可以去看看,分析出来的该http请求过程中,是不是带了自动跳转
如果是,用程序模拟时,禁止自动跳转,一般即可得到所期望的cookie,以及返回的html。
例子:
转载请注明:在路上 » 【总结】网络抓取和模拟登陆相关的经验和注意事项