1. 爬虫定义
爬虫:又称为网络爬虫(网络机器人),是一种按照一定的预设规则,自动浏览并抓取网络数据的程序或脚本

2.爬虫运行流程

数据清洗:是指对采集到的原始数据进行处理、修正、转换和标准化的过程,目的是让数据变得规范,准确
3.robots 协议
robots 协议:又称爬虫协议,是指网站根目录下存放的一份文本文件 robots.txt,用于告诉爬虫哪些页面可以抓取,哪些页面不能抓取。(君子协议:无强制约束)

- User - Agent:用户代理,通过该请求头确认爬虫的类型
- Disallow:禁止访问的资源
- Allow:允许访问的资源
- Sitemap:网站地图,帮助爬虫更高效地获取网站内容
- Craw - delay:爬虫抓取间隔时间,避免频繁访问造成网站压力过大
例如:百度的 robots.txt 文档,可以看到其对于除指定爬虫外的所有爬虫都禁止访问网站资源

小结:

4.爬虫入门程序
程序功能需求:获取 TIOBE 编程语言排行榜单
4.1 操作步骤
1.查看 TIOBE 网站的 robots.txt 文件,明确资源获取规则
2.安装 requests 库,用于发送网络请求(pip install requests)
3.编写 python 代码,访问 TIOBE 网站,获取数据
4.1.1 查看 robots.txt 文件

对于所有的爬虫,禁止访问 /wp-admin 目录下的资源(/wp-admin/admin-ajax.php除外),可知我们要访问的资源并未被禁止,因此爬虫是可以访问的
4.1.2 安装 requests 库
requests 库: 是 Python 最流行的HTTP 网络请求库,用来写代码访问网页、调用接口、拿网络数据,做爬虫、调用大模型 API、后端接口调用几乎必用。
命令行执行以下代码:
pip install requests

4.1.3 编写 python 代码
import requests
from lxml import html
#定义URL
URL= "https://www.tiobe.com/tiobe-index/"
#发送请求,获取数据response(对象)
response = requests.get(URL)
#解析html
doc = html.fromstring(response.text)
#解析表头
th_list = doc.xpath("//table[@id='top20']/thead/tr/th/text()")
print(th_list)
#解析表格数据
tr_list = doc.xpath("//table[@id='top20']/tbody/tr")
for tr in tr_list:
td_list = tr.xpath("./td/text()")
print(td_list)
获取到的 response 结果如下:

返回的即是前端网页的源代码:

返回的表头以及表格数据如下所示:

5.前端网页结构
5.1 概述
一个网页是由三个部分构成的,分别是:HTML,CSS,JS(JavaScript)
- HTML:超文本标记语言,由一堆预设的标签(<h1>一级标题</h1>)构成。HTML负责网页的结构(页面元素和内容)
- CSS:层叠样式表。CSS负责网页的表现(页面元素的外观,位置等样式,如颜色,大小等)
- JavaScript:负责网页的交互逻辑(点击、弹窗、请求后端接口)
网页示例:
<html lang="zh-CN">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>仙逆人物志 - 修真世界</title>
<style>
.title {
font-size: 30px;
font-weight: bold;
color: #ffd700;
transition: color 0.3s ease; /* 添加颜色过渡效果 */
}
</style>
</head>
<body>
<div class="content">
<nav class="top-nav">
<h1 class="title">仙逆人物志 - 修真界档案系统</h1>
</nav>
<footer class="footer">
<div class="container">
<p>© 2026 仙逆人物志 - <span>修真界档案系统</span></p>
<p>探索修真世界的奥秘,记录修仙路上的传奇</p>
</div>
</footer>
</div>
<script>
document.title = "仙逆人物志 - 修真世界";
const titleElement = document.querySelector('.title'); // 获取标题元素
titleElement.addEventListener('mouseenter', function () { // 鼠标进入标题时改变颜色
this.style.color = '#ff6600'; // 改为橙红色
});
titleElement.addEventListener('mouseleave', function () { // 鼠标离开标题时恢复原色
this.style.color = '#ffd700'; // 恢复金黄色
});
</script>
</body>
</html>

