【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.hqwc.cn/news/156326.html

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

相关文章

AI赋能,轻松出爆文!AI新闻创作新时代,你准备好了吗?

众所周知,传统新闻报道需要大量的人工参与,不仅耗时耗力,还对媒体工作者的文字功底和知识积累有很高的要求。但随着人工智能技术的发展,大模型在新闻写作领域展现出强大的潜力。通过AI写作技术,在很大程度上实现了新闻…

苹果AirTag平替产品选择,国内外支持苹果Find My芯片功耗全面对比

2021年4月20,苹果在春季产品发布会上推出了全新的产品类型- AirTag,将哆啦A梦的追踪徽章带到了现实。这个小产品当年并没有像其它苹果新品那样一朝爆红。随着年轮缓缓而坚定地前行, AirTag也缓缓而坚定地前行,并被越来越多的人接受和喜欢。 深入思考AirTag背后的产品逻辑和实现…

在ros中 两个摄像头

欧最后有了一个需求,需要在ros中接两摄像头,完成后写一下步骤。 以下是我的设备, 通过一个3.0的转接头来连接两个摄像头, 首先,通过下面的命令 ls /dev/video* //插上摄像头后打开终端查看是否检测到摄像头 我这…

Spring系列之基础

目录 Spring概述 Spring的优点 Spring Framework的组成 总结 Spring概述 Spring 是目前主流的 Java Web 开发框架,是 Java 世界最为成功的框架。该框架是一个轻量级的开源框架,具有很高的凝聚力和吸引力。它以Ioc(控制反转)和…

做好团队沟通和协调 不可忽略的5个重点

做好团队的沟通和协调,可以确保成员之间及时交流、分享信息和解决问题。这有助于避免信息滞后和工作冲突,提高工作效率。如果沟通不顺畅,往往导致成员间信息传递不及时或遗漏,容易产生误解和冲突,影响项目进度地顺利开…

java--方法在计算机中的执行原理

1.方法在计算机中的执行原理 方法被调用的时候,是进入到栈内存中运行 栈:是先进后出的,后面进去的方法会先进去,用完里面的方法就会弃掉 例如:现在有三个方法,分别是方法A、方法B、方法C 先加载main方法…

不一样的网络协议-------KCP协议

1、kcp 的协议特点 1.1、RTO 不翻倍 RTO(Retransmission TimeOut),重传超时时间。tcp x 2,kcp x 1.5,提高传输速度 1.2、选择重传 TCP丢包时会全部重传从该包开始以后的数据,而KCP选择性重传,只重传真正丢失的数据包…

Flask Run运行机制剖析

一、前言 已经玩了一段时间Flask ,每次调用app.run(或flask run)就可以启动应用,今天我们就来了解一下run背后究竟做了些什么事情。 注:通过上面几行代码就可以启动一个Flask服务器,打开浏览器输入http://127.0.0.1:5000, 页面上…

WSL2 Ubuntu安装CUDA Toolkit

目前CUDA ToolKit需要切换到WSL2,在WLS1下不支持。之前折腾了很久,才从WSL1的坑中爬出来,仅写此文避免大家再从坑里走一次。 Windows WSL2相关 检查正在运行的 WSL 版本 可列出已安装的 Linux 发行版,并通过在 PowerShell 或 W…

【力扣】2127. (分类讨论 + 拓扑排序)参加会议的最多员工数

【力扣】2127. (分类讨论 拓扑排序)参加会议的最多员工数 文章目录 【力扣】2127. (分类讨论 拓扑排序)参加会议的最多员工数1. 题目介绍2. 思路(**分类讨论 拓扑排序**)3. 解题代码4. Danger参考 1. 题…

干货分享 | 一分钟带你了解TSMaster小程序编辑代码智能提示功能

本文给大家带来TSMaster小程序编辑的新功能,其中主要包含:代码编辑智能提示功能、可用外部代码编辑器编辑小程序代码并同步。 本文关键字:C小程序、Python小程序、代码智能提示、外部代码编辑器、Visual Studio 目录/Catalog ● TSMaster的…

急诊医学科常用评估量表汇总,建议收藏!

根据急诊医学科医生的量表使用情况,笔者整理了10个急诊医学科常用量表,可在线评测直接出结果,可转发使用,可生成二维码使用,可创建项目进行数据管理,有需要的小伙伴赶紧收藏! 1.急性生理学与慢性…