【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…

人体姿态估计和手部姿态估计任务中神经网络的选择

一、人体姿态估计任务适合使用卷积神经网络(CNN)来解决。 人体姿态估计任务的目标是从给定的图像或视频中推断出人体的关节位置和姿势。这是一个具有挑战性的计算机视觉任务,而CNN在处理图像数据方面表现出色。 使用CNN进行人体姿态估计的一种…

Uniapp 中,能够同时兼容H5、web、app、微信小程序的引入高德地图的语法格式

在 Uniapp 中&#xff0c;可以通过使用 uni-app 统一的 API 来同时兼容 H5、web、App 和微信小程序&#xff0c;而引入高德地图则有以下两种语法格式供选择&#xff1a; 使用 Vue.js 的语法格式&#xff1a; <template><view><map :longitude"longitude&…

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

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

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

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

LeetCode 0318. 最大单词长度乘积

【LetMeFly】318.最大单词长度乘积 力扣题目链接&#xff1a;https://leetcode.cn/problems/maximum-product-of-word-lengths/ 给你一个字符串数组 words &#xff0c;找出并返回 length(words[i]) * length(words[j]) 的最大值&#xff0c;并且这两个单词不含有公共字母。如…

FastDFS整合nginx

从您提供的步骤来看&#xff0c;FastDFS整合nginx的过程包括准备工作、安装FastDFS的nginx模块、配置nginx以及启动nginx服务。接下来我将基于您提供的信息对步骤进行修改和补充&#xff0c;以确保更加清晰易懂。 1. 安装前配置fastdfs-nginx-module 1.1 上传并解压fastdfs-n…

数据结构实验二停车场

内容仅供个人复习 *设停车场内只有一个的停放 n 辆汽车的狭长通道&#xff0c;且只有一个大门可供汽车进出。汽车 在停车场内按车辆到达时间的先后顺序&#xff0c;依次由北向南排列&#xff08;大门在最南端&#xff0c;最先到达的第 一辆车停放在车场的最北端&#xff09;&am…

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

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

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

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

ES 报错问题汇总

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

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

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

lvs dr+keepalived

基于keepalived(主从双主) LVS(DR模型) DNS实现http高可用集群 keepalived高可用主机IP&#xff1a;172.21.5.22和172.21.5.21 http服务高可用主机IP&#xff1a;172.21.5.16和172.21.5.18 VIP采用172.16.32.5 各虚拟机及主机名和IP对应关系如下所示&#xff1a; 虚拟机主机…

Java中使用 MD5 工具进行对密码进行加密

基于MD5 的双重加密 package com.goods.springbootmybatisgoods.util;import java.security.MessageDigest; import java.security.NoSuchAlgorithmException;/*** MD5加密工具类*/ public class MD5Util {/*** 生成盐值* param source 需要加密的字符串* return 加密后的字符…

机器学习概论

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

牛客网 CM11.链表分割

目录 1.解题思路2.代码实现 1.解题思路 此题目思路相对简单&#xff0c;利用双指针&#xff0c;一个指针指向小于val的&#xff0c;一个指针指向大于等于val的&#xff0c;但实现起来&#xff0c;如果仅仅使用单链表&#xff0c;那么还需特别判断第一个指针是否为空从而特意做…