网络爬虫 Python 第二课

  • BeautifulSoup 高级用法

    • 标签查找与筛选:除了简单地通过标签名查找(如 soup.find('div') 查找第一个 div 标签),还可以利用属性来更精准地查找。例如,如果要查找所有 class 属性为 article 的 div 标签,可以使用 soup.find_all('div', class_='article') 。这里注意 class_ 后面的下划线,是为了避免和 Python 的关键字 class 冲突。
    • 层级关系查找:网页中的标签往往是有层级嵌套关系的,BeautifulSoup 可以方便地根据层级来查找元素。比如要查找 div 标签下的 p 标签,可以这样写 soup.div.find_all('p') ,先定位到 div 标签,再查找其内部的所有 p 标签。还可以使用 soup.select() 方法,通过 CSS 选择器来进行更灵活的层级元素查找,像 soup.select('div.article p') 就是查找 class 为 article 的 div 标签下的所有 p 标签。
    • 获取标签内容与属性:讲解如何获取标签包裹的文本内容(如 tag.text )以及获取标签的各种属性值(比如对于 <a href="https://example.com">链接</a> 这样的 a 标签,可以通过 tag['href'] 来获取 href 属性的值)。
  • XPath 解析

    • 介绍 XPath 概念:XPath 是一种在 XML 文档中查找信息的语言,由于 HTML 可以看作是 XML 的一种特殊形式,所以也能用 XPath 来解析网页结构定位元素。它通过路径表达式来选取节点,比如 /html/body/div 表示从根节点 html 开始,依次选择 body 节点下的 div 节点。
    • 在 Python 中使用(结合 lxml 库):示例代码展示如何安装和使用 lxml 库来通过 XPath 解析网页,像下面这样:

from lxml import etree
import requestsurl = "https://www.example.com"
response = requests.get(url)
html = etree.HTML(response.text)
result = html.xpath('//div[@class="article"]/p/text()')  # 选取class为article的div下的p标签的文本内容
print(result)

二、处理多种网页数据类型

  • 图片、链接等资源的提取

    • 图片提取:讲解如何从网页中找出所有图片的链接,通常图片会放在 <img> 标签里,通过 src 属性来指定图片的 URL。可以用 BeautifulSoup 查找所有 img 标签(如 soup.find_all('img') ),然后遍历获取每个 img 标签的 src 属性值,这些值就是图片的链接,后续可以进一步下载图片到本地等操作。
    • 链接提取:对于网页中的超链接( <a> 标签),同样可以通过查找 a 标签,并获取 href 属性值来提取链接,可用于构建站内链接的爬虫,顺着这些链接去爬取网页的其他页面等。
  • 数据格式化与清洗

    • 去除空格、特殊字符:爬取到的文本数据可能存在前后空格或者一些不需要的特殊字符,比如换行符 \n 等,可以使用 Python 的字符串方法(如 strip() 去除两边空格、 replace() 替换特定字符等)来进行清理。
    • 数据类型转换:如果爬取的数据要用于后续的计算、分析等,可能需要进行数据类型的转换,比如把字符串形式的数字转换为整型( int() 函数)或者浮点型( float() 函数)等操作。

三、应对简单的反爬虫机制

  • 设置请求头(Headers):很多网站会通过检测请求头中的信息(如 User-Agent ,它代表了客户端浏览器等相关信息)来判断请求是否来自正常的浏览器访问。可以通过在 Requests 库中设置合适的请求头,模拟真实浏览器请求,示例如下:
  • import requestsheaders = {"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/5.25.25 (KHTML, like Gecko) Chrome/118.0.0.0 Safari/537.36"
    }
    url = "https://www.example.com"
    response = requests.get(url, headers=headers)
    print(response.text)

  • 控制请求频率:避免过于频繁地向网站发送请求,以免触发网站的反爬虫限制,可以使用 time 模块来设置每次请求之间的时间间隔,像这样:
  • 通过这些内容的讲解,能让学习者在网络爬虫 Python 的学习道路上更进一步,掌握更实用的爬虫技能,为后续处理更复杂的爬虫项目打下基础。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/diannao/61149.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

供应链管理、一件代发系统功能及源码分享 PHP+Mysql

