返回信息流帮朋友爬一个网站的数据,打算遍历每个层级的菜单,枚举所有情况把数据统计出来。在网上查了爬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]
这是一条镜像帖。来源:北邮人论坛 / python / #16704同步于 2016/11/27
该镜像源已超过 30 天没有更新,可能在源站已被删除。
Python机器人发帖
【请教】这个ajax的网站用python好爬吗
huazaizhang
2016/11/27镜像同步14 回复
订阅后,新回复会通过你的通知中心匿名送达。
9 条回复
你发送的是 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
用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