美文网首页Python新世界python热爱者
教授花3K购入三个Python爬虫教材,知乎大佬看完后大喜,血赚

教授花3K购入三个Python爬虫教材,知乎大佬看完后大喜,血赚

作者: 轻松学Python111 | 来源:发表于2018-08-06 23:03 被阅读0次

    一、前言(文章内容很长,做好心理准备。我创了个Python的学习圈子125240963 大家可以来一起交流,每天都有大佬解答问题,也有很多Python的电子书可以下载 )

    本文的实战内容有:

    网络小说下载(静态网站)

    优美壁纸下载(动态网站)

    爱奇艺VIP视频下载

    二、网络爬虫简介

    网络爬虫,也叫网络蜘蛛(Web Spider)。它根据网页地址(URL)爬取网页内容,而网页地址(URL)就是我们在浏览器中输入的网站链接。

    在讲解爬虫内容之前,我们需要先学习一项写爬虫的必备技能:审查元素

    1. 审查元素

    我们可以看到,右侧出现了一大推代码,这些代码就叫做HTML。什么是HTML?举个容易理解的例子:我们的基因决定了我们的原始容貌,服务器返回的HTML决定了网站的原始容貌。

    再举个小例子:我们都知道,使用浏览器"记住密码"的功能,密码会变成一堆小黑点,是不可见的。可以让密码显示出来吗?可以,只需给页面"动个小手术"!以淘宝为例,在输入密码框处右键,点击检查。

    就这样,浏览器"记住的密码"显现出来了:

    2. 简单实例

    网络爬虫的第一步就是根据URL,获取网页的HTML信息。在Python3中,可以使用urllib.request和requests进行网页爬取。

    urllib库是python内置的,无需我们额外安装,只要安装了Python就可以使用这个库。

    requests库是第三方库,需要我们自己安装。

    requests.get()方法必须设置的一个参数就是url,因为我们得告诉GET请求,我们的目标是谁,我们要获取谁的信息。我们将GET请求获得的响应内容存放到req变量中,然后使用req.text就可以获得HTML信息了。运行结果如下:

    三、爬虫实战

    实战内容由简单到复杂,难度逐渐增加,但均属于入门级难度。下面开始我们的第一个实战内容:网络小说下载。

    1. 小说下载

    (1)实战背景

    用已经学到的知识获取HTML信息试一试,编写代码如下:

    运行Python爬虫代码,可以看到如下结果:

    (3)Beautiful Soup

    Beautiful Soup的安装方法和requests一样,使用如下指令安装(也是二选一):

    pip install beautifulsoup4

    easy_install beautifulsoup4

    现在,我们使用已经掌握的审查元素方法,查看一下我们的目标页面,你会看到如下内容:

    知道这个信息,我们就可以使用Beautiful Soup提取我们想要的内容了,编写代码如下:

    我们可以看到,我们已经顺利匹配到我们关心的正文内容,但是还有一些我们不想要的东西。比如div标签名,br标签,以及各种空格。怎么去除这些东西呢?我们继续编写代码:

    程序运行结果如下:

    我们将之前获得的第一章节的URL和 标签对比看一下:

    还是使用find_all方法,运行结果如下:

    方法很简单,对Beautiful Soup返回的匹配结果a,使用a.get('href')方法就能获取href的属性值,使用a.string就能获取章节名,编写代码如下:

    (3)整合代码

    每个章节的链接、章节名、章节内容都有了。接下来就是整合代码,将获得内容写入文本文件存储就好了。编写代码如下:

    很简单的程序,单进程跑,没有开进程池。下载速度略慢,喝杯茶休息休息吧。代码运行效果如下图所示:

    2. 优美壁纸下载

    (1)实战背景

    (2)实战进阶

    那么,让我们先捋一捋这个过程:

    使用requeusts获取整个网页的HTML信息;

    根据图片存放地址,下载图片。

    我们信心满满地按照这个思路爬取Unsplash试一试,编写代码如下:

    答案就是,这个网站的所有图片都是动态加载的!网站有静态网站和动态网站之分,上一个实战爬取的网站是静态网站,而这个网站是动态网站,动态加载有一部分的目的就是为了反爬虫。

    动态网站使用动态加载常用的手段就是通过调用JavaScript来实现的。怎么实现JavaScript动态加载,我们不必深究,我们只要知道,动态加载的JavaScript脚本,就像化妆术需要用的化妆品,五花八门。有粉底、口红、睫毛膏等等,它们都有各自的用途。动态加载的JavaScript脚本也一样,一个动态加载的网站可能使用很多JavaScript脚本,我们只要找到负责动态加载图片的JavaScript脚本,不就找到我们需要的链接了吗?

    通过Fiddler抓包,我们发现,点击不同图片的下载按钮,GET请求的地址都是不同的。但是它们很有规律,就是中间有一段代码是不一样的,其他地方都一样。中间那段代码是不是很熟悉?没错,它就是我们之前抓包分析得到json数据中的照片的id。我们只要解析出每个照片的id,就可以获得图片下载的请求地址,然后根据这个请求地址,我们就可以下载图片了。那么,现在的首要任务就是解析json数据了。

    编写代码,尝试获取json数据:

    有想法就要尝试,编写代码如下:

    认证问题解决了,又有新问题了:

    可以看到,我们GET请求又失败了,这是为什么?这个网站反爬虫的手段除了动态加载,还有一个反爬虫手段,那就是验证Request Headers。接下来,让我们分析下这个Requests Headers:

    headers参数值是通过字典传入的。记得将上述代码中your Client-ID换成诸位自己抓包获得的信息。代码运行结果如下:

    解析json数据很简单,跟字典操作一样,就是字典套字典。json.load()里面的参数是原始的json格式的数据。程序运行结果如下:

    下载速度还行,有的图片下载慢是因为图片太大。可以看到右侧也打印了一些警报信息,这是因为我们没有进行SSL验证。

    学会了爬取图片,简单的动态加载的网站也难不倒你了。赶快试试国内的一些图片网站吧!

    3. 爱奇艺VIP视频下载

    (1)实战背景

    这样,我们就可以在线观看这些VIP视频了:

    但是这个网站只提供了在线解析视频的功能,没有提供下载接口,如果想把视频下载下来,我们就可以利用网络爬虫进行抓包,将视频下载下来。

    (2)实战升级

    分析方法相同,我们使用Fiddler进行抓包:

    我们可以看到,有用的请求并不多,我们逐条分析。我们先看第一个请求返回的信息。

    这个信息有转义了,但是没有关系,我们手动提取一下,变成如下形式:

    我们已经知道了这个解析视频的服务器的域名,再把域名加上:

    再打开这个视频地址:

    接下来,我们的任务就是编程实现我们所分析的步骤,根据不同的视频播放地址获得视频存放的地址。

    现在梳理一下编程思路:

    (3)编写代码

    思路已经给出,希望喜欢爬虫的人可以在运行下代码之后,自己重头编写程序,因为只有经过自己分析和测试之后,才能真正明白这些代码的意义。上述代码运行结果如下:

    相关文章

      网友评论

      • 朱登龙:老铁 你这个题目 是今日头条 编辑组确定的吗
      • 吖查:为什么request.get下载笔趣网小说的网页显示的时候都是没有小说文字内容?
      • 佛系爬客:最后一个在网上看到了不知道多少次了,我猜小编应该没有测试吧。。😂😂

      本文标题:教授花3K购入三个Python爬虫教材,知乎大佬看完后大喜,血赚

      本文链接:https://www.haomeiwen.com/subject/qxunvftx.html