美文网首页
解析带字体乱码的HTML文件

解析带字体乱码的HTML文件

作者: 隐墨留白 | 来源:发表于2019-12-16 20:35 被阅读0次

处理大众点评带字体乱码的HTML文件需要解决两大难点:

  • 获得字体文件
  • 将字体乱码替换成相对应的字体

第一个难点容易解决,字体文件的链接要么在当前页面中,要么在字体css文件中,然后打开字体文件生成乱码与字体的对照表,这一点是很容易的,我们就来说说第二个难点。
如果整个文件中的乱码只对应一个字体文件那可以像猫眼@face-font破解中那样整体文字替换乱码,但是也有可能出现文件中的乱码对应许多字体文件的情况,那么就需要具体内容具体分析了。
首先是将要替换原带标签的乱码内容提取出来:

  #原HTML中带乱码内容:
  <b><svgmtsi class="shopNum">&#xe8c5;</svgmtsi><svgmtsi class="shopNum">&#xe914;</svgmtsi><svgmtsi class="shopNum">&#xf2ca;</svgmtsi><svgmtsi class="shopNum">&#xe914;</svgmtsi></b>
  #使用etree提取b标签内容:
  res = etree.HTML(response)
  shop_list =res.xpath('//div[@class="content"]/div[2]/ul/li')
  for shop in shop_list:
      shop_pinglun_number_content = shop.xpath('./div[@class="txt"]/div[@class="comment"]/a[@class="review-num"]/b')[0]
      html_str = etree.tostring(shop_pinglun_number_content)
      html_str2 = etree.tostring(shop_pinglun_number_content).decode()
      print(html_str)
      print(html_str2)

  #结果:
  b'<b><svgmtsi class="shopNum">&#59589;</svgmtsi><svgmtsi class="shopNum">&#59668;</svgmtsi><svgmtsi class="shopNum">&#62154;</svgmtsi><svgmtsi class="shopNum">&#59668;</svgmtsi></b>'
  <b><svgmtsi class="shopNum">&#59589;</svgmtsi><svgmtsi class="shopNum">&#59668;</svgmtsi><svgmtsi class="shopNum">&#62154;</svgmtsi><svgmtsi class="shopNum">&#59668;</svgmtsi></b>

看到这是不是一脸懵逼,说好的乱码呢?怎么都变了。反正原理我是不知道的,所以想着换另一种解析方法。
这一次使用parsel库,parsel 是scrapy 出品的,所以如果会scrapy的话这个库应该能很快上手。

res = parsel.Selector(response)
shop_list =res.xpath('//div[@class="content"]/div[2]/ul/li')
for shop in shop_list:
    shop_pinglun_number_content = str(shop.xpath('./div[@class="txt"]/div[@class="comment"]/a[@class="review-num"]/b').extract())
    print(shop_pinglun_number_content)
 #结果  注意这个结果是字符串类型哦
['<b><svgmtsi class="shopNum">\ue8c5</svgmtsi><svgmtsi class="shopNum">\ue914</svgmtsi><svgmtsi class="shopNum">\uf2ca</svgmtsi><svgmtsi class="shopNum">\ue914</svgmtsi></b>']

好了这次能取到了带乱码的内容了。接下来就是替换了正确文字了。
还有个问题需要注意:

content = shop.xpath('./div[@class="txt"]/div[@class="comment"]/a[@class="review-num"]/b').extract()
print(content)
print(type(content))
print(content[0])
# 输出
['<b><svgmtsi class="shopNum">\ue8c5</svgmtsi><svgmtsi class="shopNum">\ue914</svgmtsi><svgmtsi class="shopNum">\uf2ca</svgmtsi><svgmtsi class="shopNum">\ue914</svgmtsi></b>']
<class 'list'>
<b><svgmtsi class="shopNum"></svgmtsi><svgmtsi class="shopNum"></svgmtsi><svgmtsi class="shopNum"></svgmtsi><svgmtsi class="shopNum"></svgmtsi></b>

列表中元素取出来后乱码会不可见 。如果有哪位大佬知道怎么解决或者还有更好地方法,请告知,谢谢。

相关文章

  • 解析带字体乱码的HTML文件

    处理大众点评带字体乱码的HTML文件需要解决两大难点: 获得字体文件 将字体乱码替换成相对应的字体 第一个难点容易...

  • 任务4-html1

    1. 网页乱码的问题是如何产生的?如何解决? 网页乱码是保存html文件的时候的编码模式和解析html文件时候的编...

  • HTML基础问题搜集及解决

    HTML基础问题搜集及解决 1. 网页乱码是如何产生的,怎么解决? 答:我们浏览的网页是浏览器解析html文件呈现...

  • css中文字体乱码解决方案

    css中文字体乱码解决方案 css中文字体乱码解决方案:把css编码和html页面编码统一起来。如果html页面是...

  • react-native-htmlview使用

    字体加粗react-native-htmlview解析html 需要前后都留空,才能正确解析 字体样式HTMLV...

  • javascript判断上传文件的编码

    原文出处请看这里解析.csv文件乱码解决

  • PHP解决乱码问题

    FAQ 第一种:HTML文件中中文出现乱码 在HTML5文件中如下 第二种:HTML与PHP代码混合出现乱码

  • HTML认识1

    网页乱码的问题是如何产生的?怎样解决? 文件和浏览器解析的编码不一致 保存文件格式设置为utf-8编码 html文...

  • Servlet常见乱码及解决办法

    内容概要: 1.数据库乱码 2.控制台乱码 3.html网页乱码 4.下载文件文件名乱码 准备工作 1.查询"中国...

  • 软件字体乱码的解决办法

    有时候在打开cad文件时,所有对话框菜单界面变成了乱码。主要cad软件字体文件夹里的字体与系统自带的字体有冲突造成...

网友评论

      本文标题:解析带字体乱码的HTML文件

      本文链接:https://www.haomeiwen.com/subject/qcmdnctx.html