使用Scrapy高效抓取并整合Div内不定数量P标签文本

使用Scrapy高效抓取并整合Div内不定数量P标签文本

本文旨在指导如何使用scrapy框架高效地从网页中抓取特定

元素内不定数量的

标签内容。我们将探讨如何利用xpath表达式精准定位并提取所有目标

标签,并通过python的字符串连接方法,将这些分散的文本内容整合为一个单一字段,以便于数据存储和后续处理,解决仅保存最后一个

标签的问题。

引言:处理动态P标签内容的挑战

在进行网页抓取时,经常会遇到页面内容结构不尽相同的情况。例如,一个特定的

容器内可能包含数量不定的

标签,有些页面只有一个,而另一些则有十个甚至更多。这种动态性给数据提取带来了挑战:如何确保所有

标签的内容都被正确抓取,并将其整合到一个单一的变量中,以便于后续的数据存储(如导出到CSV文件)?

常见的误区是,在循环中迭代提取每个

标签的内容并尝试将其赋给同一个变量,这通常会导致最终只保存了循环中的最后一个元素。本文将详细介绍如何使用Scrapy和XPath,结合Python的字符串处理能力,优雅地解决这一问题。

HTML结构示例

假设我们目标抓取的网页具有如下的HTML结构,其中

内部包含多个

标签,其数量和内容是可变的:

title text

这是第一段文本...

这是第二段文本...


这是第三段文本...


这是第四段文本...


这是第五段文本...


这是第六段文本...

这是第七段文本...

零一万物开放平台
零一万物开放平台

零一万物大模型开放平台

零一万物开放平台 48
查看详情 零一万物开放平台


这是第八段文本...


这是第九段文本...


这是第十段文本...

这是第十一段文本...

这是第十二段文本...

我们的目标是从这个div_name中提取所有

标签内的纯文本内容,并将它们合并成一个长字符串。

Scrapy与XPath基础回顾

Scrapy框架提供了强大的选择器工具,其中XPath是进行元素定位和数据提取的核心。response.xpath()方法允许我们使用XPath表达式来查询HTML或XML文档中的节点。

//:表示从文档的任何位置开始匹配。div:匹配所有div元素。[@class=”div_name”]:进一步筛选,只匹配class属性值为div_name的div元素。//p:在当前上下文(这里是div_name)的任何后代节点中匹配所有p元素。normalize-space(.):这是一个XPath函数,用于获取当前节点及其所有后代节点的文本内容,并规范化其中的空白字符(去除首尾空白,将连续的内部空白替换为单个空格)。

核心解决方案:提取、规范化与整合

面对不定数量的

标签,关键在于如何一次性获取所有目标元素,并将其文本内容有效连接。

错误尝试分析

初学者可能尝试使用循环迭代,并将每次迭代的结果赋值给同一个变量,如下所示:

# 假设 divs 是指向目标 
的选择器divs = response.xpath('/html/body/div[6]/div/section[2]/article/div/div/div')story = "" # 初始化变量for p_tag_selector in divs.xpath('.//p'): # p_tag_selector.get() 会返回

...

完整的HTML标签 # 如果想获取纯文本,需要进一步处理,例如 p_tag_selector.xpath('normalize-space(.)').get() text_content = p_tag_selector.xpath('normalize-space(.)').get() if text_content: story = text_content # 错误:每次循环都会覆盖前一次的值yield { 'story': story # 最终只会存储最后一个

标签的内容}

这段代码的问题在于 story = text_content 这一行。在每次循环中,story 变量都会被当前

标签的文本内容所覆盖,导致最终 yield 的 story 字段只包含最后一个

标签的内容。

优化方法:列表推导式与字符串连接

正确的做法是先将所有目标

标签的文本内容收集到一个列表中,然后再将列表中的所有字符串元素连接成一个单一的字符串。

import scrapyclass ParagraphScraper(scrapy.Spider):    name = 'paragraph_scraper'    start_urls = ['http://example.com/your_target_page'] # 替换为实际的网页URL    def parse(self, response):        # 1. 使用XPath选择所有目标 

