Python项目实战-网络机器人(爬虫)

网络机器人(爬虫)

入门

介绍

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

    • 搜索引擎(百度、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代码,访问网站,获取数据

    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个元素 //p2
last() 选择最后一个元素 //plast()
@attr 选择有该属性的元素 //p@color
@attr='value' 选择该属性值等于指定值的元素 //p@color='red'
* 匹配任何元素节点 //body/div/*
@* 匹配元素的任何属性 //body/div/a/@*
text() 获取文本内容 //div/p/text()
html 复制代码
 <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次
| 或的意思,匹配左右任意一个表达式
() 将括号中的字符作为一个分组
^ 匹配字符串开头
^ 匹配字符串开头

案例:

电影数据处理:

效果展示:

相关推荐
白猫不黑1 小时前
网络安全/信息安全专业学习路线与入行指南:从大学到岗位的完整规划
网络·学习·安全·web安全·网络安全·黑客技术
wWYy.1 小时前
Linux发送数据包的过程
linux·网络
winfredzhang2 小时前
从零构建家庭照片管理系统:Django 模块化单体实战,以及我踩到的 4 个真实坑
python·postgresql·django·sqlite·bootsrap
云飞云共享云桌面2 小时前
自动化设备厂 10 人研发团队,如何共用一台服务器做 SolidWorks 建模?
运维·服务器·网络·3d·自动化·制造
jyOverQ2 小时前
LangGraph 流式执行详解:stream、astream 与 stream_mode 怎么选?
python·langchain
法哥20122 小时前
用 C++ 控制 CMW100,到底在干什么?
开发语言·c++
小谢取证2 小时前
实战案例分享:用 AI 绕过模拟器反取证进行动态抓包,落地 APK 真实 IP
大数据·网络·人工智能
闲猫2 小时前
LangGraph / Capabilities / Stores
python·agent·langgraph
xqwxbl2 小时前
小微企业差旅出行不用愁2026年头部商旅平台怎么选?看这篇就够了
大数据·网络·人工智能