友情帮朋友写一个小程序,需要自动抓取一个互联网网站的网页并进行分析。
选用python和其urllib,urllib2来搞这事情。 抓取第一页的数据很顺利,然而在抓取第2页等其他页的数据时却遇到了问题,虽然有返回数据,但返回的数据不是正常的第2页的页面,而是以下的出错提示:
53|error|500|Object reference not set to an instance of an object.|
在这问题上卡住了一两小时,用“Object reference not set to an instance of an object"做关键词去搜解决方案无果。后来看到有人提到:
”一般来讲 asp.net中的postback的分页都要提供 __EVENTTARGET、__EVENTARGUMENT、__VIEWSTATE这三个参数,前两个一般都是有规律的,后面这个就比较麻烦,每次的提交得到的都不同,所以要在每次提交分页前把当前页的__VIEWSTATE取到!“
然后有所启发,检查了一下我在程序里提交的post的参数,发现其中没有__VIEWSTATE,但是我提交的post的参数是在firefox里用firebug监控时copy过来的,按理不应有遗漏?!
再细查,在网页里是有
<inputtype="hidden" name="__VIEWSTATE" id="__VIEWSTATE" value="Bn/4+NZh/pRpuKJs+mDE6k9r3Lc1DIxEU7bhPlEDi5Gn3oW......
......&__EVENTTARGET=&__EVENTARGUMENT
=&__LASTFOCUS=&__VIEWSTATE=H5AMBVqaLZCXd...
于是在python程序里补上__VIEWSTATE这个参数的值, 经检验问题解决!!
所以这个问题的起因是Firefox的firebug里的post参数没有显示__VIESTATE, 这个firebug插件的bug也许是因为__VIESTATE的值太长了?
相关推荐
Python urllib urllib2 urllib模块安装说明
python urllib3 安装文件包
python urllib3 requests
Python urllib urllib2 urllib模块
python urllib 使用PPT python urllib使用PPT
本文实例讲述了python使用urllib2提交http post请求的方法。分享给大家供大家参考。具体实现方法如下: #!/usr/bin/python #coding=utf-8 import urllib import urllib2 def post(url, data): req = urllib2....
urllib3 is a python lib 1.线程安全 2.连接池 3.客户端SSL/TLS验证 4.文件分部编码上传 5.协助处理重复请求和HTTP重定位 6.支持压缩编码 7.支持HTTP和SOCKS代理
python 2.7 urllib2的详细使用教程
此资源是一个基于Python的爬虫脚本,利用urllib库抓取指定贴吧的指定页数据,并将抓取到的内容保存到本地文件中。该脚本可以帮助用户快速获取贴吧中的帖子标题、内容、发布时间等信息,并可以用于数据分析、内容提取...
Python3中将python2.7的urllib和urllib2两个包合并成了⼀个urllib库,其主要包括⼀下模块: urllib.request 请求模块 urllib.error 异常处理模块 urllib.parse url解析模块 urllib.robotparser robots.txt解析模块 ...
python urllib2详解及实例 Python开发技术文章_教程 - 红黑联盟.pdf
pythonurllib模块【下载图片】共9页.pdf.zip
python urllib2模块实例简介.docx
pythonurllib2模块实例简介.pdf
主要介绍了Python urllib、urllib2、httplib抓取网页代码实例,本文直接给出demo代码,代码中包含详细注释,需要的朋友可以参考下