文章目录前言

欢迎来到我们的圈子

初见爬虫

为什么是爬虫

通用爬虫架构

爬虫的工作步骤

优秀爬虫的特性

1.高性能

2.可扩展性

3.健壮性

4.友好性

爬虫初体验

requests.get()

Response对象常用的四个属性

我国有一部完整的法律

前言

前期回顾:你要偷偷的学Python,然后惊呆所有人(第六天)

前一天说了,我们今天要进入到爬虫的学习,对,今天我们开始爬

本系列文默认各位有一定的C或C++基础,因为我是学了点C++的皮毛之后入手的Python。本系列文默认各位会百度,学习‘模块’这个模块的话,还是建议大家有自己的编辑器和编译器的,上一篇已经给大家做了推荐啦?本系列也会着重培养各位的自主动手能力,毕竟我不可能把所有知识点都给你讲到,所以自己解决需求的能力就尤为重要,所以我在文中埋得坑请不要把它们看成坑,那是我留给你们的锻炼机会,请各显神通,自行解决。1234567

如果是小白的话,可以看一下下面这一段:

欢迎来到我们的圈子

我建了一个Python学习答疑群,有兴趣的朋友可以了解一下:关注小编,并私信“01”即可进裙,领取python学习资料,会节约很多时间,减少很多遇到的难题。

初见爬虫

我也不是啥大佬,所以也不会一上来就一大堆特别高大上的爬虫技巧呈现出来,我们一步一步来吧。

网络爬虫,也叫网络蜘蛛(Web Spider)。它根据网页地址(URL)爬取网页内容,而网页地址(URL)就是我们在浏览器中输入的网站链接。比如:https://www.baidu.com/,它就是一个URL。

为什么是爬虫

通用搜索引擎的处理对象是互联网网页,目前互联网网页的数量已达百亿,所以搜索引擎首先面临的问题是:如何能够设计出高效的下载系统,以将如此海量的网页数据传送到本地,在本地形成互联网网页的镜像备份。

网络爬虫能够起到这样的作用,完成此项艰巨的任务,它是搜索引擎系统中很关键也很基础的构件。

举个很常见的栗子吧:百度。

百度这家公司会源源不断地把千千万万个网站爬取下来,存储在自己的服务器上。你在百度搜索的本质就是在它的服务器上搜索信息,你搜索到的结果是一些超链接,在超链接跳转之后你就可以访问其它网站了。

通用爬虫架构

好,上面这张图能看明白吗?如果不能的话,我们来再看些用户访问网站的流程图:

这是一个人机交互的流程,那么我们再来看看爬虫在这个闭环里面能够取代掉哪些工作:

是吧,非常符合我们的“人工智能”的特性,解放我们的双手。

爬虫的工作步骤

第1步:获取数据。爬虫程序会根据我们提供的网址,向服务器发起请求,然后返回数据。第2步:解析数据。爬虫程序会把服务器返回的数据解析成我们能读懂的格式。第3步:提取数据。爬虫程序再从中提取出我们需要的数据。第4步:储存数据。爬虫程序把这些有用的数据保存起来,便于你日后的使用和分析。1234567

这就是爬虫的工作原理啦,无论之后的学习内容怎样变化,其核心都是爬虫原理。

本章旨在直截了当的认识爬虫,所以过多的不必要的概念就不引伸了。

优秀爬虫的特性

话说优秀的代码好像都是这些特性。

不过有人能说出优秀架构的特性吗?让我眼前一亮,惊呼一声:“大佬,带我”

1.高性能

这里的性能主要是指爬虫下载网页的抓取速度,常见的评价方式是以爬虫每秒能够下载的网页数量作为性能指标,单位时间能够下载的网页数量越多,爬虫的性能越高。

要提高爬虫的性能,在设计时程序访问磁盘的操作方法(磁盘IO)及具体实现时数据结构的选择很关键,比如对于待抓取URL队列和已抓取URL队列,因为URL数量非常大,不同实现方式性能表现迥异,所以高效的数据结构对于爬虫性能影响很大。

2.可扩展性

即使单个爬虫的性能很高,要将所有网页都下载到本地,仍然需要相当长的时间周期,为了能够尽可能缩短抓取周期,爬虫系统应该有很好地可扩展性,即很容易通过增加抓取服务器和爬虫数量来达到此目的。

目前实用的大型网络爬虫一定是分布式运行的,即多台服务器专做抓取。每台服务器部署多个爬虫,每个爬虫多线程运行,通过多种方式增加并发性。

