Python 爬虫进阶 - 前后端分离有什么了不起,过程超详细!

本文详细介绍了如何抓取一个前后端分离网站上的图书列表。通过探索研究、分析后续请求、使用Postman测试猜想、编写抓取程序,最终解析JSON数据,成功获取书籍的名称、作者、编号和价格。文章强调了解析JavaScript动态加载数据的重要性,以及在抓取过程中避免被网站封锁的策略。
摘要由CSDN通过智能技术生成

我们要抓取下面这个网站上的所有图书列表:

https://www.epubit.com/books
在这里插入图片描述

1) 探索研究

创建一个新的python文件,写入如下代码:

import requests
url = 'https://www.epubit.com/books'
res = requests.get(url)
print(res.text)

运行发现打印结果如下:
在这里插入图片描述
这里面根本没有图书的信息。但使用浏览器检查器可以看到图书的信息:
在这里插入图片描述
我们碰到了一个基于前后端分离的网站,或者说一个用JavaScript获取数据的网站。这种网站的数据流程是这样的:

  • 初次请求只返回了网页的基本框架,并没有数据。就是前面截图看到那样。
  • 但网页的基本框架中包含JavaScript的代码,这段代码会再发起一次或者多次请求获取数据。我们称为后续请求。

为了抓取这样的网站,有两个办法:

  • 分析出后续请求的地址和参数,写代码发起同样的后续请求。
  • 使用模拟浏览器技术,比如selenium。这种技术可以自动发起后续请求获取数据。

很多人学习python,不知道从何学起。
很多人学习python,掌握了基本语法过后,不知道在哪里寻找案例上手。
很多已经做案例的人,却不知道如何去学习更加高深的知识。
那么针对这三类人,我给大家提供一个好的学习平台,免费领取视频教程,电子书籍,以及课程的源代码!
QQ群:810735403

2) 分析后续请求

打开谷歌浏览器的检查器,按图中的指示操作:
在这里插入图片描述

  1. 点击Network,这里可以查看浏览器发送的所有网络请求。
  2. 选XHR,查看浏览器用JavaScript发送的请求。
  3. 下面可以看到很多请求。我们要一个个看过去找到包含商品列表的请求。

再来理解一下浏览器打开一个网页的过程,一般并不是一个请求返回了所有的内容,而是包含多个步骤:

  1. 第一个请求获得HTML文件,里面可能包含文字,数据,图片的地址,样式表地址等。HTML文件中并没有直接包含图片。
  2. 浏览器根据HTML中的链接,再次发送请求,读取图片,样式表,基于JavaScript的数据等。

所以我们看到有这么不同类型的请求:XHR, JS,CSS,Img,Font, Doc等。

我们爬取的网站发送了很多个XHR请求,分别用来请求图书列表,网页的菜单,广告信息,页脚信息等。我们要从这些请求中找出图书的请求。

具体操作步骤如图:
在这里插入图片描述

  1. 在左边选中请求
  2. 在右边选择Response
  3. 下面可以看到这个请求返回的数据,从数据可以判断是否包含图书信息。

Javascript请求返回的格式通常是JSON格式,这是一种JavaScript的数据格式,里面包含用冒号隔开的一对对数据,比较容易看懂。JSON很像Python中的字典。

在众多的请求中,可以根据请求的名字大致判断,提高效率。比如上图中getUBookList看起来就像是获取图书列表。点开查看,返回的果然是图书列表。

请记住这个链接的地址和格式,后面要用到:
在这里插入图片描述
https://www.epubit.com/pubcloud/content/front/portal/getUbookList?page=1&row=20&=&startPrice=&endPrice=&tagId= 分析一下,可以看到:

  1. 网址是:https://www.epubit.com/pubcloud/content/front/portal/getUbookList
  2. page=1表示第1页,我们可以依次传入2,3,4等等。
  3. row=20表示每一页有20本书
  4. startPrice和endPrice表示价格条件,他们的值都是空,表示不设定价格限制。

3) 使用postman测试猜想

为了验证这个设想打开谷歌浏览器,在地址栏中输入以下网址:

https://www.epubit.com/pubcloud/content/front/portal/getUbookList?page=1&row=20&=&startPrice=&endPrice=&tagId=

可是得到了如下的返回结果:

{
   
    "code": "-7",
    "data": null,
    "msg": "系统临时开小差,请稍后再试~",
    "success": false
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值