Python爬虫入门教程(非常详细)适合零基础小白

一、什么是爬虫?

1.简单介绍爬虫

爬虫的全称为网络爬虫,简称爬虫,别名有网络机器人,网络蜘蛛等等。

网络爬虫是一种自动获取网页内容的程序,为搜索引擎提供了重要的数据支撑。搜索引擎通过网络爬虫技术,将互联网中丰富的网页信息保存到本地,形成镜像备份。我们熟悉的谷歌、百度本质上也可理解为一种爬虫。

如果形象地理解,爬虫就如同一只机器蜘蛛,它的基本操作就是模拟人的行为去各个网站抓取数据或返回数据。

2.爬虫的分类

网络爬虫一般分为传统爬虫聚焦爬虫。

传统爬虫从一个或若干个初始网页的URL开始,抓取网页时不断从当前页面上抽取新的URL放入队列,直到满足系统的一定条件才停止,即通过源码解析来获得想要的内容。

聚焦爬虫需要根据一定的网页分析算法过滤与主题无关的链接,保留有用的链接并将其放入待抓取的URL队列,再根据一定的搜索策略从队列中选择下一步要抓取的网页URL,并重复上述过程,直到满足系统的一定条件时停止。另外,所有被爬虫抓取的网页都将会被系统存储、分析、过滤,并建立索引,以便之后的查询和检索;对于聚焦爬虫来说,这一过程所得到的分析结果还可能对以后的抓取过程给出反馈和指导。

防爬虫:KS-WAF(网站统一防护系统)将爬虫行为分为搜索引擎爬虫及扫描程序爬虫,可屏蔽特定的搜索引擎爬虫节省带宽和性能,也可屏蔽扫描程序爬虫,避免网站被恶意抓取页面。使用防爬虫机制的基本上是企业,我们平时也能见到一些对抗爬虫的经典方式,如图片验证码、滑块验证、封禁 IP等等。

3.爬虫的工作原理

下图是一个网络爬虫的基本框架:

对应互联网的所有页面可划分为五部分:

1.已下载未过期网页

2.已下载已过期网页:抓取到的网页实际上是互联网内容的一个镜像文件,互联网是动态变化的,一部分互联网上的内容已经发生了变化,这时,这部分抓取到的网页就已经过期了。

3.待下载网页:待抓取URL队列中的页面。

4.可知网页:既没有被抓取也没有在待抓取URL队列中,但可通过对已抓取页面或者待抓取URL对应页面进行分析获取到的URL,认为是可知网页。

5.不可知网页:爬虫无法直接抓取下载的网页。

待抓取URL队列中的URL顺序排列涉及到抓取页面的先后次序问题,而决定这些URL排列顺序的方法叫做抓取策略。下面介绍六种常见的抓取策略:

1.深度优先遍历策略

深度优先遍历策略是指网络爬虫从起始页开始,由一个链接跟踪到另一个链接,这样不断跟踪链接下去直到处理完这条线路,之后再转入下一个起始页,继续跟踪链接。以下图为例:

遍历路径:A-F-G E-H-I B C D

需要注意的是,深度优先可能会找不到目标节点(即进入无限深度分支),因此,深度优先策略不一定能适用于所有情况。

2.宽度优先遍历策略

宽度优先遍历策略的基本思路是,将新下载网页中发现的链接直接插入待抓取URL队列的末尾。也就是指网络爬虫会先抓取起始网页中链接的所有网页,然后再选择其中的一个链接网页,继续抓取在此网页中链接的所有网页。还是以上图为例:

遍历路径:第一层:A-B-C-D-E-F,第二层:G-H,第三层:I

广度优先遍历策略会彻底遍历整个网络图,效率较低,但覆盖网页较广

3.反向链接数策略

反向链接数是指一个网页被其他网页链接指向的数量。反向链接数反映一个网页的内容受到其他人推荐的程度。因此,很多时候搜索引擎的抓取系统会使用这个指标来评价网页的重要程度,从而决定不同网页的抓取先后顺序。

而现实是网络环境存在各种广告链接、作弊链接的干扰,使得许多反向链接数反映的结果并不可靠。

4.Partial PageRank策略

