Python爬虫自学笔记(三)动态网页爬取

现在很多网站用的是动态网页加载技术,这时候用前面的request库和BS4库就不能解决问题了,需要用新的办法。

打开网页,按F12或者右键弹出菜单里选择“检查”,右侧会打开开发者工具。

这里有一排菜单,最左边的是Element,显示的是网页的源代码,如果在这里能直接找到所需要爬取的内容,就说明这是静态页面,可以用 request库和BeautifulSoup4库的工具爬取所需内容。如果这里找不到所需内容,那么就是动态页面。这时候往右面看Network菜单。

Network的功能是:记录在当前页面上发生的所有请求。现在看上去好像空空如也的样子,这是因为Network记录的是实时网络请求。现在网页都已经加载完成,所以不会有东西。

右侧勾选框Preserve log,它的作用是“保留请求日志”。如果不点击这个,当发生页面跳转的时候,记录就会被清空。所以,我们在爬取一些会发生跳转的网页时,会点亮它。

然后刷新页面,这时候就会跳出来很多记录。

找到这个页面的第0个请求:search.html,然后点击它,我们来查看它的Response(官方翻译叫“响应”,你可以理解为服务器对浏览器这个请求的回应内容,即请求的结果)。

下面第1行,是对请求进行分类查看。我们最常用的是:ALL(查看全部)/XHR(仅查看XHR)/Doc(Document,第0个请求一般在这里),有时候也会看看:Img(仅查看图片)/Media(仅查看媒体文件)/Other(其他)。最后,JS和CSS,则是前端代码,负责发起请求和页面实现;Font是文字的字体;而理解WS和Manifest,需要网络编程的知识,倘若不是专门做这个,不需要了解。

Network中,有一类非常重要的请求叫做XHR(当你把鼠标在XHR上悬停,你可以看到它的完整表述是XHR and Fetch)

AJAX技术在工作的时候,会创建一个XHR(或是Fetch)对象,然后利用XHR对象来实现,服务器和浏览器之间传输数据。在这里,XHRFetch并没有本质区别,只是Fetch出现得比XHR更晚一些,所以对一些开发人员来说会更好用,但作用都是一样的。

在XHR列表中,找到带有我们所需要数据的一个(这个要靠经验了,可以一个个点开看,也可以观察英文名)

点开XHR,看到如下列表

从左往右分别是:Headers:标头(请求信息)、Preview:预览、Response:响应、Cookies:Cookies、Timing:时间。

点开Headers

General里的Requests URL就是我们应该去访问的链接。如果在浏览器中打开这个链接,就会得到一个类似字典的数据结构,它是JSON数据。

json数据可以跨平台,跨语言工作。jsonXHR之间的关系:XHR用于传输数据,它能传输很多种数据,json是被传输的一种数据格式。

我们用requests库的json方法可以解析这一数据。

# 引用requests库
import requests
# 调用get方法,下载这个字典
res = requests.get(url)
# 使用json()方法,将response对象,转为列表/字典
json = res.json()
#遍历字典,获取所需资料
for i in json:
    for j in i:
        print(j)

 

带参数请求

每个url都由两部分组成。前半部分大多形如:https://xx.xx.xxx/xxx/xxx

posted on 2021-08-16 01:58  毕达哥拉斯  阅读(559)  评论(0编辑  收藏  举报

导航