文件保存后将后缀改为 .html,双击用浏览器打开就能运行
5.2 HTML
HTML(HyperText Markup Language):超文本标记语言
- 超文本:超越了文本限制,比普通文本更加强大。除了文字信息,还可以定义图片,音频,视频等内容
- 标记语言:由标签 “<标签名>” 构成的语言
- HTML标签都是预定好的,不能随便写。例如:使用 <h1> 展示标题,使用 <image> 展示图片,使用 <video> 展示视频
- HTML代码直接在浏览器中运行,HTML标签由浏览器进行解析
- HTML标签可以嵌套
- HTML标签有两类:开始标签 <标签名> 和结束标签 </标签名>,大部分标签是成对出现的,有一部分是单标签(自闭合标签)
- 标签属性的格式:键值对形式,即 key = value

5.3 小结

6.网页解析
6.1 网络解析定义
网页解析指的是从原始HTML文档中提取数据的过程,也是网络爬虫的关键步骤,从一堆标签文本中提取需要的数据

6.2 lxml库
6.2.1 lxml概述
lxml库:是一个高性能的 HTML/XML 文档的解析库,支持基于 Xpath 语法来解析和获取网页数据
lxml库的安装:
pip install lxml
Xpath:是一种用于在 HTML/XML 文档中导航或定位元素的查询语言,让你能够准确的定位文档中的特定元素,属性或文本
6.2.2 常用导入
常用导入:
from lxml import html
lxml.html:HTML 专用,容错强,自带.xpath(),日常爬虫首选
6.2.3 常用Xpath语法
Xpath:是一种用于在 HTML/XML 文档中导航或定位元素的查询语言,让你能够准确的定位文档中的特定元素,属性或文本。
前提:doc = html.fromstring(html文本),然后 doc.xpath(“表达式”)
返回结果永远是列表;没匹配到返回 [ ]
其常用语法如下:

注意:查找索引从1开始,而不是常见的从0开始
小结:

6.2.4 示例写法
from lxml import html
#读取html文件
with open ("resources/仙逆人物志.html","r",encoding= "utf-8") as f:
html_text = f.read()
# 1.解析html文本,将其转换为一个文档对象
doc = html.fromstring(text)
# 2. XPath提取
#2.1 解析表头
th_list = doc.xpath("//table/thead/te/th/text()")
#2.2 解析表格中数据
#获取第一行数据
td_list1 = doc.xpath("//table/tbody/tr[1]/td/text()")
#获取倒数第一行数据
td_list2 = doc.xpath("//table/tbody/tr[last()]/td/text()")
#获取倒数第二行数据
td_list3 = doc.xpath("//table/tbody/tr[last()-1]/td/text()")
#获取所有行数据
tr_list4 = doc.xpath("//table/tbody/tr")
for tr in tr_list:
td_list = tr.xpath("./td/text()")
#获取tr标签下的任意元素的数据
tr_list5 = doc.xpath("//table/tbody/tr/*/text()")
#获取有指定属性的标签数据
p_list1 = doc.xpath("//p[@class]/text()")
#获取有指定属性以及指定值的标签数据
p_list2 = doc.xpath("//p[@class='xn']/text()")
#获取指定标签的所有属性
a_list = doc.xpath("//td/image/@*")
6.2.5 Xpath路径的获取方式
6.2.5.1 手动获取
根据 response 返回的前端源码查询到要提取的数据,观察源码结构,手动输入路径,如下图所示:

其xpath路径为://tabel[@id='top20']/thead/tr/th/text()
6.2.5.2 网页自动查询
使用 DevTools 工具栏中的 “元素” 进行获取,当鼠标指针停留在相应代码处时,对应网页页面的元素会高亮显示,如下图所示:

找到要查询信息的代码处,右键选择复制,然后选择复制Xpath或复制完整Xpath即可自动获得Xpath路径

获取到的数据地址://*[@id="top20"]/thead/tr/th[3]
转载自 CSDN-专业IT技术社区
原文链接:https://blog.csdn.net/ctlover/article/details/163760228



