网页音频抓取软件(你要偷偷学Python,然后把所有人都吓晕了(第7天) )
优采云 发布时间: 2022-04-16 23:01网页音频抓取软件(你要偷偷学Python,然后把所有人都吓晕了(第7天)
)
标题无意冒犯,我只是觉得这个广告很有趣
文章目录
前言
初评:你要偷偷学Python,然后惊呆大家(第6天)
前天说的,今天我们要学爬虫,对,今天就开始爬
本系列文默认各位有一定的C或C++基础,因为我是学了点C++的皮毛之后入手的Python。
本系列文默认各位会百度,学习‘模块’这个模块的话,还是建议大家有自己的编辑器和编译器的,上一篇已经给大家做了推荐啦?
本系列也会着重培养各位的自主动手能力,毕竟我不可能把所有知识点都给你讲到,所以自己解决需求的能力就尤为重要,所以我在文中埋得坑请不要把它们看成坑,那是我留给你们的锻炼机会,请各显神通,自行解决。
1234567
如果您是新手,请查看以下段落:
欢迎加入我们的圈子
我成立了一个 Python 学习问答小组。有兴趣的朋友可以了解一下:关注小编私信“01”进入裙子领取python学习资料,会节省很多时间,减少遇到的很多问题。
第一次爬虫
我不是什么大人物,所以不会一上来就展示很多特殊的爬虫技能。让我们一步一步来。
网络爬虫,也称为网络蜘蛛。它根据网页地址(URL)抓取网页的内容,网页地址(URL)就是我们在浏览器中输入的网站链接。例如: ,它是一个 URL。
为什么爬行动物
一般搜索引擎的处理对象是互联网页面。目前,互联网页面数量已达数百亿。因此,搜索引擎面临的第一个问题就是:如何设计一个高效的下载系统,将如此海量的网页数据传输到本地。互联网网页的镜像备份在本地形成。
网络爬虫可以发挥这样的作用,完成这项艰巨的任务。它是搜索引擎系统中一个非常关键和基本的组件。
举一个很常见的栗子:百度。
百度公司会不断爬取上千个网站,存储在自己的服务器上。你在百度上搜索的本质是在其服务器上搜索信息。您搜索的结果是一些超链接。超链接跳转后,可以访问其他网站。
常见爬虫架构
好的,你能看懂上图吗?如果没有,让我们看一些用户访问 网站 的流程图:
这是一个人机交互的过程,那么我们来看看爬虫在这个闭环中可以替代哪些任务:
是的,非常符合我们“人工智能”的特点,解放了我们的双手。
爬虫的工作步骤
第1步:获取数据。爬虫程序会根据我们提供的网址,向服务器发起请求,然后返回数据。
第2步:解析数据。爬虫程序会把服务器返回的数据解析成我们能读懂的格式。
第3步:提取数据。爬虫程序再从中提取出我们需要的数据。
第4步:储存数据。爬虫程序把这些有用的数据保存起来,便于你日后的使用和分析。
1234567
这就是爬虫的工作原理。以后无论学习内容如何变化,核心都是爬虫的原理。
本章的目的是直接了解爬虫,太多不必要的概念就不展开了。
好的爬行动物的特征
换句话说,好的代码似乎具有这些特征。
但是谁能说出一个好的架构的特征呢?让我眼前一亮,惊呼道:“老大,带我去”
1.高性能
这里的性能主要是指爬虫下载的网页的爬取速度。一种常见的评估方法是爬虫每秒可以下载的网页数量作为性能指标。单位时间内可以下载的页面越多,爬虫的性能就越高。
为了提高爬虫的性能,程序访问磁盘的操作方式(磁盘IO)和具体实现时数据结构的选择很关键,比如要爬取的URL队列和已经被爬取的URL队列。爬取了,因为url的数量非常多。不同的实现执行起来非常不同,因此高效的数据结构对爬虫性能有很大的影响。
2.可扩展性
即使单个爬虫的性能很高,将所有网页下载到本地仍然需要很长时间。为了尽可能地缩短爬取周期,爬虫系统应该具有良好的可扩展性,即很容易增加 Crawl 的服务器和爬虫的数量来实现这一点。
目前,实用的大型网络爬虫必须是分布式运行的,即多台服务器专用于爬虫。每台服务器部署多个爬虫,每个爬虫运行在多个线程中,以多种方式增加并发。
对于大型搜索引擎服务商来说,数据中心也可能会部署在全球、不同区域,爬虫也被分配到不同的数据中心,这对于提升爬虫系统的整体性能非常有帮助。
3.稳健性
当爬虫想要访问各种类型的网站服务器时,可能会遇到很多异常情况:比如网页的HTML编码不规范,被爬的服务器突然崩溃,甚至爬进陷阱。爬虫能够正确处理各种异常情况是非常重要的,否则它可能会时不时停止工作,这是难以忍受的。
从另一个角度来说,假设爬虫程序在爬取过程中死掉了,或者爬虫所在的服务器宕机了,一个健壮的爬虫应该能够:当再次启动爬虫时,可以恢复内容和数据之前爬取的结构,不必每次都从头开始做所有的工作,这也是爬虫健壮性的体现。
4.友善
爬虫的友好性包括两层含义:一是保护网站的部分隐私;另一种是减少爬取的网站的网络负载。爬虫爬取的对象是各种类型的网站。对于网站的拥有者来说,有些内容不想被所有人搜索到,所以需要设置一个协议来告知爬虫哪些内容不是。允许爬行。目前,实现这一目标的主流方法有两种:爬虫禁止协议和网页禁止标记。
这将在后面详细解释。
爬虫初体验
网络爬虫的第一步是根据URL获取网页的HTML信息。在 Python3 中,可以使用 urllib.request 和 requests 完成网页抓取。
urllib库是python内置的,无需我们额外安装,只要安装了Python就可以使用这个库。
requests库是第三方库,需要我们自己安装。
12
requests库的基本方法如下:
请求.get()
看一段伪代码:
import requests
#引入requests库
res = requests.get('URL')
#requests.get是在调用requests库中的get()方法,
#它向服务器发送了一个请求,括号里的参数是你需要的数据所在的网址,然后服务器对请求作出了响应。
#我们把这个响应返回的结果赋值在变量res上。
123456
我刚才在群里跟他们说,学Python最重要的是打好基础,从数据类型和数据结构开始。
那么我们来看看爬虫获取数据的返回值的数据类型。
随便找个网站,或者从小乌龟的网站入手:
%3A%2F%%2Flarge%2F006m97Kgly1g5voen881dj30ag0aawfo.jpg
网址有点长,但可以试验一下。
import requests
res = requests.get('URL')
print(type(res))
#打印变量res的数据类型
1234
结果:
Response对象常用的四个属性
首先是我们的status_code,这是一个很常用的属性,用来检查请求是否成功,可以打印出它的返回值。
下一个属性是response.content,可以以二进制数据的形式返回Response对象的内容,适用于图片、音频、视频的下载。你可以通过看一个例子来理解它。
来吧,让那只小乌龟下来:
import requests
res = requests.get('https://timgsa.baidu.com/timg?image&quality=80&size=b9999_10000&sec=1604032500192&di=67b6cdd3eb1722f845fd0cc39625b386&imgtype=0&src=http%3A%2F%2Fwx1.sinaimg.cn%2Flarge%2F006m97Kgly1g5voen881dj30ag0aawfo.jpg')
#发出请求,并把返回的结果放在变量res中
pic=res.content
#把Reponse对象的内容以二进制数据的形式返回
photo = open('乌龟.jpg','wb')
#新建了一个文件ppt.jpg,这里的文件没加路径,它会被保存在程序运行的当前目录下。
#图片内容需要以二进制wb读写。你在学习open()函数时接触过它。
photo.write(pic)
#获取pic的二进制内容
photo.close()
#关闭文件
123456789101112
网站里的小照片也可以自己爬。
有的朋友会问:那我怎么知道我的小照片的网址呢?
其实很容易处理:在小照片上点右键,打开一个新标签,没有网址。
如果不行,把这个文章上的小照片拖到新窗口,URL就在那里了。
好了,今天的练习大概就到这里了。
说完response.content,继续看response.text。该属性可以以字符串的形式返回Response对象的内容,适用于下载文本和网页源代码。
看清楚,是源代码。
来,找个网站,比如我的文章网站,来体验一下:
import requests
#引用requests库
res = requests.get('https://mp.toutiao.com/profile_v4/graphic/publish?pgc_id=6889211245900071428')
novel=res.text
#把Response对象的内容以字符串的形式返回
k = open('《第七天》.txt','a+')
#创建一个名为《第七天》的txt文档,指针放在文件末尾,追加内容
k.write(novel)
#写进文件中
k.close()
#关闭文档
1234567891011
接下来我们看最后一个属性:response.encoding,它帮助我们定义了Response对象的编码。
首先,不知道目标数据本身的编码是什么。用 requests.get() 发送请求后,我们会得到一个 Response 对象,其中 requests 库会自行判断数据的编码类型。但!这个判断可能准确也可能不准确。
如果判断准确,我们打印出来的response.text的内容是正常的,没有乱码,所以我们不需要res.encoding;如果判断不准确,会出现一堆乱码,那么我们可以查看目标数据的编码,然后使用 res.encoding 定义编码为与目标数据相同的类型。
我有点累了,所以让我们再提一点。
我国有完整的法律
事实上,我国关于爬行动物的法律还在完善中,所以还是尽快爬吧。
一般情况下,服务器不关心小型爬虫,但是服务器会拒绝大型爬虫和高频次的恶意爬虫,因为这会给服务器带来很大的压力或损害。
但是,一般情况下,服务器是欢迎搜索引擎的(刚才说了,谷歌和百度的核心技术之一就是爬虫)。当然,这是有条件的,这些条件会写在机器人协议中。
机器人协议是互联网爬虫公认的道德准则。它的全称是“机器人排除协议”。该协议用于告诉爬虫哪些页面可以爬取,哪些页面不能爬取。
如何查看网站的robots协议,很简单,在网站的域名后面加上/robots.txt即可。
协议中最常用的英文是Allow和Disallow,Allow表示可以访问,Disallow表示禁止访问。
工具在你手中,你如何使用它是你的选择。当你在爬网站数据的时候,别忘了看看网站的Robots协议是否允许你爬。
同时,限制爬虫的速度也是我们应该做的,感谢提供数据的服务器,避免对其施加太大压力,维护良好的互联网秩序。
以上就是我们今天要讲的内容。下一次,我们将分析那些网页并在网页中得到我们想要的东西。
最后,还有一件事,如果你想学习Python,可以联系阿淼。这里是我自己整理的一套完整的python学习资料和路线。想要这些资料的可以关注阿淼,私信“01”领取。