Partial PageRank策略借鉴了PageRank算法的思想:对于已下载网页,连同待抓取URL队列中的URL,形成网页集合,计算每个页面的PageRank值,然后将待抓取URL队列中的URL按照PageRank值的大小进行排列,并按照该顺序抓取页面。

若每次抓取一个页面,就重新计算PageRank值,则效率太低。

一种折中方案是:每抓取K个页面后,重新计算一次PageRank值。而对于已下载页面中分析出的链接,即暂时没有PageRank值的未知网页那一部分,先给未知网页一个临时的PageRank值,再将这个网页所有链接进来的PageRank值进行汇总,这样就形成了该未知页面的PageRank值,从而参与排序。以下图为例:

设k值为3,即每抓取3个页面后,重新计算一次PageRank值。

已知有{1,2,3}这3个网页下载到本地,这3个网页包含的链接指向待下载网页{4,5,6}(即待抓取URL队列),此时将这6个网页形成一个网页集合,对其进行PageRank值的计算,则{4,5,6}每个网页得到对应的PageRank值,根据PageRank值从大到小排序,由图假设排序结果为5,4,6,当网页5下载后,分析其链接发现指向未知网页8,这时先给未知网页8一个临时的PageRank值,如果这个值大于网页4和6的PageRank值,则接下来优先下载网页8,由此思路不断进行迭代计算。

5.OPIC策略

此算法其实也是计算页面重要程度。在算法开始前,给所有页面一个相同的初始现金(cash)。当下载了某个页面P之后,将P的现金分摊给所有从P中分析出的链接,并且将P的现金清空。对于待抓取URL队列中的所有页面按照现金数大小进行排序。

6.大站优先策略

对于待抓取URL队列中的所有网页,根据所属的网站进行分类。待下载页面数多的网站优先下载。

二、爬虫的基本流程
首先简单了解关于Request和Response的内容:

Request:浏览器发送消息给某网址所在的服务器,这个请求信息的过程叫做HTTP Request。

Response:服务器接收浏览器发送的消息,并根据消息内容进行相应处理,然后把消息返回给浏览器。这个响应信息的过程叫做HTTP Response。浏览器收到服务器的Response信息后,会对信息进行相应处理,然后展示在页面上。

根据上述内容将网络爬虫分为四个步骤:

1.发起请求:通过HTTP库向目标站点发起请求,即发送一个Request,请求可以包含额外的headers等信息,等待服务器响应。

常见的请求方法有两种,GET和POST。get请求是把参数包含在了URL(Uniform Resource Locator,统一资源定位符)里面,而post请求大多是在表单里面进行,也就是让你输入用户名和秘密,在url里面没有体现出来,这样更加安全。post请求的大小没有限制,而get请求有限制,最多1024个字节。

2.获取响应内容:如果服务器能正常响应,会得到一个Response,Response的内容便是所要获取的页面内容,类型可能有HTML,Json字符串,二进制数据(如图片视频)等类型。

3.解析内容:得到的内容可能是HTML,可以用正则表达式、网页解析库进行解析。可能是Json,可以直接转为Json对象解析,可能是二进制数据,可以做保存或者进一步的处理。

在Python语言中,我们经常使用Beautiful Soup、pyquery、lxml等库,可以高效的从中获取网页信息,如节点的属性、文本值等。

Beautiful Soup库是解析、遍历、维护“标签树”的功能库,对应一个HTML/XML文档的全部内容。安装方法非常简单,如下:

#安装方法
pips install beautifulsoup4#验证方法
from bs4 import BeautifulSoup

4.保存数据:如果数据不多,可保存在txt 文本、csv文本或者json文本等。如果爬取的数据条数较多,可以考虑将其存储到数据库中。也可以保存为特定格式的文件。

保存后的数据可以直接分析,主要使用的库如下:NumPy、Pandas、 Matplotlib。

NumPy:它是高性能科学计算和数据分析的基础包。

Pandas : 基于 NumPy 的一种工具,该工具是为了解决数据分析任务而创建的。它可以算得上作弊工具。

