python模拟Ajax发送请求

llwang 发布于 2014/04/22 16:00
阅读 4K+
收藏 0

@西门飞 你好,想跟你请教个问题:

这是我刚刚抓到数据,我标记的这条,它的content里就是我想要的数据,请问这是Ajax请求得到的吗?我不会分析。如果是,那能否讲解一下或者有Python模拟Ajax请求的实例可以推荐给我参考一下,网上都没找到。谢谢了。

加载中
0
西门飞
西门飞

如果你在浏览器中打开页面A ,如果抓包的时候看到有http请求其他的url(text/html) ,很可能就是ajax请求,一般用来获取动态数据,在页面中显示。发出ajax请求的时候 http请求头部一般有这个字段:X-Requested-With:XMLHttpRequest ,不过不一定都有的哦!所谓python模拟ajax请求,实际上就是用python发起http请求,发送这个http请求所需要的数据可以通过抓包获取,构造一个一样的数据发送过去。Ajax的的全称是异步javascript and  XML,说的是用javascript调用浏览器后台线程来进行http请求,这样做的好处是不会阻塞浏览器主线程,主要表现就是用户可以继续操作页面,比如鼠标复制页面中的文字等。总之不要纠结Ajax, 它其实就是在浏览器后台线程进行http请求而已。

===========================

回到python上, 假如浏览器打开页面A的时候,Ajax请求B页面,并把请求到的数据放到A页面上显示,那么在python中你可以构造两个这样的http请求:

1、先请求A

2、按照之前抓包的看到的数据,构造http请求(一般来说无法就是POST 或者GET),可以选择 urllib2 库 来进行http请求

w
warmer
如果ajax请求的是原来的页面A,没有表单,只有一个按钮,那么这个请求还可以怎么模拟
0
賤__是一種態度
賤__是一種態度

可以直接post数据吧.可以参考http://www.oschina.net/code/snippet_4362_9802

0
llwang
llwang

@西门飞 ,感谢你的耐心解答,根据你的解答,我解决了我的问题。但是又出现了一个新的问题:

我还想要抓取个人资料,用查看元素的方法发现想要的数据是 XHR产生的:

如果用之前的urllib2.Request()发送请求,就会报错 HTTPError: HTTP Error 405: /profile.do

我想问这个XHR动态产生的数据要怎么得到呢?

西门飞
西门飞
这个数据有可能是之前的某个ajax获取到的 或者是js加密生成的,js加密生产的话 得去分析js 这个比较麻烦 需要耐心,不过也有捷径 可以调用真实的浏览器来获取,比如selenium,phantomjs
返回顶部
顶部