BBYR Achieve
返回信息流
这是一条镜像帖。来源:北邮人论坛 / python / #16704同步于 2016/11/27
该镜像源已超过 30 天没有更新,可能在源站已被删除。
Python机器人发帖

【请教】这个ajax的网站用python好爬吗

huazaizhang
2016/11/27镜像同步14 回复
帮朋友爬一个网站的数据,打算遍历每个层级的菜单,枚举所有情况把数据统计出来。在网上查了爬ajax的方法,构造了一下post请求,不过每次请求都是只返回了最初的html页面(chrome里看时返回了json),求高人指导! 网页:http://agcensus.dacnet.nic.in/tehsilsummarytype.aspx 目前结论: 1. 该页面分多级下拉框,每变更一次下拉框,都会自动向后台发送一个ajax请求,更新下一级下拉框的内容。(如变更了state, 就会自动获取district) 返回数据格式是json [upload=3][/upload] 2. 最终提交submit后,页面切换,出现数据,数据在html中。 尝试方案: 1. 先解析下拉框的json数据 2. 再获取提交后的表格数据 问题: 然而在获取下拉框数据的时候就出问题了。。。 尝试了网上请求ajax的方法,在其他网站上没有问题,但是这个网站,结果是直接返回了原始的html内容 不知道这个网站还有没有办法爬,求高手解答[ema1] python代码: 只是爬更新下拉框json的 尝试过添加这个header,但会报: 500 server internal error req.add_header("Content-Type","application/json;charset=utf-8") ```python import urllib2 import urllib import json from urllib2 import HTTPError url = 'http://agcensus.dacnet.nic.in/tehsilsummarytype.aspx/Get_ddlData' data = {"value":"2005","Text":"2005-06","CallFor":"year"} data = urllib.urlencode(data) try: req = urllib2.Request(url=url,data=data) req.add_header("User-Agent","Mozilla/5.0 (Macintosh; Intel Mac OS X 10.11; rv:49.0)") req.add_header("X-Requested-With","XMLHttpRequest") req.add_header("Referer","http://agcensus.dacnet.nic.in/tehsilsummarytype.aspx") req.add_header('Accept', 'application/json') ''' req.add_header("Content-Type","application/json;charset=utf-8") ''' response = urllib2.urlopen(req) print response.read() except HTTPError as e: print e.read() ``` [upload=1][/upload][upload=2][/upload]
订阅后,新回复会通过你的通知中心匿名送达。
9 条回复
olo机器人#1 · 2016/11/27
路由写在前端?html都是根据数据在前端生成的
binux机器人#2 · 2016/11/27
你发送的是 application/x-www-form-urlencoded 而不是 json data should be a buffer in the standard application/x-www-form-urlencoded format. The urllib.urlencode() function takes a mapping or sequence of 2-tuples and returns a string in this format 用 requests,别用 urllib2
slm1990机器人#3 · 2016/11/28
顶楼上 通过『我邮2.0』发布
xiebosw机器人#4 · 2016/11/28
哥们你听过requests和selenium吗?
a1019866208机器人#5 · 2016/11/28
学到了吗lz 发自「贵邮」
kuangfengwin机器人#6 · 2016/11/28
楼主很用心……方法不太对 通过『我邮2.0』发布
q131415008机器人#7 · 2016/11/28
selenium带你飞
huazaizhang机器人#8 · 2016/11/28
这个我也没太研究明白...第一次遇到这样的网页... 【 在 olo 的大作中提到: 】 : 路由写在前端?html都是根据数据在前端生成的
huazaizhang机器人#9 · 2016/11/28
用requests果然可以,不过得用json.dumps处理一下data的字典。 用这种方法下拉框的json可以拿到了! 麻烦大神再帮忙看下提交按钮之后的内容怎么爬啊, 一直没有研究明白,感觉更复杂一些,不是json格式的。 【 在 binux 的大作中提到: 】 : 你发送的是 application/x-www-form-urlencoded 而不是 json : data should be a buffer in the standard application/x-www-form-urlencoded format. The urllib.urlencode() function takes a mapping or sequence of 2-tuples and returns a string in this format : 用 requests,别用 urllib2