Python项目实战-网络机器人(爬虫)
网络机器人(爬虫)
入门
介绍
-
爬虫:也称为网络爬虫(网络机器人),是一种按照一定的预设规则,自动浏览并抓取网络数据的程序或脚本
-
场景
-
搜索引擎(百度、Google)
-
舆情监控
-
商业分析(电商比价系统)
-
AI大模型训练预科
-
…
-
-
步骤
开始—发送http请求—解析结果提取数据—数据处理(清洗)—数据存储—结束
数据清洗:是指对采集到的原始数据进行处理、修正、转换和标准化的过程,目的是让数据变得规范、准确
robot协议
robot协议也称为爬虫协议、爬虫规则,是指网站根目录下存放的一份文本文件robots.txt,用于告诉爬虫哪些页面可以抓取,哪些页面不能抓取(君子协议)
-
user-agent:用户代理,通过该请求头确认爬虫的类型
-
Disallow:禁止访问的资源
-
Allow:允许访问的资源
-
sitemap:网站地图,帮助爬虫更高效地获取网站内容
-
Crawl-delay:爬取间隔时间,避免频繁访问造成网站压力过大

案例展示:

入门程序
获取TIOBE编程语言排行榜单

-
查看TIOBE网站的robot.txt文件,明确资源获取的规则

-
安装requests库,用于发送网络请求(pip install requests)
注意:使用浏览器访问的资源都是get请求
requests库是python中最流行、最优雅的HTTP客户端库,让python代码发送HTTP请求变得极其简单
-
编写python代码,访问网站,获取数据
import requests # 定义url target_url = "https://www.tiobe.com/tiobe-index/" # 发送请求,获取数据 response = requests.get(target_url) # 输出数据到控制台 print(response.text) -
响应数据(html)

网页结构
-
一个网页是由三个部分组成的,分别是HTML、CSS、JS (JavaScript)
-
html:超文本标记语言,由一堆预设的标签(<h1>一级标题<h1>)构成。html负责网页的结构(页面元素和内容)
-
CSS:层叠样式表。CSS负责网页的表现(页面元素的外观、位置等样式,如颜色、大小等)
-
JS:全称为JavaScript,简称JS。负责网页的行为(交互效果)

-
-
html:超文本标记语言
-
超文本:超越了文本的限制,比普通文本更强大。除了文字信息,还可以定义图片、音频、视频等内容
-
标记语言:由标签“<标签名>”构成的语言
-
html标签都是预定义好的。例如:使用<h1>展示标题,使用<img>展示图片,使用<video>展示视频
-
html代码直接在浏览器中运行,html标签由浏览器解析
-

-
网页解析
-
网页解析指的是从原始html文档中提取数据的过程,也是网络爬虫的关键步骤,从一堆标签文本中提取出需要的数据

-
lxml:是一个高性能的html/xml文档的解析库,支持基于Xpath语法来解析和获取网页数据
-
安装:pip install lxml




Xpath语法
-
Xpath:一种在HTML/XML文档中导航或定位元素的查询语言,让你能够准确的定位文档中的特定元素、属性或文本
| 表达式 | 描述 | 样例 |
|---|---|---|
| / | 从根节点的直接子元素 | /html/body/div/h1 |
| // | 从任意位置选择节点 | //h1 |
| . | 当前节点下查找 | ./a 与 .//a |
| [n] | 选择第n个元素 | //p[2] |
| [last()] | 选择最后一个元素 | //p[last()] |
| [@attr] | 选择有该属性的元素 | //p[@color] |
| [@attr='value'] | 选择该属性值等于指定值的元素 | //p[@color='red'] |
| * | 匹配任何元素节点 | //body/div/* |
| @* | 匹配元素的任何属性 | //body/div/a/@* |
| text() | 获取文本内容 | //div/p/text() |
<html lang="zh-CN">
<head>
<meta charset="UTF-8">
<title>仙逆人物志 - 修真世界</title>
</head>
<body>
<div>
<h1>Python</h1>
<p>一门简介、快速、易用的编程语言。</p>
<p>人生苦短,我用Python。</p>
<p color="red">AI大模型开发、AI智能应用开发。</p>
<a href="https://www.itcast.cn">黑马程序员</a>
</div>
</body>
</html>
/和//

[n]和[last()]

last()可以进行算术运算,倒数第二个可以进行last()-1获取
[@attr]

通配符 *

@*



入门程序(网页解析)
寻找表头的Xpath

编写代码

执行代码

案例
获取高分电影榜单(Top100)数据,并保存在CSV文件中


csv
-
csv:是一种简单、通用的文本文件格式,用于存储表格数据,可以直接使用Excel打开

第一种是原始写法,按,分割
第二种是字典对应比较友好,newline默认为/n,需要设置为空字符串
案例实现
步骤
-
明确网站的robots.txt中的抓取规则
-
查看页面的结构,拆解具体的操作步骤,按步骤开发
-
获取高分电影列表数据
-
遍历电影列表,获取每一部电影的详情信息,并提取电影数据信息
-
将电影详情信息保存到csv文件
-
获取高分电影数据案例
电影列表代码编写:

爬虫主方法代码逻辑编写:

获取电影详情方法代码逻辑编写:

保存csv文件代码逻辑编写:

分页获取数据代码逻辑编写:



代码优化调整:

数据清洗(正则入门)

正则表达式
-
是一种由特定语法规则组成的文本模式,用来描述、匹配字符串中符合特定规则的字符序列。就相当于一种模式匹配工具,允许用户通过简介的语法进行复杂文本的搜索、匹配和替换工作。
match匹配


search匹配
findall匹配
小结
字符串前面的r标识什么意思?
-
r表示当前这个字符串中的转义字符无效,作为普通字符串使用
re模块提供的如下三个函数的作用与区别?
-
match(“正则表达式”,”“文本字符串”) 从字符串的开头开始匹配
-
search(“正则表达式”,”“文本字符串”) 从任意位置开始,搜索第一个匹配项
-
findall(“正则表达式”,”“文本字符串”) 从任意位置开始,搜索所有匹配项
正则表达式-语法
| 表达式 | 描述 |
|---|---|
| 普通字符 | 字母、数字、汉字及大多数字符,直接匹配自身 |
| . | 匹配任意一个字符(除\n) |
| \d | 匹配数字 0-9 |
| \D | 匹配非数字 |
| \w | 匹配单词字符,即a-z、A-Z、0-9、_ |
| \W | 匹配非单词字符 |
| \s | 匹配空白字符,即 空格、\t |
| \S | 匹配非空白字符 |
| * | 出现任意次(0次或无数次) |
| + | 至少出现1次(1次或无数次) |
| ? | 至多出现一次(0次或1洗) |
| {m} | 出现m次 |
| {m,} | 至少出现m次 |
| {m,n} | 出现m到n次 |
| | | 或的意思,匹配左右任意一个表达式 |
| () | 将括号中的字符作为一个分组 |
| ^ | 匹配字符串开头 |
| ^ | 匹配字符串开头 |

案例:

电影数据处理:


效果展示:

DAMO开发者矩阵,由阿里巴巴达摩院和中国互联网协会联合发起,致力于探讨最前沿的技术趋势与应用成果,搭建高质量的交流与分享平台,推动技术创新与产业应用链接,围绕“人工智能与新型计算”构建开放共享的开发者生态。
更多推荐




所有评论(0)