您当前的位置: 首页 >  Python

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

彭世瑜 发布时间:2018-08-08 14:02:55 ,浏览量:4

问题

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

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

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

安装解析器

pip install beautifulsoup4 lxml html5lib

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

# -*- coding: utf-8 -*-

from lxml import etree

text = """

    姓名年龄
    龙泽啦啦23
    餐巾空25

"""

html = etree.HTML(text)
name = html.xpath("//table/tr[1]/td[1]/text()")
print(name)
# []

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

解决

思路:

利用 BeautifulSouphtml5lib 先将不规范的html文本转为规范的文本再进行解析 这里写图片描述


from bs4 import BeautifulSoup

soup = BeautifulSoup(text, "html5lib")
print(soup.prettify())
"""


    姓名年龄
    龙泽啦啦23
    餐巾空25


"""

html = etree.HTML(soup.prettify())
name = html.xpath("//tbody/tr[1]/td[1]/text()")
print(name)
# ['\n      姓名\n     ']

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

说明:

参考:

  1. scrapy关于tbody标签的问题
  2. Beautiful Soup 4.2.0 文档
  3. prettify() 方法将Beautiful Soup的文档树格式化后以Unicode编码输出
关注
打赏
1688896170
查看更多评论

彭世瑜

暂无认证

  • 4浏览

    0关注

    2727博文

    0收益

  • 0浏览

    0点赞

    0打赏

    0留言

私信
关注
热门博文
立即登录/注册

微信扫码登录

0.1158s