对于巨型的搜索引擎服务商来说,可能还要在全球范围、不同地域分别部署数据中心,爬虫也被分配到不同的数据中心,这样对于提高爬虫系统的整体性能是很有帮助的。

3.健壮性

爬虫要访问各种类型的网站服务器,可能会遇到很多种非正常情况:比如网页HTML编码不规范、 被抓取服务器突然死机,甚至爬到陷阱里边去了等。爬虫对各种异常情况能否正确处理非常重要,否则可能会不定期停止工作,这是无法忍受的。

从另外一个角度来讲,假设爬虫程序在抓取过程中死掉,或者爬虫所在的服务器宕机,健壮的爬虫应能做到:再次启动爬虫时,能够恢复之前抓取的内容和数据结构,而不是每次都需要把所有工作完全从头做起,这也是爬虫健壮性的一种体现。

4.友好性

爬虫的友好性包含两方面的含义:一是保护网站的部分私密性;另一是减少被抓取网站的网络负载。爬虫抓取的对象是各类型的网站,对于网站所有者来说,有些内容并不希望被所有人搜到,所以需要设定协议,来告知爬虫哪些内容是不允许抓取的。目前有两种主流的方法可达到此目的:爬虫禁抓协议和网页禁抓标记。

这一点后面会再详细说明。

爬虫初体验

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

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

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

requests库的基础方法如下:

requests.get()

看一段伪代码:

import requests#引入requests库res = requests.get('URL')#requests.get是在调用requests库中的get()方法,#它向服务器发送了一个请求,括号里的参数是你需要的数据所在的网址,然后服务器对请求作出了响应。#我们把这个响应返回的结果赋值在变量res上。123456

刚刚我还在群里跟他们说,学习Python最重要的是打基础,从数据类型,数据结构开始。

那我们就来看看这爬虫获取数据的返回值是个什么数据类型。

先随便找个网址吧,要不就开头那个小乌龟的网址吧:

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

网址是长了点哈,不过可以实验的。

import requests

res = requests.get('URL')

print(type(res))#打印变量res的数据类型1234

结果:

Response对象常用的四个属性

首先是我们的status_code,它是一个很常用的属性,用于检查请求出否成功,可以把它的返回值打印出来看。

接着的属性是response.content,它能把Response对象的内容以二进制数据的形式返回,适用于图片、音频、视频的下载,看个例子你就懂了。

来我们把那个小乌龟爬下来:

import requestsres = 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

大家也可以自己去爬一爬网站里面的小照片。

有的朋友会问:那我要怎么知道我的小照片网址呢?

其实也好办:右击小照片,新建标签页打开,网址不就有了吗。

再不行,你直接把这篇文章上的小照片拖一下嘛,拖到新窗口去,网址就有了。

好,今天的实操大概就在这里了。

讲完了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协议是互联网爬虫的一项公认的道德规范,它的全称是“网络爬虫排除标准”(Robots exclusion protocol),这个协议用来告诉爬虫,哪些页面是可以抓取的,哪些不可以。

如何查看网站的robots协议呢,很简单,在网站的域名后加上/robots.txt就可以了。

协议里最常出现的英文是Allow和Disallow,Allow代表可以被访问,Disallow代表禁止被访问。

工具在你手中,如何利用它是你的选择。当你在爬取网站数据的时候,别忘了先看看网站的Robots协议是否允许你去爬取。

同时,限制好爬虫的速度,对提供数据的服务器心存感谢,避免给它造成太大压力,维持良好的互联网秩序,也是我们该做的事。

以上,就是我们今天要讲的内容啦,下一次我们就来对那些网页进行分析,获取网页中我们要的东西。

最后多说一句,想学习Python可联系阿喵,这里有我自己整理的整套python学习资料和路线,想要这些资料的都可以关注up主,并私信“资料”领取。

