网络机器人(爬虫)

入门

介绍

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

  • 场景

    • 搜索引擎(百度、Google)

    • 舆情监控

    • 商业分析(电商比价系统)

    • AI大模型训练预科

  • 步骤

    开始—发送http请求—解析结果提取数据—数据处理(清洗)—数据存储—结束

    数据清洗:是指对采集到的原始数据进行处理、修正、转换和标准化的过程,目的是让数据变得规范、准确

robot协议

robot协议也称为爬虫协议、爬虫规则,是指网站根目录下存放的一份文本文件robots.txt,用于告诉爬虫哪些页面可以抓取,哪些页面不能抓取(君子协议)

  • user-agent:用户代理,通过该请求头确认爬虫的类型

  • Disallow:禁止访问的资源

  • Allow:允许访问的资源

  • sitemap:网站地图,帮助爬虫更高效地获取网站内容

  • Crawl-delay:爬取间隔时间,避免频繁访问造成网站压力过大

案例展示:

入门程序

获取TIOBE编程语言排行榜单

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

  2. 安装requests库,用于发送网络请求(pip install requests)

    注意:使用浏览器访问的资源都是get请求

    requests库是python中最流行、最优雅的HTTP客户端库,让python代码发送HTTP请求变得极其简单

  3. 编写python代码,访问网站,获取数据

    import requests
    
    # 定义url
    target_url = "https://www.tiobe.com/tiobe-index/"
    # 发送请求,获取数据
    response = requests.get(target_url)
    # 输出数据到控制台
    print(response.text)

  4. 响应数据(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,需要设置为空字符串

案例实现

步骤

  1. 明确网站的robots.txt中的抓取规则

  2. 查看页面的结构,拆解具体的操作步骤,按步骤开发

    • 获取高分电影列表数据

    • 遍历电影列表,获取每一部电影的详情信息,并提取电影数据信息

    • 将电影详情信息保存到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次
| 或的意思,匹配左右任意一个表达式
() 将括号中的字符作为一个分组
^ 匹配字符串开头
^ 匹配字符串开头

案例:

电影数据处理:

效果展示:

Logo

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

更多推荐