Python爬虫的基本原理简介及内容汇总

news/2024/7/19 11:19:42 标签: python, 爬虫, 开发语言

Python爬虫的基本原理简介及内容汇总

  • 一、爬虫网页请求方法介绍
    • 1.1 网页主要请求方法
    • 1.2 网页的主要请求头
  • 二、爬虫网页响应方法介绍
    • 2.1 网页响应状态码
    • 2.2 网页响应头
    • 2.3 网页响应体
  • 三、提取网页响应的特定内容神器:xpath工具、lxml类库
    • 3.1 Xpath工具
    • 3.2 lxml类库
  • 四、Python爬虫实例——爬取网页文章信息

通过Python的requests库可以非常容易的实现简单爬虫。但是这种语言层面上的简单是建立在熟悉网页请求、网页响应原理的基础上的。因此,本文通过在简要介绍网页请求、网页响应原理的基础上,采用Python的requests库实现几个简单的爬虫示例。

一、爬虫网页请求方法介绍

1.1 网页主要请求方法

1、常用网页请求方法简介

方法描述
GET请求页面,并返回页面内容
HEAD类似于GET请求,只不过返回的响应中没有具体内容,主要用于获取报头
POST大多用于提交表单上传文件,数据包含在请求体
PUT从客户端向服务器传送的数据取代指定文档中的内容
DELETE请求服务器删除指定的页面
CONNECT把服务器当作跳板,让服务器代替客户端访问其他网页
OPTIONS允许客户端查看服务器的性能
TRACE回显服务器收到的请求,主要用于测试诊断

其中,GETPOSTPUTDELETE是经常使用的网页请求方法,尤其是在做网站开发或者小程序app开发时。

2、requests库的GET请求方法示例

采用Python的requets库,通过下面四条代码就实现了爬取指定网页内容。这里需要留意如何设置网页头部信息headers

python">import requests

# (1)得到需要爬取的网址url
url = 'https://blog.csdn.net/weixin_37926734/article/details/123267870?spm=1001.2014.3001.5501'

# (2)添加头部信息,以字典形式存储。
#  如果不添加头部信息,爬取不到网页内容
headers = {
	'User-Agent' :
	'Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:98.0) Gecko/20100101 Firefox/98.0'
}

# (3)使用requests库的get函数爬取网页上的内容
requests_exam = requests.get(url, headers=headers)

获取想要爬取网页的头部信息方法:打开想要爬取的网页,按下F12,弹出了该网页的Web开发者工具,选择网络,然后选取一个状态为200的网页,再点击所有中的信息头,找到User-Agent后面的内容就是网页的头信息,如下图所示:

在这里插入图片描述

1.2 网页的主要请求头

另外,请求网址是统一资源定位符URL,它可以唯一确定我们请求的资源。因此,我们在爬虫的时候,接触非常多的就是URL。与URL密切相关的是网页的请求头,即HTTP头字段,下面列出与Python爬虫密切相关的几个:

