ctlover头像

网络爬虫与前端网页基础

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

文章来源转载

评论

评论列表

微信小程序
QQ小程序

关于作者

点赞数:0
关注数:0
粉丝:0
文章:0
关注标签:0
加入于:--