Matplotlib:Python中最著名的绘图系统Python中最著名的绘图系统。它可以制作出散点图,折线图,条形图,直方图,饼状图,箱形图散点图,折线图,条形图,直方图,饼状图,箱形图等。

三、爬虫简单实例

运行平台: Windows

Python版本: Python3.7

首先查看网址的源代码,使用google浏览器,右键选择检查,查看需要爬取的网址源代码,在Network选项卡里面,点击第一个条目可看到源代码。

第一部分是General,包括了网址的基本信息,比如状态 200等,第二部分是Response Headers,包括了请求的应答信息,还有body部分,比如Set-Cookie,Server等。第三部分是,Request headers,包含了服务器使用的附加信息,比如Cookie,User-Agent等内容。

上面的网页源代码,在python语言中,我们只需要使用urllib、requests等库实现即可,具体如下

import urllib.request
import socket
from urllib import error
try:response \= urllib.request.urlopen('https://www.python.org')print(response.status)print(response.read().decode('utf-8'))
except error.HTTPError as e:print(e.reason,e.code,e.headers,sep='\\n')
except error.URLError as e:print(e.reason)
else:
print('Request Successfully')

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/877444.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【电路笔记】-无源衰减器总结

无源衰减器总结 文章目录 无源衰减器总结1、概述2、L-型无源衰减器设计3、T-型无源衰减器设计4、桥接 T 型衰减器设计5、π型无源衰减器设计无源衰减器是一个纯电阻网络,可用于控制输出信号的电平。 1、概述 无源衰减器是一种纯电阻网络,用于削弱或“衰减”传输线的信号电平…

Element UI中报dateObject.getTime is not a function解决方法~

