`
wooce
  • 浏览: 180684 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

用python的urllib抓取ASP.net的post的分页的问题和解决

 
阅读更多

友情帮朋友写一个小程序,需要自动抓取一个互联网网站的网页并进行分析。

选用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......

这一段, 有__VIEWSTATE 数据的呀。 再回去检查Firebug, 发现,原来虽然Firebug的Post -> ”参数“ 下面是没有__VIEWSTATE, 但是Firebug下方的Post -> "源代码” 那里则是有的: 

  ......&__EVENTTARGET=&__EVENTARGUMENT=&__LASTFOCUS=&__VIEWSTATE=H5AMBVqaLZCXd...

  于是在python程序里补上__VIEWSTATE这个参数的值, 经检验问题解决!!

   所以这个问题的起因是Firefox的firebug里的post参数没有显示__VIESTATE,  这个firebug插件的bug也许是因为__VIESTATE的值太长了?

 

 

 

1
0
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics