【Python语言速回顾】——爬虫基础知识

目录

一、爬虫概述

1、准备工作

2、爬虫类型

3、爬虫原理

二、爬虫三大库

1、Requests库

2、BeautifulSoup库

3、Lxml库


一、爬虫概述

爬虫又称网络机器人,可以代替人工从互联网中采集、整理数据。常见的网络爬虫主要有百度公司的Baiduspider、360公司的360Spider、搜狗公司的Sogouspider、微软的Bingbot等。

1、准备工作

爬取一个站点之前,需要大致了解站点规模和结构。站点自身的robots.txt和sitemap文件都能为我们提供帮助。
①robots文件:一般大部分站点会自定义自己的robots文件,以便引导爬虫按照自己的意图爬取相关数据。robots文件能使我们了解该站点的限制条件,提升爬取成功率;也可了解到站点结构,使我们有针对性地设计程序。
②sitemap文件:呈现了整个站点的组成结构,可根据需求定位需要的内容;但是该文件可能存在更新不及时或不完整的情况。
③估算站点规模:目标站点的大小会影响爬取的效率,通常可通过百度搜索引擎百度搜索引擎site关键字过滤域名结果,获取相关
统计信息(如在www.baidu.com搜索框输入“site:目标站点域名”)

2、爬虫类型

按照实现的技术和结构可分为通用网络爬虫、聚焦网络爬虫、增量式网络爬虫、深层网络爬虫。实际的网络爬虫系统是由它们组成的。
①通用网络爬虫:又称全网爬虫,主要由初始URL集合、URL队列、页面爬行模块、页面分析模块、页面数据库、链接过滤模块构成。其获取的目标资源在整个互联网中,目标数据量庞大,爬行范围广泛,对性能的要求较高,主要用在大型搜索引擎(如百度搜索),应用价值较高。
②聚焦网络爬虫:又称主题网络爬虫,主要由初始URL集合、URL队列、页面爬行模块、页面分析模块、页面数据库、链接过滤模块、内容评价模块、链接评价模块构成。按照预先设定的主题在一定范围内爬取,对于网络的带宽资源及服务器资源要求较低,主要用于特定信息的获取。
③增量式网络爬虫:主要由本地页面URL集合、待爬行URL集合、本地页面集、爬行模块、排序模块、更新模块构成。对已下载网页采取增量式更新和只爬行新产生的或者已经发生变化网页的爬虫。与周期性爬行和刷新页面的爬虫相比,增量式网路爬虫只会在需要的时候爬取新产生或发生更新的页面,并不重新下载没有发生变化的页面,可有效减少数据下载量,减少时间和空间上的浪费,但增加了算法难度。
④深层网络爬虫:主要由URL列表、LVS列表、爬行控制器、解析器、LVS控制器、表单分析器、表单处理器、响应分析器构成,其中LVS是指标签/数据集合,用来表示填充表单的数据源。用于爬取互联网深层页面的爬虫程序,与通用爬虫相比,深层页面的爬取需要想办法自动填充对应的表单,因而,深层网络爬虫的核心在于表单的填写。

3、爬虫原理

不同爬虫程序的原理不尽相同,但是都有“共性”,下面用一个通用爬虫网络的结构来说明爬虫的基本工作流程。
 

①按照预定主题,选取一部分精心挑选的种子URL
②将种子URL放入待抓取的URL队列中
③从待抓取URL队列中依次读取种子URL,解析其对应的DNS,并得到对应的主机IP,将URL对应的网页下载下来,并存入已下载网页数据库中,随后将已访问的种子URL出队,放入已抓取URL队列中。
④分析已抓取队列中的URL,从已下载网页数据中分析出其他的URL,并和已抓取的URL进行重复性比较。最后,将去重过的URL放入待抓取的URL队列中,重复③④操作,直到待抓取URL队列为空。

二、爬虫三大库

Python爬虫有三个比较实用的库:Requests、BeautifulSoup和Lxml,为我们编写爬虫程序提供很大支持。

1、Requests库

安装:

pip install requests

Requests库主要有7种主要方法:
①requests.get(‘域名’)方法主要用于获取HTML网页,相当于HTTP的GET。返回对象response的常用属性如下:

r.status_code:HTTP请求的返回状态,200表示链接成功,404表示失败。
r.text:HTTP响应内容的字符串形式,即url对应的页面内容。
r.encoding:从HTTP header中猜测的响应内容编码方式。
r.apparent_encoding:从内容中分析出的响应内容的编码方式。
r.content:HTTP响应内容的二进制形式。

②requests.head(‘域名’)方法主要用于获取HTML网页头部信息,相当于HTTP的HEAD。返回对象也是response
③requests.post(‘域名’,data=xxx)方法主要用于向HTTP网页提交POST请求,相当于HTTP的POST,xxx可以使字典名或字符串。返回对象也是response
④requests.put(‘域名’,data=xxx)方法主要用于向HTTP网页提交put请求,相当于HTTP的PUT,xxx可以使字典名或字符串。
⑤requests.patch(‘域名’,data=xxx)方法主要用于向HTTP网页提交局部修改请求,相当于HTTP的PATCH。
⑥requests.delete('域名')方法主要用于向HTTP页面提交删除请求,相当于HTTP的DELETE。
⑦requests.requests(method,url,**kwargs)方法主要用来构造一个请求,支撑①~⑥各个基础方法。
其中method是指请求方式,对应get()、put()等方法,例如’GET‘、’PUT‘;url为目标页面的url链接地址;**kwargs代表控制访问参数,共13个。

爬取定向网页的通用代码框架
下面的示例有利于使大家按照统一的编程风格编写程序,提高通用代码的可读性:

import requests
def getHTMLText(url):try:r = requests.get(url,timeout = 30)r.raise_for_status() #如果状态码不是200,引发HTTPError异常r.encoding = r.apparent_encodingreturn r.textexcept:return "产生异常"
if __name__ == "__main__":  #限定getHTMLText()只在所定义的文件中执行url = "https://www.baidu.com/"print(getHTMLText(url))          

                                                                                                                                  

2、BeautifulSoup库

BeautifulSoup是一个用Python编写的HTML/XML的解释器,可处理不规范标记并生成剖析树,并提供导航、搜索、修改剖析树的操作。下面主要介绍如何使用该库处理不规范标记,按照指定格式输出对应文档。
安装:

pip install beautifulsoup4

基本操作:
①创建BeautifulSoup对象                                                                                                                    通过soup对象格式化函数prettify可格式化输出soup对象中的内容,该函数是分析HTML文档的第一步。
②BeautifulSoup库的对象
BeautifulSoup库用于将一个复杂HTML文档转化为一个复杂的树形结构,每个节点都是一个Python对象,据功能该库的对象分为4类:
Tag对象:得到标签内容
NavigableString对象:获取标签内部的文字用.string
BeautifulSoup对象:可当作特殊的Tag对象,表示一个文档全部内容
Comment对象:可当作特殊的NavigableString对象,输出实际内容仍不包括注释符号
③遍历文档
搜索文档树的find_all()方法:fand_all(name,attrs,recursive,text,**kwargs)

3、Lxml库

Lxml库是另一种高效的网页解析库,速度比BeautifulSoup快。
安装:

pip install lxml


基本操作:

略(用到了再具体来补充学习)

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

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

相关文章

自动驾驶算法(七):基于遗传算法的路径规划(下)

目录 1 遗传选择 2 遗传交叉 3 遗传变异 4 结语 1 遗传选择 我们书接上回,我们完成了种群的初始化,将所有的种群放入了new_pop1中,这个new_pop1是一个(种群大小 * 路径)的一个矩阵,我们来看如何进行遗传…

Java面向对象(进阶)-- super关键字的使用与子类对象实例化全过程

文章目录 一、super关键字的使用(1)为什么需要super?(2)super的理解(3)super可以调用的结构1、super调用方法举例1举例2举例3小结 2、super调用属性举例1举例2举例3小结 3、super调用构造器引入…

el-tree中展示项换行展示

文章目录 效果如下所示:没有换行展示的效果修改样式换行之后的展示效果 想要了解el-tree使用的详情往下看代码和数据如下所示Vue代码中可能使用到的数据如下Vue的代码如下:没有换行展示的效果换行之后的展示效果样式调试 效果如下所示: 没有…

数据库的备份和恢复

备份:完全备份,增量备份 完全备份:将整个数据库完整的进行备份 增量备份:在完全备份基础的之上,对后续新增的内容进行备份 备份的需求 1生产环境中,数据的安全性至关重要,任何数据都可能产生非…

【计算机架构】程序指令计数 | 功耗计算 | 电力功耗 | 安德尔定律(Amdahl‘s Law)

