3
回答
python模拟Ajax发送请求
终于搞明白,存储TCO原来是这样算的>>>   

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

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

举报
llwang
发帖于4年前 3回/4K+阅
共有3个答案 最后回答: 4年前

如果你在浏览器中打开页面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请求

--- 共有 1 条评论 ---
warmer如果ajax请求的是原来的页面A,没有表单,只有一个按钮,那么这个请求还可以怎么模拟 3年前 回复

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

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

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

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

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