Python爬虫:scrapy利用html5lib解析不规范的html文本
2023-09-14 09:07:14 时间
问题
当爬取表格(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文本转为规范的文本再进行解析
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文本变得规范了,自动补全了标签。最后再解析就没问题了
说明:
参考:
相关文章
- [Python爬虫] scrapy爬虫系列 <一>.安装及入门介绍
- [Python爬虫] Selenium实现自动登录163邮箱和Locating Elements介绍
- Python爬虫之urllib.parse详解
- 第三百七十一节,Python分布式爬虫打造搜索引擎Scrapy精讲—elasticsearch(搜索引擎)用Django实现我的搜索以及热门搜索
- 第三百五十九节,Python分布式爬虫打造搜索引擎Scrapy精讲—elasticsearch(搜索引擎)介绍以及安装
- 第三百五十七节,Python分布式爬虫打造搜索引擎Scrapy精讲—利用开源的scrapy-redis编写分布式爬虫代码
- 第三百五十六节,Python分布式爬虫打造搜索引擎Scrapy精讲—scrapy分布式爬虫要点
- 小白学 Python 爬虫(39): JavaScript 渲染服务 scrapy-splash 入门
- 小白学 Python 爬虫(33):爬虫框架 Scrapy 入门基础(一)
- 小白学 Python 爬虫(14):urllib 基础使用(四)
- 小白学 Python 爬虫(2):前置准备(一)基本类库的安装
- Python 爬虫开发:Ajax请求响应json案例
- 华为OD机试 - 最优资源分配(Java & JS & Python)
- Python爬虫案例:下载文章数据,转制成PDF格式
- Python爬虫基础:初探selenium——动态网页&静态网页
- Python精确指南——第三章 Selenium和爬虫
- python爬虫多线程编程
- Python爬虫:scrapy框架Spider类参数设置
- Python爬虫:scrapy直接运行爬虫
- Python爬虫:Scrapy的get请求和post请求
- Python爬虫:Scrapy中runspider和crawl的区别
- Python爬虫:Scrapy从脚本运行爬虫的5种方式
- 如何开始写python爬虫?给入门python小白一条清晰的学习路线
- Python爬虫进行BeautifulSoup数据解析实战
- python 爬虫之路教程