0x00 程序的指令计数 程序的指令计数(Instruction Count)由程序本身、ISA(指令集架构)和编译器决定。这表示一个程序中包含的指令数量受到程序编写方式、计算机体系结构和编译器的影响。 每条指令的平均周期数(Averag…

在云上jupylab(codelab)常用的shell命令

1、切换当前文件目录位置: %cd /project/train/ 2、删除目标文件夹和文件夹下面的内容,注意这个r是不能少的: !rm -r /project/train/src_repo/dataset 3、创建数据集相关文件夹 !mkdir /project/train/src_repo/dataset 4、复制指定…

想学计算机编程从什么学起?零基础如何自学计算机编程?中文编程开发语言工具箱之渐变标签组构件

想学计算机编程从什么学起?零基础如何自学计算机编程? 给大家分享一款中文编程工具,零基础轻松学编程,不需英语基础,编程工具可下载。 这款工具不但可以连接部分硬件,而且可以开发大型的软件,…

linux硬盘挂载(linux 修改某个磁盘挂载到新目录\lvm扩容)

文章目录 一、什么是硬盘挂载二、linux 修改某个磁盘挂载到新目录三、Esxi下扩容硬盘1. 判断一个已有的文件系统是否使用了LVM(逻辑卷管理)2. 原本文件系统没有使用lvm,还可以lvm扩容吗?3. 原有文件系统使用lvm场景下扩容(lvm扩容)了解LVMEsxi LVM扩容步…

NOIP2000提高组第二轮T4:方格取数

题目链接 [NOIP2000 提高组] 方格取数 题目描述 设有 N N N \times N NN 的方格图 ( N ≤ 9 ) (N \le 9) (N≤9),我们将其中的某些方格中填入正整数,而其他的方格中则放入数字 0 0 0。如下图所示(见样例): 某人从图的左上…

ES 报错问题汇总

报错1: curl -XGET http://192.168.56.115:9200/_license解决方式 在 es/config/elasticsearch.yml文件,把开启密码验证把此处也修改成false xpack.security.enabled: false 报错2: 解决方式: 查看服务器es的license信息,发现 …

用「埋点」记录自己,不妄过一生

最近有朋友问我「埋点怎么做」,给朋友讲了一些互联网广告的案例,从源头的数据采集讲到末尾的应用分析和流量分配等(此处省略N多字) 解释完以后,我想到一个问题:有了埋点可以做分析,那我们对自己…

机器学习概论

一、机器学习概述 1、机器学习与人工智能、深度学习的关系 人工智能:机器展现的人类智能机器学习:计算机利用已有的数据(经验),得出了某种模型,并利用此模型预测未来的一种方法。深度学习:实现机器学习的一种技术 2…

yum

什么是yum? Linux中我们也要进行工具/指令/程序,安装,检查卸载等,需要yum的软件 安装软件的方式: 1.源代码安装--交叉编译工作 2.rpm包直接安装 3.yum / apt-get yum:yum是我们linux预装的一个指令,搜索&#x…

【数据结构】顺序表和链表

顺序表和链表 1.线性表 线性表(linear list)是n个具有相同特性的数据元素的有限序列。 线性表是一种在实际中广泛使用的数据结构,常见的线性表:顺序表、链表、栈、队列、字符串… 线性表在逻辑上是线性结构,也就说是连…

uniapp 省市区三级联动选择器

还有半个小时下班,总想着发点光亮照耀他人。IT技术这东西,尤其是UI方面的东西,于用户体验至关重要,想想最近使用uni-data-picker的丑陋页面,自己重构了这个功能,新加实现,效果图如下&#xff0c…

SRC实战 | CORS跨资源共享漏洞

CORS跨资源共享 跨源资源共享 (CORS) 是一种浏览器机制,允许网页使用来自其他页面或域的资产和数据。 大多数站点需要使用资源和图像来运行它们的脚本。这些嵌入式资产存在安全风险,因为这些资产可能包含病毒或允许服务器访问黑客。 CORS响应头 CORS通…

类(class)

类是 C中一个非常重要的元素,可以说是 C的灵魂所在了,我们都知道 C说一种面向对象的编程语言,那么面向对象是一种什么概念呢?在 C程序设计中,所有一切东西都可以称之为对象,任何对象都应该具有属性和行为。…

C++基础——类与对象

1 概述 C是面向对象的语言,面向对象语言三大特性:封装、继承、多态。 C将万事万物抽象为对象,对象上有其属性和行为。 2 封装 2.1 封装的意义 封装是面向对象的三大特性之一,封装将属性和行为作为一个整体,对属性和…

灵活调整宣传策略,媒体发稿和新闻发布的优势所在

企业在当今信息爆炸的时代,要想在市场竞争中脱颖而出,提高公信力是至关重要的。而媒体发稿和新闻发布是提升企业公信力的重要手段之一。下面将从门户网站的权威展示、搜索引擎排名的提升、内容的持续稳定有效性、内容的可改性以及协助增加网站流量等方面…

浅谈自动化测试框架开发

📢专注于分享软件测试干货内容,欢迎点赞 👍 收藏 ⭐留言 📝 如有错误敬请指正!📢交流讨论:欢迎加入我们一起学习!📢资源分享:耗时200小时精选的「软件测试」资…