学python的亲身经历_你要偷偷的学Python,然后惊呆所有人相关推荐

  1. Python EFZ文件 气象_你要偷偷的学Python,然后惊呆所有人(第四天) - python阿喵

    标题无意冒犯,就是觉得这个广告挺好玩的 文章目录 前言什么是模块?跟我一起动手导入自己的模块第一步:新建一个模块第二步:调用模块调用模块不同方法.`if __name__ == '__main__'` ...

  2. python 去掉双引号_你要偷偷的学Python,然后惊呆所有人(第一天) - python阿喵

    标题无意冒犯,就是觉得这个广告挺好玩的 好,切入正题 文章目录 前言 Python语言概览 Python语言的起源 数据类型 Number数据类型 容器数据类型 str 字符串型 元字符串 字符串的格 ...

  3. python 去掉双引号_你要偷偷的学Python,然后惊呆所有人(第一天)

    标题无意冒犯,就是觉得这个广告挺好玩的 好,切入正题 文章目录 前言 Python语言概览 Python语言的起源 数据类型 Number数据类型 容器数据类型 str 字符串型 元字符串 字符串的格 ...

  4. 怎么学python-结合学习经历,谈一谈如何学习Python

    结合自己的学习经历,谈一谈如何学习Python吧. 入门阶段 Python其实语言本身已经很接近自然语言了,所以入门其实并不麻烦.如果你是从未接触过编程的萌新,给你推荐一门Udacity CS101, ...

  5. 少儿学python真的有用吗_如何看待海淀妈妈们认为Python是儿童才学的低端编程?...

    海淀妈妈没说错啊~ 对于她们,python确实是儿童才学的低端编程. 儿童学编程,最重要的是易上手,当然要用代码看起来更简单的动态语言. 主流的动态语言里,ruby太骚,js太贱,php太浪,只有py ...

  6. python做pca图_【教程】组学研究,用python快速实现PCA分析和绘图

    什么是PCA 主成分分析(Principal Component Analysis,PCA)是一种无监督的多元统计分析方法.在蛋白组学和代谢组学研究中能从总体上反应各组样本之间的总体差异和组内样本之间 ...

  7. 业余学python数据挖掘怎么赚钱_如何在业余时学数据分析?

    反对高票答案. 一上来便是各种教程,二话不说给出一批书单,各种数据处理的方式,讲怎么样用Python挖掘数据,怎么用R进行数据可视化,讲AB测试. 他们给的教程都很好,数据处理的方式也很有借鉴意义. ...

  8. 最适合新手的python刷题网站_有没有适合新手练习Python的网站(做题类)?

    直接在知乎看我整理的练习题就可以了, 给你分享一下我自己亲身经历过的python考试题(下面还有练习题大全哦~~~) 记得给小达点个关注~ 你可以参考下面的题进行练习,考试题换汤不换药,希望对你有帮助 ...

  9. python实现vlookup功能_干货一:怎么在python里面实现vlookup

    vlookup应该是excel里用的比较多的功能,我刚接触excel的时候,反正觉得这个功能非常神奇,省了很多事.但是用久了以后就发现vlookup的限制太多了...第一大痛点:只能往右边--> ...

最新文章

  1. ACMNO.40 C语言-子串 有一字符串,包含n个字符。写一函数,将此字符串中从第m个字符开始的全部字符复制成为另一个字符串
  2. 语言转4字节数据整型_R语言与RGui平台_数据类型_向量_4
  3. DPDK — 安装部署(CentOS 7)
  4. 【隐私】大数据下的隐私威胁【转载】
  5. c#简单记事本应用程序的快捷方式_Windows 10七月更新又翻车,记事本没了
  6. 收藏 | 可能是最详尽的PyTorch动态图解析
  7. 【华为云技术分享】三大前端技术(React,Vue,Angular)探密(上)
  8. VM : 虚拟机中Linux磁盘的挂载与卸载
  9. 《C++ Primer》读书笔记—第六章 函数
  10. windows11右键恢复完整右键菜单
  11. gb和gib的区别_内存 G和GB有什么区别
  12. 跟着源码看lcn分布式事务
  13. [RK3288][Android5.1] 调试笔记 --- 根据VIDPID读取不同的rilLib以实现4G模块的适配
  14. python docx修改word文档格式
  15. 建议将com.alibaba:fastjson升级至1.2.83
  16. VMware软件虚拟机不能全屏
  17. 2023中国传媒大学计算机考研信息汇总
  18. 用trie树实现输入提示功能,输入php函数名,提示php函数
  19. 加密市场中的14个心智模型
  20. 墨竹:黄金如期狂泻还稳居此枢轴点?成败在此一举!

热门文章

  1. 医学影像数据集和其他数据集们
  2. 通过 Hostapd 进行 WIFI 热点共享上网
  3. 计算机操作实践的课程描述,计算机操作系统课程设计实践报告-Read.DOC
  4. ORB-SLAM2代码详解08: 局部建图线程LocalMapping
  5. 有以下三张表,学生表 student 课程表 course 成绩表 result
  6. SDUST 点在圆内吗?
  7. [附源码]计算机毕业设计Python+uniapp基于Android的自来水收费系统3e359(程序+源码+LW+远程部署)
  8. 怎样读 nacos 源码——服务端处理客户端注册解读
  9. 【无人机】基于蒙特卡洛算法实现无人机任务分配模型附matlab代码
  10. 操作系统 计算机操作系统教程笔记