问题
当爬取表格(table) 的内容时,发现用 xpath helper 获取正常,程序却解析不到
在chrome、火狐测试都有这个情况。出现这种原因是因为浏览器会对html文本进行一定的规范化
scrapy 使用的解析器是 lxml ,下面使用lxml解析,只是函数表达不一样,xpath和css选择器的语法一样
安装解析器
pip install beautifulsoup4 lxml html5lib
下面例子中html文本 看到输出结果为空列表,lxml无法正确解析出不规范的标签 思路: 利用 看到被 说明: 参考: 微信扫码登录标签只有闭合标签,没有起始标签
# -*- coding: utf-8 -*-
from lxml import etree
text = """
"""
html = etree.HTML(text)
name = html.xpath("//table/tr[1]/td[1]/text()")
print(name)
# []姓名 年龄
龙泽啦啦 23
餐巾空 25
解决
BeautifulSoup 和 html5lib 先将不规范的html文本转为规范的文本再进行解析
from bs4 import BeautifulSoup
soup = BeautifulSoup(text, "html5lib")
print(soup.prettify())
"""
"""
html = etree.HTML(soup.prettify())
name = html.xpath("//tbody/tr[1]/td[1]/text()")
print(name)
# ['\n 姓名\n ']
姓名 年龄 龙泽啦啦 23 餐巾空 25 html5lib 解析后的html文本变得规范了,自动补全了标签。最后再解析就没问题了
