ajax抓取网页内容(今天终于把爬虫的Ajax请求搞懂了文章分析及存在的问题)
优采云 发布时间: 2022-04-01 01:05ajax抓取网页内容(今天终于把爬虫的Ajax请求搞懂了文章分析及存在的问题)
今天终于明白爬虫的ajax请求了
文章目录
一、案例分析及存在问题
首先我们要在这个网站中爬取一些不同省份的数据,但是如果像普通的请求方式:(注意是不同省份的数据)
只需拉出代码:
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吗?如何给我一个错误?他是否故意返回 200 让我认为请求成功?
带着这些疑问,我打开网页,点进我的网站,发现;
啊,原来网页本身的内容是错误的,看来请求是正确的。
那么,问题又来了,请求的数据在哪里?
显然你可以看到它
真的很邪恶吗?? ?
二、问题解决
后来查了各种资料。. . . . .
终于发现原来的原因是这个网站是用Ajax写的,
阿贾克斯简介
AJAX 是一种无需重新加载整个网页即可更新部分网页的技术。
AJAX 不是一种新的编程语言,而是一种使用现有标准的新方法。
AJAX 是一种用于创建快速和动态网页的技术。
一句话:
Ajax 是指无需重新加载页面即可更新部分网页,而 XMLHttpRequest 对象是实现 Ajax 的基础环节,而 XMLHttpRequest 对象是实现浏览器(Html)与数据的交互。
回到原来的问题
问题解决了
我们重新抓取网页,发现,哎,确实有一个XMLHttpRequest对象对象,就是这个请求的header的参数
这个好办,我们只要把这个请求的参数放到请求头里就行了,对吧?
代码显示如下:
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'
然后就好啦~)
果然如我所愿,终于得到了我梦寐以求的数据(^_^)~:
不管怎样,至少现在没有错。
那你现在想要那个省就可以直接修改post请求,后面就不多说了,大家就明白了。
三、总结1、Ajax
Ajax之前已经结束了,就是实现js和xml的异步,英文Ajax的整个流程是:
异步 JavaScript 和 XML
翻译;
AJAX = 异步 JavaScript 和 XML
也就是说,网页的呈现和数据的存储是分开进行的。JS专门负责页面的呈现,调用其他资源等功能,而对于xml,可以自己做数据的存储和传输。两者是异步的。也就是说,它们是独立进行的,互不干扰,互不相干。
最后一次:
阿贾克斯请求:
AJAX 是一种无需重新加载整个网页即可更新部分网页的技术。