1、错误信息。 2、该报错原因是Element UI中日期组件的校验规则是type: "date",而一般我们从后台拿到的数据是字符串型的,不满足预期,就会报错。 3、解决方法。 去掉日子组件中的type: "date"校验规则即可。 rules: {newName: [{…

EasyCVR视频汇聚平台:深度解析GB/T 28181协议下的视频资源整合与应用

随着安防技术的快速发展和智慧城市建设的推进,视频监控系统作为公共安全、城市管理、企业运营等领域的重要基础设施,其重要性和应用范围不断扩大。在这一过程中,GB/T 28181作为国家标准中关于视频监控设备通信协议的规范,正逐渐受…

C2M商业模式分析与运营平台建设解决方案(四)

C2M商业模式以消费者需求驱动生产制造,实现个性化与效率的双赢。本解决方案将围绕构建智能化、数据驱动的运营平台,通过精准把握市场需求、优化生产流程、强化供应链管理,打造高效、敏捷、柔性的C2M运营体系,助力企业快速响应市场…

华为AR1220配置GRE隧道

1.GRE隧道的配置 GRE隧道的配置过程,包括设置接口IP地址、配置GRE隧道接口和参数、配置静态路由以及测试隧道连通性。GRE隧道作为一种标准协议,支持多协议传输,但不提供加密,并且可能导致CPU资源消耗大和调试复杂等问题。本文采用华为AR1220路由器来示例说明。 配置…

【电路笔记】-桥接 T 型衰减器

桥接 T 型衰减器 文章目录 桥接 T 型衰减器1、概述2、桥接 T 型衰减器示例 13、可变桥接 T 型衰减器4、完全可调衰减器5、可切换桥接 T 型衰减器Bridged-T 衰减器是另一种电阻衰减器设计,它是标准对称 T 垫衰减器的变体。 1、概述 顾名思义,桥接 T 形衰减器具有一个额外的电…

Cesium模型制作,解决Cesium加载glb/GLTF显示太黑不在中心等问题

Cesium模型制作,解决Cesium加载glb/GLTF显示太黑不在中心等问题 QQ可以联系这里,谢谢

Spring SSM框架--MVC

SSM框架–Mybatis 一、介绍 Spring 框架是一个资源整合的框架,可以整合一切可以整合的资源(Spring 自身和第三方),是一个庞大的生态,包含很多子框架:Spring Framework、Spring Boot、Spring Data、Spring…

C++高性能编程:ZeroMQ vs Fast-DDS发布-订阅模式下性能对比与分析

文章目录 0. 引言1. 目标:ZeroMQ与Fast-DDS性能对比2. ZeroMQ vs Fast-DDS - 延迟基准测试2.1 一对一发布-订阅延迟2.2 一对多发布-订阅延迟 3. ZeroMQ vs Fast-DDS - 吞吐量基准测试4. 方法论5. 结论6. 参考 0. 引言 高要求的分布式系统催生了对轻量级且高性能中间…

C#MVC返回DataTable到前端展示。

很久没写博客了,闭关太久,失踪人口回归,给诸位道友整点绝活。 交代下背景:要做一个行转列的汇总统计,而且,由于是行转列,列的数量不固定,所以,没法使用正常的SqlSugar框…

el-tree树状控件,定位到选中的节点的位置

效果图 在el-tree 控件加 :render-content"renderContent" 在掉接口的方法中 实际有用的是setTimeout 方法和this.$refs.xxxxxx.setCheckedKeys([industrycodeList]) if(res.data.swindustrylist.length>0){res.data.swindustrylist.forEach(item > {industry…

STM32之SPI读写W25Q128芯片

SPI简介 STM32的SPI是一个串行外设接口。它允许STM32微控制器与其他设备(如传感器、存储器等)进行高速、全双工、同步的串行通信。通常包含SCLK(串行时钟)、MOSI(主设备输出/从设备输入Master Output Slave Input&…

Linux系统编程 --- 多线程

线程:是进程内的一个执行分支,线程的执行粒度,要比进程要细。 一、线程的概念 1、Linux中线程该如何理解 地址空间就是进程的资源窗口。 在一个程序里的一个执行路线就叫做线程(thread)。更准确的定义是&#xff1…

聊聊场景及场景测试

在我们进行测试过程中,有一种黑盒测试叫场景测试,我们完全是从用户的角度去理解系统,从而可以挖掘用户的隐含需求。 场景是指用户会使用这个系统来完成预定目标的所有情况的集合。 场景本身也代表了用户的需求,所以我们可以认为…

SpringBoot+Vue在线商城(电子商城)系统-附源码与配套论文

摘 要 随着互联网技术的发展和普及,电子商务在全球范围内得到了迅猛的发展,已经成为了一种重要的商业模式和生活方式。电子商城是电子商务的重要组成部分,是一个基于互联网的商业模式和交易平台,通过网络进行产品和服务的销售。…

计算机图形学 | 动画模拟

动画模拟 布料模拟 质点弹簧系统: 红色部分很弱地阻挡对折 Steep connection FEM:有限元方法 粒子系统 粒子系统本质上就是在定义个体和群体的关系。 动画帧率 VR游戏要不晕需要达到90fps Forward Kinematics Inverse Kinematics 只告诉末端p点,中间…

Delphi5实现色板程序——滑块型组件实例

效果图 参考 Delphi程序设计基础:教程、实验、习题 代码 unit Unit1;interfaceusesSysUtils, WinTypes, WinProcs, Messages, Classes, Graphics, Controls,Dialogs, Forms,Form, Formprpt, ExtCtrls, StdCtrls;typeTForm1 class(MForm)Label1: TLabel;Label2: …

公式编辑器 -vue-formula-editor

前言 公式编辑旨在帮助用户使用可视化的前提,能便捷的使用平台,例如低代码平台使用广泛 vue-formula-editor vue-formula-editor是一款开源的Vue公式计算组件,可以帮助开发者快速集成公式编辑 在线体验 demo & 源码 安装 npm i vue-form…

[Python学习日记-9] Python中的运算符

简介 计算机可以进行的运算有很多种,但可不只加减乘除这么简单,运算按种类可分为算数运算、比较运算、逻辑运算、赋值运算、成员运算、身份运算、位运算,而本篇我们暂只介绍算数运算、比较运算、逻辑运算、赋值运算 算数运算 一、运算符描述…

FunHPC算力平台评测

作为内测老用户,已经用DeepLn平台(现改名为FunHPC平台)好久了,一路见证了平台从最初100多人的小群到现在满群的状态,FunHpc平台确实在一步步的走向成熟,一步步的变大。趁着现在活动的时间,发篇文…