Python应用的领域有很多,对于爬虫这一块,掌握基本的知识之后再去看相对应的爬虫项目,也会很快上手
Python爬虫是一种利用Python编程语言编写的程序,用于从互联网上获取信息
爬虫通常用于网页抓取、数据挖掘、信息监控等领域
以下是Python爬虫的基本知识:
-
HTTP协议与请求发送:
~ HTTP(Hypertext Transfer Protocol)是用于传输超文本的应用层协议,Python爬虫通过发送HTTP请求来获取网页内容
~ 使用Python中的库(如requests、urllib等)可以发送HTTP请求并获取响应 -
HTML解析:
爬虫通常需要从网页中提取信息,因此需要解析HTML文档,使用解析库(如Beautiful Soup、lxml等)可以帮助解析HTML,并提取所需的数据 -
数据存储:
爬虫获取的数据通常需要存储到本地或数据库中供后续处理和分析使用,可以使用文件操作、数据库(如MySQL、MongoDB等)或者其他存储方式来保存数据 -
反爬机制:
~ 网站通常会采取反爬虫措施,如设置验证码、限制IP访问频率等,因此爬虫需要应对这些限制。
~ 使用代理IP、随机User-Agent、降低请求频率等方法可以规避反爬虫策略 -
Robots协议:
~ Robots协议是一种网站使用的标准,用于指导网络爬虫访问网站的行为
~ 使用robots.txt文件来指示哪些页面可以被爬取,哪些页面应该被忽略 -
并发与异步:
大规模爬取需要考虑并发与异步处理,以提高爬取效率。使用多线程、多进程或异步库(如asyncio、aiohttp等)可以实现并发与异步操作 -
定时任务与调度:
爬虫通常需要定时执行,以保持数据的更新。使用定时任务调度工具(如APScheduler、celery等)可以实现定时执行爬虫任务
HTTP请求和响应是Web通信中的基本概念,无论是正常的接口请求还是爬虫请求,它们都使用HTTP协议进行通信
下面是对HTTP请求和响应的详细分析,以及正常接口请求和爬虫请求的区别:
2.请求头部(Request Headers):包含了客户端向服务器传递的附加信息,如User-Agent、Accept、Cookie等
3.请求体(Request Body):在POST请求中,包含了要发送给服务器的数据
2.响应头部(Response Headers):包含了服务器向客户端传递的附加信息,如Content-Type、Set-Cookie等
3.响应体(Response Body):包含了服务器返回给客户端的数据
正常的接口请求和爬虫请求的区别:
总的来说,正常的接口请求和爬虫请求在使用HTTP协议上没有本质区别,但在一些请求头部信息和请求行的设置上可能会有所不同,主要是为了达到不同的访问目的和需求
HTTP请求的组成部分:
-
请求行(Request Line):
包含了HTTP方法、请求的URL和协议版本
格式: -
请求头部(Request Headers):
包含了请求的各种属性和信息,如、等
每个头部以键值对的形式出现,中间用冒号分隔
- 请求体(Request Body):
仅在使用POST、PUT等方法时出现,用于传递请求参数或数据
请求体的格式可以是文本、JSON、XML等
HTTP响应的组成部分:
-
状态行(Status Line):
包含了响应的状态码和对应的描述
格式: -
响应头部(Response Headers):
包含了服务器对请求的响应信息,如、等
格式与请求头部相同,每个头部以键值对的形式出现 -
响应体(Response Body):
包含了服务器返回的实际数据,可以是HTML、JSON、XML等格式的文本
整体的请求示例:
整体的相应示例:
在Python中,爬虫常常使用requests库来发送HTTP请求
requests是一个简洁而强大的HTTP库,使得发送HTTP请求变得容易,并能够方便地处理响应数据
以下是对requests库的概念以及一些示例的详细分析:
-
HTTP请求发送:requests库允许通过简单的API发送各种类型的HTTP请求,如GET、POST、PUT、DELETE等
-
请求参数设置:可以通过参数设置请求的各种属性,如headers、params、data、cookies等,以满足不同的需求
-
响应处理:requests库可以方便地处理HTTP响应,包括状态码、响应头、响应体等
使用之前需要安装:
发送GET请求并获取响应:
截图如下:
发送带参数的GET请求:
发送POST请求并传递数据:
截图如下:
设置请求头部和cookies:
处理异常:
截图如下:
实战演示
为了爬取豆瓣250的电影:
结果返回418,这代表加入了反爬
为了让网站显示这是浏览器的请求,需要增加请求头,对应在自身浏览器中刷新并按F12,查看自身请求头
最终结果返回200,代表爬取成功
对应 为网页信息,如何解析对应的html文件呢??
此处着重讲一个库
先安装:
是Python中一个用于解析HTML和XML文档的库,它能够从网页中提取数据,方便地进行信息抽取和数据挖掘
有一些常用的API能够帮助你查找、遍历和提取所需的信息
以下是对一些常用API的详细分析,并附带了相应的小Demo示例:
- 函数:用于查找第一个匹配的元素
参数:
- :要查找的标签名或标签名列表
- :要匹配的属性或属性字典
- :是否递归查找,默认为True
- :要匹配的文本内容
- :其他参数
返回值:找到的第一个匹配的元素,如果没有找到则返回None
- 函数:用于查找所有匹配的元素
参数:与find()类似,但多了一个参数,用于限制返回结果的数量
返回值:匹配的元素列表,如果没有找到则返回空列表
示例Demo:
截图如下:
用于获取元素内部的文本内容
参数:
- :文本分隔符,默认为换行符
- :是否去除文本两端的空白字符,默认为True
- :指定返回文本的类型,默认为字符串
返回值:元素内部的文本内容
截图如下:
用于使用CSS选择器来选择元素
参数::CSS选择器字符串
返回值:匹配的元素列表
截图如下:
使用库爬取豆瓣电影Top250页面的信息
首先发送HTTP请求获取网页内容,然后使用解析HTML内容,查找所有电影条目,并提取其中的电影标题、评分和评论信息,最后打印出提取的电影信息
截图如下:(此处只打印了25个,毕竟每一页都是25条数据)
获取所有电影的电影名