标签 # 注意:原始问题中的XPath '/html/body/div[6]/div/section[2]/article/div/div/div' # 非常具体且脆弱,强烈建议根据实际页面结构优化,例如使用类名: # target_div_xpath = '//div[@class="div_name"]' # p_selectors = response.xpath(f'{target_div_xpath}//p') # 这里沿用问题中提供的XPath作为示例,但请在实际项目中进行验证和优化 p_selectors = response.xpath('/html/body/div[6]/div/section[2]/article/div/div/div//p') # 2. 提取每个

标签的纯文本内容,并进行规范化处理 # 使用列表推导式高效地完成这一步骤 # normalize-space(.) 可以获取元素内部的所有文本内容,并规范化空格 # 过滤掉可能为空的文本(如

或只包含
的 p 标签) story_parts = [ p_selector.xpath('normalize-space(.)').get() for p_selector in p_selectors ] story_parts = [part for part in story_parts if part and part.strip()] # 确保非空且非全空白 # 3. 使用空格将所有文本部分连接成一个单一的字符串 # ' '.join(list_of_strings) 是 Python 中连接字符串的常用且高效的方法 story_combined = ' '.join(story_parts) # 4. 将整合后的数据通过 yield 返回 yield { 'story': story_combined, # 可以根据需要添加其他字段 }

数据

以上就是使用Scrapy高效抓取并整合Div内不定数量P标签文本的详细内容,更多请关注创想鸟其它相关文章!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 chuangxiangniao@163.com 举报,一经查实,本站将立刻删除。
发布者:程序猿,转转请注明出处:https://www.chuangxiangniao.com/p/1603934.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
html怎么运行script_html中运行script脚本方法【教程】
上一篇 2025年12月23日 17:37:43
解决Bootstrap 5导航栏折叠失效问题:data-*属性更新详解
下一篇 2025年12月23日 17:37:51

