今天终于把爬虫的Ajax请求搞懂了
今天终于把爬虫的Ajax请求搞懂了
文章目录
- 今天终于把爬虫的Ajax请求搞懂了
- 一、案例分析及存在的问题
- 二、问题的解决
- Ajax简介
- 问题解决
- 三、总结
- 1、Ajax
- 2、XMLHttpRequest
- 3、解决问题
一、案例分析及存在的问题
首先,我们是想要爬取http://www.fintechdb.cn/这个网站中的各个不同省份的一些数据,但是如果像普通的请求方式那样:(注意是不同省份的数据)
直接撸出代码来:
import requests
url = 'http://www.fintechdb.cn/request/loadmore'
headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.77 Safari/537.36 Edg/91.0.864.41',# 'X-Requested-With': 'XMLHttpRequest'
}
data = {'csrf_weiyangx_token': 'a8c2eafab6bd8f2041b6c2e0c8a3811b','city': '台湾省,四川省','financing': '0','field': '0','timestart': '0','timeend': '0','offset': '0','sort': '1','order': 'desc'
}
res = requests.post(url=url, data=data, headers=headers)
print(res.status_code)
print(res)
print(res.content.decode())
好了,敲完代码,自己还以为万事大吉了,谁知道右击然后,点击运行:
结果一看,傻眼了;
我说:诶,真是奇怪了,我的请求不都是返回来了状态码 200 嘛?怎么给我一个Wrong啊?是不是他故意返回一个 200 ,让我以为请求成功了啊?
带着这些疑问,我打开了网页,点进去了我的那个网址,发现;
啊,原来网页本身的内容就是Wrong啊,看来是请求正确的啦。
那么,问题又来了,那那些请求的数据又是放在了哪里了呢?
明明是可以看到的啊
真的是邪门了啊???
二、问题的解决
后来,我查阅各种资料。。。。。。
最后发现,原来原因在于这个网站是用Ajax来写的,
Ajax简介
AJAX 是一种在无需重新加载整个网页的情况下,能够更新部分网页的技术。
AJAX 不是新的编程语言,而是一种使用现有标准的新方法。
AJAX 是一种用于创建快速动态网页的技术。
总之一句话:
Ajax就是不需要重新加载页面就可以使得网页的一部分内容进行一定的更新,而 XMLHttpRequest 对象是实现Ajax的基础环节, XMLHttpRequest 对象对象是实现浏览器(Html)与数据进行交互的。
下面回到原本的 额问题
问题解决
我们重新进行一下网页的捕获,发现,诶,果然有一个 XMLHttpRequest 对象对象这个请求的头的参数
那好办,我们直接就把这个请求的参数也带进请求头里面去就好了,对不对?
代码如下:
import requests
url = 'http://www.fintechdb.cn/request/loadmore'
headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.77 Safari/537.36 Edg/91.0.864.41','X-Requested-With': 'XMLHttpRequest'
}
data = {'csrf_weiyangx_token': 'a8c2eafab6bd8f2041b6c2e0c8a3811b','city': '台湾省,四川省','financing': '0','field': '0','timestart': '0','timeend': '0','offset': '0','sort': '1','order': 'desc'
}
res = requests.post(url=url, data=data, headers=headers)
print(res.status_code)
print(res)
print(res.content.decode())
(这里其实就是比上一个代码多了一个请求头参数:
‘X-Requested-With’: ‘XMLHttpRequest’
然后就ok啦~)
果然,如我所愿,最终还是得到了我那梦寐以求的数据(^ _ ^)啦~:
反正呢,至少现在不是什么Wrong了啦。
然后你现在想要那个省份的就直接修改一下post请求就可以实现了啦,后面不用多说大家也都懂的。
三、总结
1、Ajax
Ajax前面结束过了,就是实现异步的js和xml的,Ajax的英文全程为:
Asynchronous JavaScript and XML
翻译一下;
AJAX = 异步 JavaScript 和 XML
就是说把网页的呈现和数据的存储分开来进行,js专门负责实行页面的呈现、调用其他的资源等功能,而xml呢,自己搞自己的数据存储以及传输 去吧,二者是异步的,就是说,他们之间是独立进行的额,彼此互不干扰,互不相干。
最后再说一遍:
Ajax请求:
AJAX 是一种在无需重新加载整个网页的情况下,能够更新部分网页的技术。
2、XMLHttpRequest
为了实现Ajax这种技术,我们必须要有一定的基础的其他技术来作为支撑,所以就有了XMLHttpRequest对象的存在。XMLHttpRequest是为了实现异步的存储与传输等功能,当然,我们也可以通过一个网页的请求头是否有XMLHttpRequest来判断,这个网页是不是使用了Ajax技术呢。
3、解决问题
如果我们发现了这个网页使用Ajax来实现的话,那么,我们直接在请求头(headers)里面加入一个XMLHttpRequest的请求参数即就可以啦。
最后,感谢大家的阅读,希望对大家有一定的帮助了啦。
今天终于把爬虫的Ajax请求搞懂了相关推荐
- python爬虫今日头条_python爬虫—分析Ajax请求对json文件爬取今日头条街拍美图
python爬虫-分析Ajax请求对json文件爬取今日头条街拍美图 前言 本次抓取目标是今日头条的街拍美图,爬取完成之后,将每组图片下载到本地并保存到不同文件夹下.下面通过抓取今日头条街拍美图讲解一 ...
- 终于把Linux中的access搞懂了 (内附C语言测试代码)
#include <unistd.h> int access(const char* pathname,int mode); 参数: pathname 是文件的路径名+文件名 mode:指 ...
- 肝了一早上,终于把mybatis的一级缓存和二级缓存原理搞懂了~
今天的沉淀,是助力明天飞向远方的基石~ 每当自己沉思下来写学习文章的时候,内心深处总是会得到一片宁静. 缓存的概念 我们在查询数据时,经常去查询一些条件相同.数据的正确与否对最终结果影响不大的数据,并 ...
- python爬虫爬取使用Ajax请求的网站数据解析——以梅老板微博为例(m.weibo.cn)
文章目录 前言 什么是Ajax Ajax基本原理 发送请求 解析内容 渲染网页 Ajax分析方法 查看请求 过滤请求 Ajax结果提取 1.分析请求(since_id解析) 2.分析响应 3.爬取微博 ...
- Selenium爬虫实践:ajax请求抓包、浏览器退出
Selenium爬虫实践:ajax请求抓包.浏览器退出 2022-04-07 16:00·软件测试木木 前言 最近在搞公司内部系统,累的一批,需要从另一个内部系统导出数据存到数据库做分析,有大量的数据 ...
- Python爬虫实战02:分析Ajax请求并抓取今日头条街拍
1 目标网站分析 首先我们打开今日头条网站,搜索 街拍,点击图集,这里每就是我们要爬取的目录,我们称为索引页.1 点开一个标题,进去,称为详情页.2这里面的图是我们所要爬取的.比如这里可以点击图片,共 ...
- python爬虫基础Ⅱ——Ajax数据爬取、带参请求:QQ音乐歌单、QQ音乐评论
文章目录 基础爬虫部分Ⅱ Ajax技术 json 1. Network 2. XHR怎么请求? 3. 什么是json? 4. json数据如何解析? 带参数请求 1. 复习 2. params 3. ...
- python爬虫之 爬取案例网页ajax请求的数据
本篇案例以这个网站为例, 阿里云智能logo设计,用requests抓取这个网站页面的时候是抓取不到生成的logo图片的,因为数据不是直接就存储在html页面里的,ajax请求在不重新加载整个页面的情 ...
- Python爬虫学习之API与模拟ajax请求
API的使用 --通过API向服务器请求数据 优点:简单直接,高效率地批量爬取:解决动态网页的爬取. 缺点:通过API的缺点是有些网站会限制API调用的次数和频率,用户需要付费来升级成高级用户来获取更 ...
- Python高级特性与网络爬虫(一):使用Ajax请求爬取用户微博内容和python多进程爬取用户图片
最近阅读了崔庆才写的<Python3网络爬虫开发实战>,系统地学习一下利用Python写网络爬虫.由于这本书出版时间是2018年,很多书中案例涉及的网站已经改版,基本上每个案例都需要自己再 ...
最新文章
- AndroidManifest 配置Activity 一直提示找不到,
- ios开发国外视频教程(有翻译)
- TP查询搜索函数的find select get value
- 双向带环带头结点的链表实现栈
- 前端进阶之防抖与节流是什么?
- [导入]《交互设计之路——让高科技产品回归人性》读书笔记(九)
- Linux /boot分区空间不足
- qt deleterLater
- 微信开发者平台学习笔记
- CPU、GPU、TPU、NPU等到底是什么?
- mov和mp4格式哪个好_Mac版dvd格式转换器哪个好用?Mac上最好用的dvd格式转换器推荐...
- 自用机器学习笔记(1):什么是概率以及似然
- 服务器加根网线用不用修改路由器,Tenda腾达路由器ads拨号上网设置教程
- 计算机图形学基础知识-光照材质
- PC版微信发送无损视频除了使用压缩还有另外的方法
- OpenStack云计算平台部署 单节点
- 敏捷 Scrum 大师班认证培训的终极方案 | The Ultimate Agile Scrum Master Certification Training
- 电脑无法打开计算机的策略对象,win10系统提示“无法打开此计算机上的组策略对象”的解决方法...
- 计算机cap怎么学,6大学计算机大学计算机CAP.pdf
- DDR3和DDR2和DDR的工作原理及技术区别
热门文章
- Python.json.常见两个错误处理(Expecting , delimiter)(Invalid control character at)
- 《月满西楼》——李清照
- Easy Login...So Easy...(base64编码/修改Cookie/社工)-学习笔记
- 我对职业规划和未来发展的一些思考
- CF1428F-Fruit Sequences
- inline-block元素高度为0,父级仍被撑起,问题元凶—strut
- [Pandas] pd 报错TypeError: Can only append a dict if ignore_index=True
- Sky Blue And Black
- android ipv6测试,搭建IPv6本地环境测试App
- c编程语言real,20 种最奇怪的编程语言