请求头描述
Accpet告诉WEB服务器自己接收什么介质类型,比如/表示任何类型,而type/*表示该类型下所有子类型(type/sub-type
Accpet-Language用于浏览器申明接收的语言
Accpet-Encoding接收字符集:用于浏览器申明自己接收的编码方法,通常指定压缩方法、是否支持压缩以及支持什么压缩方法
Host客户端指定自己想要访问的WEB服务器的域名/IP地址和端口号,比如Host: editor.csdn.net
Cookie用于保存客户端中简单的文本文件,这个文件与特定的Web文档关联在一起,保存了客户端访问该Web文档时的信息,当客户端再次访问这个Web文档时候可供再次使用
Referer浏览器WEB服务器表明自己是从哪个网页URL,获得/点击当前请求中的网站/URL。例如,Refer:https://mp.csdn.net/
User-Agent浏览器表明自己的身份(是哪种浏览器),即浏览器的指纹信息。例如:Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:98.0) Gecko/20100101 Firefox/98.0

二、爬虫网页响应方法介绍

网页响应,即由服务端返回给客户端,可分为三部分:响应状态码(Response Statues Code)、响应头(Response Headers)和响应体(Response Body)。

2.1 网页响应状态码

响应状态码表示服务器的响应状态,在爬虫中,我们可以根据状态码来判断服务器响应状态,来作出相应的网页操作。下面列出网络响应错误代码及产生错误的原因:

状态码说明详情
100继续请求者应当继续提出请求。服务器已收到请求的一部分,正在等待其余部分
101切换协议请求者已要求服务器切换协议,服务器已确认并准备切换
200成功服务器已成功处理请求
201已创建请求成功并且服务器创建了新的资源
202已接受服务器已接受请求,但尚未处理
203非授权信息服务器已成功处理了请求,但返回的信息可能来自另一个源
204无内容服务器成功处理了请求,但没有返回任何内容
205重置内容服务器成功处理了请求,内容被重置
206部分内容服务器成功处理了部分请求
300多种选择针对请求,服务器可执行多种操作
301永久移除请求的网页已永久移动到新位置,即永久重定向
302临时移动请求的网页暂时跳转到其他页面,即暂时重定向
303查看其他位置如果原来的请求是POST,重定向目标文件文档应该通过GET提取
304未修改此次请求返回的网页未修改,继续使用上次的资源
305使用代理请求者应该使用代理访问该网页
307临时重定向请求的资源临时从其他位置响应
400错误请求服务器无法解析该请求
401未授权请求没有进行身份验证或验证未通过
403禁止访问服务器拒绝此请求
404未找到服务器找不到请求的网页
405方法禁用服务器禁用了请求中指定的方法
406不接受无法使用请求的内容响应请求的网页
407需要代理授权请求需要代理授权
408请求超时服务器请求超时
409冲突服务器在完成请求时发生冲突
410已删除请求的资源已永久删除
411需要有效长度服务器不接受不含有有效长度标头字段的请求
412未满足前提条件服务器未满足请求者在请求中设置的其中一个前提条件
413请求实体过大请求实体过大,超出服务器的处理能力
414请求URL过长请求网址过长,服务器无法处理
415不支持类型请求格式不被请求页面支持
416请求范围不符页面无法提供请求的范围
417未满足期望值服务器未满足期望请求标头字段的要求
500服务器内部错误服务器遇到错误,无法完成请求
501未实现服务器不具备完成请求的功能
502错误网关服务器作为网关或代理,从上游服务器收到无效响应
503服务器不可用服务器目前无法使用
504网关超时服务器作为网关或代理,但是没有及时从上游服务器收到请求
505HTTP版本不支持服务器不支持请求中所用的HTTP协议版本

2.2 网页响应头

响应头包含服务器对请求的应答信息,比如Content-TypeServerSet-Cookie等,下面列出一些常用的网页响应头:

响应头描述
Date标识响应产生的时间
Last-Modified指定资源的最后修改时间
Content-Encoding指定响应内容的编码
Server包含服务器的信息,比如名称、版本等信息
Content-Type文档类型,指定返回的数据类型,比如,text/html表示返回HTML文档,application/x-javascript表示返回JavaScript文件,image/jpeg表示返回图片
Set-Cookie设置Cookie,指定浏览器需要将此内容放到Cookies中,下次请求携带Cookies请求
Expires指定响应的过期时间,可以使用代理服务器或者浏览器将要加载的内容更新到缓存中。如果再次访问时,就可以直接从缓存中加载

2.3 网页响应体

爬虫中的网页响应中最重要的就是响应体:网页响应的正文数据就是在响应体中。比如,在请求网页时,响应体就是网页的HTML代码;请求一张图片时,响应体就是图片的二进制数据。做网页请求网页时,我们要解析的内容就是响应体

三、提取网页响应的特定内容神器:xpath工具、lxml类库

3.1 Xpath工具

Xpath(XML Path Language)是一门XML文档中查找信息的语言,同时它也可以搜索HTML文档。Xpath可用来在XML或者HTML文档中对元素和属性进行遍历。Xpath使用路径表达式子XML文档中进行导航,所以我们可以使用Xpath工具访问网页中指定的内容。
XPath 含有超过 100 个内建的函数。这些函数用于字符串值、数值、日期和时间比较、节点和 QName 处理、序列处理、逻辑值等等。另外,在 XPath 中,有七种类型的节点:元素、属性、文本、命名空间、处理指令、注释以及文档节点(或称为根节点)。
幸运的是,在本文Python爬虫中的应用,我们目前还不必过多的关注Xpath的细节,我们只需要了解它的一些基本概念,会运用Firefox网页指定内容Xpath路径表达式提取方法即可,比如我们想从一个博客文档中提取标题的Xpath路径表达式的方式如下图:

在这里插入图片描述
如上图所示,打开选定的文章博客网页,按F12打开Firefox的Web开发者工具,点击查看器 → \to 选取页面中元素,然后点击网页上的标题,点击鼠标右键,在下拉菜单中选取复制 → \to Xpath,就得到了网页文章博客标题的Xpath路径表达://*[@id="articleContentId"],这个路径表达式是一个网页元素对象,我们如果想爬取标题的文本文件还需要指明Xpath具体读取文本内容://*[@id="articleContentId"]/text()

3.2 lxml类库

lxml类库是一个HTML/XML解析器,用于解释和提取HTML/XML数据。它可以利用Xpath语法来定位网页上特定的元素和节点信息。在实际应用中,lxml解析器会自动修复和补全HTML代码中不规范、不完整的代码,从而提高开发效率。
本下面的提取文档标题的Python爬虫编程中,主要使用lxml类库的解析字符串HTML代码块的功能:
假设我们有一个text的字符串格式HTML代码块,我们可以使用如下语句将text转换为HTML格式对象:

python">from lxml import etree

# 定义一个text的字符串格式HTML代码块
text = '''
<div>
    <ul>
        <li class="item-inactive"><a href="link.html">Item</a></li>
    </ul>
</div>
'''

# 将字符串text解析为html格式的对象
html = etree.HTML(text)
print(html)

# 同样的,我们还可以使用etree的tostring方法,
# 将HTML格式对象转换为字符串格式
result = etree.tostring(html).decode('utf-8')
print(result)

上面代码的两个print输出结果如下所示:

在这里插入图片描述

四、Python爬虫实例——爬取网页文章信息

本文Python爬虫主要包括以下三个步骤:
(1)找地址、(2)发送网页请求、(3)提取网页响应。

代码及解释如下所示:

python">import requests
from lxml import etree

# 该示例展示如何提取三篇博客文章的标题

# 创建一个向网页发出请求的函数:
def url_request():
	'''1、找地址的主要内容包括:
				1.1 找网址
				1.2 添加头文件'''
	# 1.1 找网址
	# 首先创建地址列表,下面网页的地址分别对应
	# 3篇不同的网页文章网络地址。
	url_list = [
			# 我的CSDN文章1:Docker入门:镜像分层概念简述
			'https://blog.csdn.net/weixin_37926734/article/details/123267870?spm=1001.2014.3001.5501',
			# 我的CSDN文章2:Docker入门:容器卷——容器持久化,实现容器间继承和数据共享
			'https://blog.csdn.net/weixin_37926734/article/details/123278466?spm=1001.2014.3001.5501',
			# 我的CSDN文章3:Docker入门:私有库(Docker Registry)简介及使用方法(防踩坑)
			'https://blog.csdn.net/weixin_37926734/article/details/123279987?spm=1001.2014.3001.5501'
	]

	# 1.2 添加头文件
	# 添加头部信息,以字典形式存储。
	# 对于同一台电脑同一个浏览器,3篇
	# 文章的头部信息一样。
	headers = {
		'User-Agent':
		'Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:98.0) Gecko/20100101 Firefox/98.0'
	}
	
	'''发送网页请求、提取网页响应、数据入库,均在以下的for循环中实现:'''
	for url in url_list:
		'''2、发送网页请求:使用get网页请求方法,
			对网页发出请求,并返回网页内容'''
		res = requests.get(url, headers=headers)

		'''3、提取网页响应主要内容:
				3.1 提取网页的html元素对象
				3.2 提取网页中特定位置的元素对象'''
		# 使用解析器lxml中的etree提取网页的html元素对象
		html = etree.HTML(res.text)
		# 使用xpath工具提取网页html元素中的标题元素对象
		title = html.xpath('//*[@id="articleContentId"]/text()')

		# 查看输出结果
		print(title)

# 调用函数,执行代码,实现找地址与发送请求
url_request()

执行上面的代码,输入结果如下所示:

在这里插入图片描述


http://www.niftyadmin.cn/n/844800.html

相关文章

Swift加法计算器

2019独角兽企业重金招聘Python工程师标准>>> // // ViewController.swift // Swift加法计算器 // // Created by hehongbo on 16/8/31. // Copyright © 2016年 hhb. All rights reserved. //import UIKitclass ViewController: UIViewController {var numt…

java对象内存_一个Java对象到底占用多大内存?

最近在调研MAT和VisualVM源码实现&#xff0c;遇到一个可疑问题&#xff0c;两者计算出来的对象大小不一致&#xff0c;该信哪个&#xff1f;为了复现这个问题&#xff0c;准备了4个简单类&#xff1a;class AAAAA {}class BBBBB {int a 1;}class CCCCC {long a 1L;}class DD…

Ubuntu系统下Python的虚拟环境搭建方法简介:venv、virtualenv、pipenv

Python进阶&#xff1a;Ubuntu系统下Python的venv轻量级虚拟环境搭建简介一、Python虚拟环境的作用及创建方法简介1.1 创建虚拟环境的必要性1.2 venv、virtualenv、pipenv三种创建虚拟环境方法比较二、venv搭建虚拟环境2.1 venv虚拟环境创建最简单的例子2.2 熟悉而陌生的pip2.2…

Emacs入门:重要的基本概念、基本读写操作以及一些常用的快捷键

Emacs入门&#xff1a;重要的基本概念、基本读写操作以及一些常用的快捷键一、Emacs相关的基本概念二、Emacs缓冲区简介2.1 Emacs常用缓冲2.2 Emacs缓冲区的切换方法三、Emacs基本读写操作四、Emacs常用快捷键汇总一、Emacs相关的基本概念 如上图所示&#xff0c;Emacs包含的主…

Python一课一练(1)

2019独角兽企业重金招聘Python工程师标准>>> “No Module Named或者ImportError类的错误”&#xff0c;基本都是由于循环嵌套导致&#xff0c;建议把继承关系的子类和父类放到一个py文件里。 错误示例&#xff1a; 我们写两个类文件&#xff0c;一个父类room.py&…

myeclipse中java类里面写代码没有提示解决办法

2019独角兽企业重金招聘Python工程师标准>>> 不是说按了代码提示不出提示框&#xff0c;而是出了提示框后里边没有提示的内容 1、菜单window->Preferences->Java->Editor->Content Assist->Enable auto activation 选项要打上勾 2、window->Prefe…

高性能mysql笔记索引_高性能Mysql笔记 — 索引

index优化对于频繁作为查询条件的字段使用索引注意索引字段类型的隐式转换&#xff0c;数据库类型和应用类型要一致索引的种类唯一索引&#xff0c;成为索引的列不能重复单列索引&#xff0c;一个索引只包含一列单列前缀索引&#xff0c;有些列较长&#xff0c;不宜使用全长作为…

Mathematica 操作笔记

2019独角兽企业重金招聘Python工程师标准>>> 1、画图 画出坐标、函数图像及其渐近线&#xff0c;打开Mathematica 11后&#xff0c;输入两个后自动联网调用Worlfram Alpha&#xff0c;然后输入命令&#xff1a; asymptote of (x^2-2*x4)/(x-2) 即可得出图像&#x…