相关推荐

  • ios16怎么隐藏照片

    一、通过相册自带功能隐藏 打开“照片”应用,定位到你想隐藏的图片。点击右上角的“选择”,勾选目标照片后,点击左下角的“分享”按钮。在分享菜单中向左滑动,找到“隐藏”选项并点击确认。此时,所选照片将自动移入“隐藏”相册。如需查看这些内容,只需进入“相簿”页面,向下滚动即可找到“隐藏”相册。 二、利用A…

    2026年8月28日
    000
  • NetSarang(Xshell)旗下推出了一款跨平台SSH客户端PortX

    NetSarang(Xshell)旗下推出了一款跨平台SSH客户端PortXNetSarang(Xshell)旗下推出了一款跨平台SSH客户端PortXNetSarang(Xshell)旗下推出了一款跨平台SSH客户端PortXNetSarang(Xshell)旗下推出了一款跨平台SSH客户端PortX

    netsarang公司此前以xshell/xftp/xmanager等产品闻名,这些软件最初仅支持windows平台。为了拓展市场,netsarang近期推出了一款跨平台ssh客户端portx,支持mac、windows、linux三大操作系统。目前,portx可免费下载使用,为ssh客户端市场增添…

    2026年8月28日 用户投稿
    000
  • 谷歌浏览器为什么打字的时候有明显延迟_谷歌浏览器输入延迟原因分析

    首先禁用硬件加速并检查扩展程序,清除缓存与重置设置可解决谷歌浏览器输入延迟问题。具体操作包括添加–disable-gpu参数、关闭冲突扩展、清除所有时间的缓存数据及恢复默认设置,最终在Dell XPS 13的Windows 11环境下有效改善文本输入卡顿现象。 如果您在使用谷歌浏览器输入…

    2026年8月28日
    100
  • 清华大学扩招:着力培养人工智能与多学科交叉的复合型人才

    ☞☞☞AI 智能聊天, 问答助手, AI 智能搜索, 免费无限量使用 DeepSeek R1 模型☜☜☜ 清华大学宣布适度扩大2025年本科招生规模,计划新增约150个名额,并同步成立新的本科通识书院。此举旨在培养人工智能与多学科交叉融合的复合型人才,提升创新人才自主培养能力,更好地服务国家战略和社…

    2026年8月28日
    000
  • 如何设置UEFI启动_BIOS模式切换教程

    要将电脑启动模式从传统bios切换到uefi,必须先进入固件设置界面(通常在开机时按del、f2、f10或f12键),找到“boot”或“security”选项卡,1. 禁用兼容支持模块(csm)或设置“boot mode”为“uefi only”;2. 确保启用uefi启动模式;3. 可选但推荐启…

    2026年8月28日
    100
  • 如何解决Composer命令在生产环境中的安全问题?使用php-tuf/composer-stager可以!

    可以通过一下地址学习composer:学习地址 在处理 php 项目时,更新依赖库是常见操作。然而,当你在生产环境中直接运行 composer 命令时,可能会遇到一些棘手的问题。最近,我在维护一个基于 php 的网站时,遇到的问题是如何在不影响用户体验的情况下安全地更新依赖库。我尝试了几种方法,但都…

    用户投稿 2026年8月28日
    000
  • 电脑出现xboxgip.sys错误_游戏外设驱动修复

    出现xboxgip.sys错误时,首先应检查并重装游戏控制器驱动,进入设备管理器卸载相关设备并勾选删除驱动程序,重启后让系统自动重装或手动从微软官网下载最新驱动;2. 运行sfc /scannow命令修复系统文件完整性,若无效则继续执行dism /online /cleanup-image /res…

    2026年8月28日
    000
  • 重磅 | GitHub 已确认被微软收购!

    github作为一个庞大的代码库,已成为开发人员和公司托管项目、文档和代码的首选平台。苹果、亚马逊、谷歌等众多科技巨头都使用github。微软是该平台的最大贡献者,拥有超过1000名员工积极推送代码到github上的存储库中。微软甚至在github上公开托管了原始windows文件管理器的源代码。2…

    2026年8月28日
    100
  • 如何解决PHP中HTTP请求和响应的标准化问题?使用nimbly/capsule可以!

    可以通过一下地址学习composer:学习地址 在开发一个需要频繁处理http请求和响应的php项目时,我遇到了一个棘手的问题:如何在不同的框架和库之间统一处理这些请求和响应?尽管php提供了丰富的内置函数来处理http,但这些函数在不同环境下的行为可能会有所不同,导致代码难以维护和扩展。 为了解决…

    用户投稿 2026年8月28日
    300
  • 如何解决 Swoole 协程与异步 I/O 操作中的资源竞争问题

    在 swoole 中解决资源竞争问题的方法包括使用 channel 和锁机制。1. 使用 channel 协调协程间数据传递,确保数据有序性和安全性。2. 通过锁机制(如互斥锁、读写锁)保护共享资源访问,防止同时访问导致的竞争问题。 引言 在现代高并发编程中,Swoole 作为一个高性能的 PHP …

    2026年8月28日
    000
  • 夸克AI怎么处理PDF文档_夸克AI PDF解析与批注功能教程

    使用夸克AI可解析PDF并添加批注,先通过“文档”模块导入PDF,点击“用AI读文档”生成摘要与要点,长按文字选择高亮或批注并分类标签,批注汇总至笔记面板,最后导出PDF时可选包含AI解析内容与批注,支持本地保存或分享。 ☞☞☞AI 智能聊天, 问答助手, AI 智能搜索, 免费无限量使用 Deep…

    2026年8月28日
    000
  • 如何解决SymfonyAPI开发中的测试问题?使用lchrusciel/api-test-case可以!

    在 Symfony API 开发过程中,测试一直是个难题。我曾经在项目中遇到过这样的情况:需要为 JSON/XML API 进行高效的 TDD,但传统的测试方法效率低下,错误信息不够清晰,导致开发周期延长。幸运的是,我找到了 lchrusciel/api-test-case 这个库,它彻底改变了我的…

    用户投稿 2026年8月28日
    000
  • excel怎么学习_excel学习方法与入门进阶资源推荐

    掌握Excel需系统学习:先通过知名平台视频课打基础并实操,再结合官方文档与经典书籍深化函数与数据透视表等技能,同时参与实战项目提升应用能力,加入社区交流解惑,并利用交互式平台强化训练,逐步进阶。 如果您希望掌握Excel这一强大的数据处理工具,但不知从何入手或如何提升技能,则可以通过系统的学习方法…

    2026年8月28日
    300
  • 如何清理浏览器缓存_各浏览器缓存清除指南

    清理浏览器缓存是指删除浏览器为加速网页加载而存储的临时文件,如图片、css、javascript等;2. 主要目的是解决网页显示错乱、加载旧内容等问题,并释放硬盘空间;3. 操作核心是进入浏览器设置或使用快捷键,选择清除数据类型时务必勾选“缓存的图片和文件”;4. 不同浏览器操作路径略有差异:chr…

    2026年8月28日
    000
  • 手把手教你们Python配置OpenCV环境,小白看一遍就会了

    手把手教你们Python配置OpenCV环境,小白看一遍就会了手把手教你们Python配置OpenCV环境,小白看一遍就会了手把手教你们Python配置OpenCV环境,小白看一遍就会了手把手教你们Python配置OpenCV环境,小白看一遍就会了

    ?️‍?1、简介?1.1、Opecv介绍 开课之前,我们先给大家讲讲opecv是一个基于bsd许可(开源)发行的跨平台计算机视觉和机器学习软件库,可以运行在linux、windows、android和mac os操作系统上。 [1] 它轻量级而且高效——由一系列 c 函数和少量 c++ 类构成,同时…

    2026年8月28日 用户投稿
    300
  • 如何解决两步验证(2FA)备用代码问题?使用scheb/2fa-backup-code可以!

    可以通过一下地址学习composer:学习地址 在开发一个需要两步验证(2fa)的应用时,我遇到了一个棘手的问题:如何为用户提供备用代码功能,以便他们在无法使用主要验证方法时仍然能够登录。我尝试了多种方法,但效果都不理想,直到我发现了 scheb/2fa-backup-code 这个扩展库。 sch…

    用户投稿 2026年8月28日
    000
  • Yii 框架如何防范 SQL 注入攻击?

    在 yii 框架中,可以通过使用参数化查询来有效防范 sql 注入攻击。1) 使用 activerecord 或 query builder 进行参数化查询,如 $user = user::find()->where([‘username’ => $usernam…

    2026年8月28日
    100
  • CCleaner怎么设置自动清理_CCleaner自动清理功能的设置方法

    CCleaner通过“监控器”功能可在系统启动时自动提示清理垃圾文件,用户可勾选“系统启动时运行监控器”并开启通知功能,实现开机或活动后提醒清理;若需完全自动化,可结合Windows任务计划程序创建定时任务,使用“/AUTO”命令行参数让CCleaner无人值守自动清理,从而提升系统运行效率。 CC…

    2026年8月28日
    100
  • mac怎么查看wifi密码_mac查看WiFi密码的方法

    可通过系统设置密码应用、钥匙串访问或终端命令找回Mac已保存的Wi-Fi密码:首先在“系统设置-密码”中验证身份后查看;其次用“钥匙串访问”搜索网络名称并显示密码;最后通过终端执行security命令获取。 如果您需要连接另一台设备到已保存的Wi-Fi网络,但忘记了密码,可以通过Mac上的多种方式找…

    2026年8月28日
    000
  • VSCode怎么建立外部样式_VSCode链接外部CSS文件方法教程

    首先创建style.css文件并编写样式,然后在HTML的head中通过link标签引入,最后用Live Server插件实现实时预览;若样式未生效,需检查路径、语法、优先级、缓存及HTML结构,并利用开发者工具调试;大型项目应按模块或页面拆分CSS,结合预处理器、BEM规范和CSS Reset提升…

    2026年8月28日
    000

发表回复

登录后才能评论
关注微信