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编码输出
相关文章
|
2月前
|
Python
Python技术解析:了解数字类型及数据类型转换的方法。
在Python的世界里,数字并不只是简单的数学符号,他们更多的是一种生动有趣的语言,用来表达我们的思维和创意。希望你从这个小小的讲解中学到了有趣的内容,用Python的魔法揭示数字的奥秘。
77 26
|
1月前
|
网络协议 API Python
解析http.client与requests在Python中的性能比较和改进策略。
最后,需要明确的是,这两种库各有其优点和适用场景。`http.client` 更适合于基础且并行的请求,`requests` 则因其易用且强大的功能,更适用于复杂的 HTTP 场景。对于哪种更适合你的应用,可能需要你自己进行实际的测试来确定。
58 10
|
1月前
|
数据采集 Web App开发 JavaScript
Python爬虫解析动态网页:从渲染到数据提取
Python爬虫解析动态网页:从渲染到数据提取
|
2月前
|
机器学习/深度学习 算法 测试技术
图神经网络在信息检索重排序中的应用:原理、架构与Python代码解析
本文探讨了基于图的重排序方法在信息检索领域的应用与前景。传统两阶段检索架构中,初始检索速度快但结果可能含噪声,重排序阶段通过强大语言模型提升精度,但仍面临复杂需求挑战
78 0
图神经网络在信息检索重排序中的应用:原理、架构与Python代码解析
|
2月前
|
存储 机器学习/深度学习 人工智能
多模态RAG实战指南:完整Python代码实现AI同时理解图片、表格和文本
本文探讨了多模态RAG系统的最优实现方案,通过模态特定处理与后期融合技术,在性能、准确性和复杂度间达成平衡。系统包含文档分割、内容提取、HTML转换、语义分块及向量化存储五大模块,有效保留结构和关系信息。相比传统方法,该方案显著提升了复杂查询的检索精度(+23%),并支持灵活升级。文章还介绍了查询处理机制与优势对比,为构建高效多模态RAG系统提供了实践指导。
377 0
多模态RAG实战指南:完整Python代码实现AI同时理解图片、表格和文本
|
2月前
|
数据采集 人工智能 边缘计算
爬虫IP代理效率优化:策略解析与实战案例
本文深入探讨了分布式爬虫中代理池效率优化的关键问题。首先分析了代理效率瓶颈的根源,包括不同类型代理的特点、连接耗时及IP失效问题。接着提出了六大核心优化策略:智能IP轮换矩阵、连接复用优化、动态指纹伪装、智能重试机制等,并结合电商价格监控、社交媒体舆情分析和金融数据抓取三个实战案例,展示了优化效果。同时建立了三维效率评估体系,从质量、成本和稳定性全面衡量性能。最后展望了AI驱动调度、边缘计算融合等未来演进方向,帮助爬虫系统实现从“暴力采集”到“智能获取”的进化,大幅提升效率并降低成本。
62 0
|
3月前
|
数据采集 前端开发 JavaScript
Scrapy结合Selenium实现搜索点击爬虫的最佳实践
Scrapy结合Selenium实现搜索点击爬虫的最佳实践
|
2月前
|
数据采集 存储 监控
Scrapy框架下地图爬虫的进度监控与优化策略
Scrapy框架下地图爬虫的进度监控与优化策略
|
8月前
|
数据采集 存储 JSON
Python网络爬虫:Scrapy框架的实战应用与技巧分享
【10月更文挑战第27天】本文介绍了Python网络爬虫Scrapy框架的实战应用与技巧。首先讲解了如何创建Scrapy项目、定义爬虫、处理JSON响应、设置User-Agent和代理,以及存储爬取的数据。通过具体示例,帮助读者掌握Scrapy的核心功能和使用方法,提升数据采集效率。
355 6
|
9月前
|
数据采集 中间件 开发者
Scrapy爬虫框架-自定义中间件
Scrapy爬虫框架-自定义中间件
128 1

热门文章

最新文章

推荐镜像

更多
AI助理

你好,我是AI助理

可以解答问题、推荐解决方案等