开发者社区> 问答> 正文

python模拟Ajax发送请求? 400 报错

python模拟Ajax发送请求? 400 报错

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

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

展开
收起
爱吃鱼的程序员 2020-05-30 16:58:54 648 0
1 条回答
写回答
取消 提交回答
  • https://developer.aliyun.com/profile/5yerqm5bn5yqg?spm=a2c6h.12873639.0.0.6eae304abcjaIB

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

    ######如果ajax请求的是原来的页面A,没有表单,只有一个按钮,那么这个请求还可以怎么模拟######

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

    ######

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

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

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

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

    ######这个数据有可能是之前的某个ajax获取到的 或者是js加密生成的,js加密生产的话 得去分析js 这个比较麻烦 需要耐心,不过也有捷径 可以调用真实的浏览器来获取,比如selenium,phantomjs
    2020-05-30 16:58:55
    赞同 展开评论 打赏
问答排行榜
最热
最新

相关电子书

更多
From Python Scikit-Learn to Sc 立即下载
Data Pre-Processing in Python: 立即下载
双剑合璧-Python和大数据计算平台的结合 立即下载