Python爬虫:scrapy利用html5lib解析不规范的html文本

简介: Python爬虫:scrapy利用html5lib解析不规范的html文本

问题

当爬取表格(table) 的内容时,发现用 xpath helper 获取正常,程序却解析不到


在chrome、火狐测试都有这个情况。出现这种原因是因为浏览器会对html文本进行一定的规范化

scrapy 使用的解析器是 lxml ,下面使用lxml解析,只是函数表达不一样,xpath和css选择器的语法一样


安装解析器

pip install beautifulsoup4 lxml html5lib

下面例子中html文本<tr>标签只有闭合标签,没有起始标签


# -*- coding: utf-8 -*-
from lxml import etree
text = """
<table>
    <td>姓名</td><td>年龄</td></tr>
    <td>龙泽啦啦</td><td>23</td></tr>
    <td>餐巾空</td><td>25</td></tr>
</table>
"""
html = etree.HTML(text)
name = html.xpath("//table/tr[1]/td[1]/text()")
print(name)
# []

看到输出结果为空列表,lxml无法正确解析出不规范的标签


解决

思路:


利用 BeautifulSoup 和 html5lib 先将不规范的html文本转为规范的文本再进行解析

image.png

from bs4 import BeautifulSoup
soup = BeautifulSoup(text, "html5lib")
print(soup.prettify())
"""
<html><head></head><body><table>
<tbody>
    <tr><td>姓名</td><td>年龄</td></tr>
    <tr><td>龙泽啦啦</td><td>23</td></tr>
    <tr><td>餐巾空</td><td>25</td></tr>
</tbody>
</table></body></html>
"""
html = etree.HTML(soup.prettify())
name = html.xpath("//tbody/tr[1]/td[1]/text()")
print(name)
# ['\n      姓名\n     ']

看到被 html5lib 解析后的html文本变得规范了,自动补全了标签。最后再解析就没问题了


说明:


参考:


scrapy关于tbody标签的问题
Beautiful Soup 4.2.0 文档
prettify() 方法将Beautiful Soup的文档树格式化后以Unicode编码输出
相关文章
|
6月前
|
数据采集 运维 监控
爬虫与自动化技术深度解析:从数据采集到智能运维的完整实战指南
本文系统解析爬虫与自动化核心技术,涵盖HTTP请求、数据解析、分布式架构及反爬策略,结合Scrapy、Selenium等框架实战,助力构建高效、稳定、合规的数据采集系统。
1103 62
爬虫与自动化技术深度解析:从数据采集到智能运维的完整实战指南
|
6月前
|
数据采集 机器学习/深度学习 人工智能
反爬虫机制深度解析:从基础防御到高级对抗的完整技术实战
本文系统阐述了反爬虫技术的演进与实践,涵盖基础IP限制、User-Agent检测,到验证码、行为分析及AI智能识别等多层防御体系,结合代码实例与架构图,全面解析爬虫攻防博弈,并展望智能化、合规化的发展趋势。
2341 62
反爬虫机制深度解析:从基础防御到高级对抗的完整技术实战
|
8月前
|
数据采集 数据挖掘 测试技术
Go与Python爬虫实战对比:从开发效率到性能瓶颈的深度解析
本文对比了Python与Go在爬虫开发中的特点。Python凭借Scrapy等框架在开发效率和易用性上占优,适合快速开发与中小型项目;而Go凭借高并发和高性能优势,适用于大规模、长期运行的爬虫服务。文章通过代码示例和性能测试,分析了两者在并发能力、错误处理、部署维护等方面的差异,并探讨了未来融合发展的趋势。
877 0
|
10月前
|
数据采集 Java API
深度解析:爬虫技术获取淘宝商品详情并封装为API的全流程应用
本文探讨了如何利用爬虫技术获取淘宝商品详情并封装为API。首先介绍了爬虫的核心原理与工具,包括Python的Requests、BeautifulSoup和Scrapy等库。接着通过实战案例展示了如何分析淘宝商品页面结构、编写爬虫代码以及突破反爬虫策略。随后讲解了如何使用Flask框架将数据封装为API,并部署到服务器供外部访问。最后强调了在开发过程中需遵守法律与道德规范,确保数据使用的合法性和正当性。
|
数据采集 存储 数据可视化
分布式爬虫框架Scrapy-Redis实战指南
本文介绍如何使用Scrapy-Redis构建分布式爬虫系统,采集携程平台上热门城市的酒店价格与评价信息。通过代理IP、Cookie和User-Agent设置规避反爬策略,实现高效数据抓取。结合价格动态趋势分析,助力酒店业优化市场策略、提升服务质量。技术架构涵盖Scrapy-Redis核心调度、代理中间件及数据解析存储,提供完整的技术路线图与代码示例。
1588 0
分布式爬虫框架Scrapy-Redis实战指南
|
数据采集 人工智能 监控
40.8K star!让AI帮你读懂整个互联网:Crawl4AI开源爬虫工具深度解析
Crawl4AI 是2025年GitHub上备受瞩目的开源网络爬虫工具,专为AI时代设计。它不仅能抓取网页内容,还能理解页面语义结构,生成适配大语言模型的训练数据格式。上线半年获4万+星标,应用于1200+AI项目。其功能亮点包括智能内容提取引擎、AI就绪数据管道和企业级特性,支持动态页面处理、多语言识别及分布式部署。技术架构基于Python 3.10与Scrapy框架,性能卓越,适用于AI训练数据采集、行业情报监控等场景。相比Scrapy、BeautifulSoup等传统工具,Crawl4AI在动态页面支持、PDF解析和语义分块方面更具优势
4272 0
40.8K star!让AI帮你读懂整个互联网:Crawl4AI开源爬虫工具深度解析
|
数据采集 测试技术 C++
无headers爬虫 vs 带headers爬虫:Python性能对比
无headers爬虫 vs 带headers爬虫:Python性能对比
|
数据采集 JSON API
深入解析:使用 Python 爬虫获取淘宝店铺所有商品接口
本文介绍如何使用Python结合淘宝开放平台API获取指定店铺所有商品数据。首先需注册淘宝开放平台账号、创建应用并获取API密钥,申请接口权限。接着,通过构建请求、生成签名、调用接口(如`taobao.items.search`和`taobao.item.get`)及处理响应,实现数据抓取。代码示例展示了分页处理和错误处理方法,并强调了调用频率限制、数据安全等注意事项。此技能对开发者和数据分析师极具价值。
|
6月前
|
数据采集 存储 JavaScript
解析Python爬虫中的Cookies和Session管理
Cookies与Session是Python爬虫中实现状态保持的核心。Cookies由服务器发送、客户端存储,用于标识用户;Session则通过唯一ID在服务端记录会话信息。二者协同实现登录模拟与数据持久化。
|
8月前
|
数据采集 存储 Web App开发
Python爬虫库性能与选型实战指南:从需求到落地的全链路解析
本文深入解析Python爬虫库的性能与选型策略,涵盖需求分析、技术评估与实战案例,助你构建高效稳定的数据采集系统。
641 0

推荐镜像

更多