随着电商行业的不断发展&#xff0c;传统的库存管理模式已经逐渐无法满足市场需求。越来越多的企业选择“一件代发”模式&#xff0c;即商家不需要自己储备商品库存&#xff0c;而是将订单直接转给供应商&#xff0c;由供应商直接进行发货。这种方式极大地降低了企业的运营成本…

Pr:音频过渡

Adobe Premiere Pro 自带一组共三个音频过渡 Audio Transitions效果。 对音频剪辑之间应用交叉淡化 Crossfade过渡&#xff0c;操作方式类似于应用视频过渡效果。 对于交叉淡化&#xff0c;要保证前剪辑的出点之后及后剪辑的入点之前有足够的预留内容&#xff08;也称“手柄”&…

前端页面开发步骤详解

目录 前言1. 页面搭建1.1 HTML 标签结构1.2 CSS 样式设计 2. 数据绑定与事件处理2.1 数据绑定2.2 表单校验 3. 调用后台接口3.1 接口文档与工具封装3.2 参数传递与接口调用 结语 前言 在前端开发过程中&#xff0c;从页面搭建到与后台接口对接是一个必不可少的完整流程。无论是…

A037-基于Spring Boot的二手物品交易的设计与实现

&#x1f64a;作者简介&#xff1a;在校研究生&#xff0c;拥有计算机专业的研究生开发团队&#xff0c;分享技术代码帮助学生学习&#xff0c;独立完成自己的网站项目。 代码可以查看文章末尾⬇️联系方式获取&#xff0c;记得注明来意哦~&#x1f339; 赠送计算机毕业设计600…

两行命令搭建深度学习环境(Docker/torch2.5.1+cu118/命令行美化+插件),含完整的 Docker 安装步骤

深度学习环境的配置过于繁琐&#xff0c;所以我制作了两个基础的镜像&#xff0c;希望可以帮助大家节省时间&#xff0c;你可以选择其中一种进行安装&#xff0c;版本说明&#xff1a; base 版本基于 pytorch/pytorch:2.5.1-cuda11.8-cudnn9-devel&#xff0c;默认 python 版本…

EXCEL延迟退休公式

如图&#xff1a; A B为手工输入 C2EOMONTH(A2,B2*12) D2EOMONTH(C2,IF(C2>DATEVALUE("2025-1-1"),INT((DATEDIF(DATEVALUE("2025-1-1"),C2,"m")4)/4),0)) E2EOMONTH(A2,B2*12IF(EOMONTH(A2,B2*12)>DATEVALUE("2025-1-1"),INT(…

区块链技术在数据安全中的应用

&#x1f493; 博客主页&#xff1a;瑕疵的CSDN主页 &#x1f4dd; Gitee主页&#xff1a;瑕疵的gitee主页 ⏩ 文章专栏&#xff1a;《热点资讯》 区块链技术在数据安全中的应用 区块链技术在数据安全中的应用 区块链技术在数据安全中的应用 引言 区块链技术基础 1.1 区块链的…

GIT 入门详解指南

前言&#xff1a; 注&#xff1a;本博客仅用于记录本人学习过程中对git的理解&#xff0c;仅供学习参考&#xff0c;如有异议请自行查资料求证 安装 使用git之前必须完成git的安装&#xff0c;Git 目前支持 Linux/Unix、Solaris、Mac和 Windows 平台上运行 git 安装教程 基本…

讯飞、阿里云、腾讯云:Android 语音合成服务对比选择

在 移动端 接入语音合成方面&#xff0c;讯飞和腾讯云等都是优秀的选择&#xff0c;但各有其特点和优势。咱们的需求是需要支持普通话/英语/法语三种语言&#xff0c;以下是对各个平台的详细比较&#xff1a; 一、讯飞语音合成介绍 与语音听写相反&#xff0c;语音合成是将一段…

HarmonyOS本地存储-Preferences(用户首选项)的使用

一&#xff0c;用户首选项简述 ohos.data.preferences (用户首选项) 用户首选项为应用提供Key-Value键值型的数据处理能力&#xff0c;支持应用持久化轻量级数据&#xff0c;并对其修改和查询。 数据存储形式为键值对&#xff0c;键的类型为字符串型&#xff0c;值的存储数据…

【机器学习】回归模型(线性回归+逻辑回归)原理详解

