爬虫进阶,前后端分离有什么了不起,过程超详细二、分析后续请求三、使用postman测试猜想

原标题:爬虫进阶 , 前后端分离有什么了不起 , 过程超详细
来源:麦叔编程
作者:麦叔

爬虫进阶,前后端分离有什么了不起,过程超详细二、分析后续请求三、使用postman测试猜想
文章图片
这是一个详细的爬虫进阶教程 , 里面包含了很详细的思考和试错过程 , 如果你对学爬虫是认真的 , 建议认真看 。
我们要抓取这个网站上的所有图书列表:
一、探索研究创建一个新的python文件 , 写入如下代码:importrequests
url='https://www.epubit.com/books'
res=requests.get(url)
print(res.text)
运行发现打印结果如下:

爬虫进阶,前后端分离有什么了不起,过程超详细二、分析后续请求三、使用postman测试猜想
文章图片
这里面根本没有图书的信息 。 但使用浏览器检查器可以看到图书的信息:

爬虫进阶,前后端分离有什么了不起,过程超详细二、分析后续请求三、使用postman测试猜想
文章图片
我们碰到了一个基于前后端分离的网站 , 或者说一个用JavaScript获取数据的网站 。 这种网站的数据流程是这样的:
初次请求只返回了网页的基本框架 , 并没有数据 。 就是前面截图看到那样 。 但网页的基本框架中包含JavaScript的代码 , 这段代码会再发起一次或者多次请求获取数据 。 我们称为后续请求 。为了抓取这样的网站 , 有两个办法:
分析出后续请求的地址和参数 , 写代码发起同样的后续请求 。 使用模拟浏览器技术 , 比如selenium 。 这种技术可以自动发起后续请求获取数据 。 二、分析后续请求打开谷歌浏览器的检查器 , 按图中的指示操作:

爬虫进阶,前后端分离有什么了不起,过程超详细二、分析后续请求三、使用postman测试猜想
文章图片
1.点击Network , 这里可以查看浏览器发送的所有网络请求 。
2.选XHR , 查看浏览器用JavaScript发送的请求 。
3.下面可以看到很多请求 。 我们要一个个看过去找到包含商品列表的请求 。
再来理解一下浏览器打开一个网页的过程 , 一般并不是一个请求返回了所有的内容 , 而是包含多个步骤:
第一个请求获得HTML文件 , 里面可能包含文字 , 数据 , 图片的地址 , 样式表地址等 。 HTML文件中并没有直接包含图片 。 浏览器根据HTML中的链接 , 再次发送请求 , 读取图片 , 样式表 , 基于JavaScript的数据等 。所以我们看到有这么不同类型的请求:XHR,JS , CSS , Img , Font,Doc等 。
我们爬取的网站发送了很多个XHR请求 , 分别用来请求图书列表 , 网页的菜单 , 广告信息 , 页脚信息等 。 我们要从这些请求中找出图书的请求 。
具体操作步骤如图:

爬虫进阶,前后端分离有什么了不起,过程超详细二、分析后续请求三、使用postman测试猜想
文章图片
1.在左边选中请求
2.在右边选择Response
3.下面可以看到这个请求返回的数据 , 从数据可以判断是否包含图书信息 。
Javascript请求返回的格式通常是JSON格式 , 这是一种JavaScript的数据格式 , 里面包含用冒号隔开的一对对数据 , 比较容易看懂 。 JSON很像Python中的字典 。在众多的请求中 , 可以根据请求的名字大致判断 , 提高效率 。 比如上图中getUBookList看起来就像是获取图书列表 。 点开查看 , 返回的果然是图书列表 。
请记住这个链接的地址和格式 , 后面要用到:

爬虫进阶,前后端分离有什么了不起,过程超详细二、分析后续请求三、使用postman测试猜想
文章图片
https://www.epubit.com/pubcloud/content/front/portal/getUbookList?page=1&row=20&=&startPrice=&endPrice=&tagId=分析一下 , 可以看到:
网址是:https://www.epubit.com/pubcloud/content/front/portal/getUbookListpage=1表示第1页 , 我们可以依次传入2 , 3 , 4等等 。 row=20表示每一页有20本书startPrice和endPrice表示价格条件 , 他们的值都是空 , 表示不设定价格限制 。 三、使用postman测试猜想为了验证这个设想打开谷歌浏览器 , 在地址栏中输入以下网址:
https://www.epubit.com/pubcloud/content/front/portal/getUbookList?page=1&row=20&=&startPrice=&endPrice=&tagId=
可是得到了如下的返回结果:
{
"code":"-7",
"data":null,
"msg":"系统临时开小差 , 请稍后再试~",
"success":false
}
这并不是系统出了问题 , 而是系统检测到我们是非正常的请求 , 拒绝给我们返回数据 。
这说明除了发送这个URL , 还需要给服务器传送额外的信息 , 这些信息叫做Header , 翻译成中文是请求头的意思 。
在下图中可以看到正常的请求中包含了多个请求头:

爬虫进阶,前后端分离有什么了不起,过程超详细二、分析后续请求三、使用postman测试猜想
文章图片
1.选中要查看的请求