线性回归 Linear Regression 1 概述 线性回归类似高中的线性规划题目。线性回归要做的是就是找到一个数学公式能相对较完美地把所有自变量组合&#xff08;加减乘除&#xff09;起来&#xff0c;得到的结果和目标接近。 线性回归分为一元线性回归和多元线性回归。 2 一元线…

OceanBase 分区表详解

1、分区表的定义 在OceanBase数据库中&#xff0c;普通的表数据可以根据预设的规则被分割并存储到不同的数据区块中&#xff0c;同一区块的数据是在一个物理存储上。这样被分区块的表被称为分区表&#xff0c;而其中的每一个独立的数据区块则被称为一个分区。 如下图所示&…

【Android原生问题分析】夸克、抖音划动无响应问题【Android14】

1 问题描述 偶现问题&#xff0c;用户打开夸克、抖音后&#xff0c;在界面上划动无响应&#xff0c;但是没有ANR。回到Launcher后再次打开夸克/抖音&#xff0c;发现App的界面发生了变化&#xff0c;但是仍然是划不动的。 2 log初分析 复现问题附近的log为&#xff1a; 用户…

使用 K-means 算法进行豆瓣读书数据的文本聚类分析

✅作者简介&#xff1a;2022年博客新星 第八。热爱国学的Java后端开发者&#xff0c;修心和技术同步精进。 &#x1f34e;个人主页&#xff1a;Java Fans的博客 &#x1f34a;个人信条&#xff1a;不迁怒&#xff0c;不贰过。小知识&#xff0c;大智慧。 &#x1f49e;当前专栏…

Django5 2024全栈开发指南(二):Django项目配置详解

目录 一、基本配置信息二、资源文件配置2.1 资源路由——STATIC_URL2.2 资源集合——STATICFILES_DIRS2.3 资源部署——STATIC_ROOT2.2.4 媒体资源——MEDIA 三、模板配置四、数据库配置4.1 mysqlclient连接MySQL4.2 pymysql连接MySQL4.3 多个数据库的连接方式4.4 使用配置文件…

数据结构-二叉搜索树(Java语言)

目录 1.概念 2.查找search 3.插入insert ​编辑4.删除remove&#xff08;难点&#xff09; 5.性能分析 1.概念 二叉搜索树又称二叉排序树&#xff0c;它或者是一棵空树&#xff0c;或者是具有以下性质的二叉树 : 1.若它的左子树不为空&#xff0c;则左子树上所有节点的值都…

学习笔记:黑马程序员JavaWeb开发教程(2024.11.18)

9.8 Mybatis-基础操作-查询&#xff08;条件查询&#xff09; 需要模糊查询&#xff0c;根据要求&#xff0c;我们需要在关键词前后都加上%&#xff0c;但是我们不能使用‘%#{内容}%’的形式&#xff0c;因为#{内容}最终会变成?&#xff0c;而?不能放在‘’之中&#xff…

数据分析-48-时间序列变点检测之在线实时数据的CPD

文章目录 1 时间序列结构1.1 变化点的定义1.2 结构变化的类型1.2.1 水平变化1.2.2 方差变化1.3 变点检测1.3.1 离线数据检测方法1.3.2 实时数据检测方法2 模拟数据2.1 模拟恒定方差数据2.2 模拟变化方差数据3 实时数据CPD3.1 SDAR学习算法3.2 Changefinder模块3.3 恒定方差CPD3…

学习大数据DAY61 宽表加工

目录 模型设计 加工宽表 任务调度&#xff1a; 大表 - 把很多数据整合起来 方便后续的明细查询和指标计算 模型设计 设计 建模 设计: excel 文档去编写 建模: 使用建模工具 PowerDesigner Navicat 在线画图工具... 把表结构给绘 制出来 共享\项目课工具\pd 加工宽表 数…

C#.Net筑基-模式匹配汇总

01、模式匹配概述 从C#7开始支持的 模式匹配 语法&#xff08;糖&#xff0c;挺甜&#xff09;&#xff0c;可非常灵活的对数据进行条件匹配和提取&#xff0c;经过多个版本的完善&#xff0c;已经非常强大了。 C# 支持多种模式&#xff0c;包括声明、类型、常量、关系、属性…