关于BeautifulSoup4 解析器的说明
一.解析器概述
如同前几章笔记,当我们输入:
soup=BeautifulSoup(response.body)
对网页进行析取时,并未规定解析器,此时使用的是python内部默认的解析器“html.parser”。
解析器是什么呢? BeautifulSoup做的工作就是对html标签进行解释和分类,不同的解析器对相同html标签会做出不同解释。
举个官方文档上的例子:
BeautifulSoup("<a></p>", "lxml")
# <html><body><a></a></body></html>
BeautifulSoup("<a></p>", "html5lib")
# <html><head></head><body><a><p></p></a></body></html>
BeautifulSoup("<a></p>", "html.parser")
# <a></a>
官方文档上多次提到推荐使用"lxml"和"html5lib"解析器,因为默认的"html.parser"自动补全标签的功能很差,经常会出问题。
二.不同解析器的对比
| Parser | Typical usage | Advantages | Disadvantages |
| Python’s html.parser | BeautifulSoup(markup, "html.parser") |
|
|
| lxml’s HTML parser | BeautifulSoup(markup, "lxml") |
|
|
| lxml’s XML parser | BeautifulSoup(markup, "lxml-xml") BeautifulSoup(markup,"xml") |
|
|
| html5lib | BeautifulSoup(markup, "html5lib") |
|
|
可以看出,“lxml”的解析速度非常快,对错误也有一定的容忍性。“html5lib”对错误的容忍度是最高的,而且一定能解析出合法的html5代码,但速度很慢。
我在实际爬取网站的时候,原网页的编码方式不统一,其中有一句乱码,用“html.parser”和“lxml”都解析到乱码的那句,后面的所有标签都被忽略了。而“html5lib”能够完美解决这个问题。
三.from_encoding参数 (对应BeautifulSoup3中的fromEncoding参数)
由于不同网站的编码方式不同,在用BeautifulSoup进行解析时,要注明对应的编码方式。
查看编码方式的方法如下:
import chardet
chardet.detect(response.body)
如:得到
{'confidence': 0.99, 'encoding': 'GB2312'}
由此可知编码方式为GB2312,在析取时,默认的from_encoding参数为utf-8,不是utf-8的应注明。即:
soup=BeautifulSoup(respone.body,"html5lib",from_encoding='gb2312')
转载:https://www.cnblogs.com/KoalaDream/p/4706316.html
关于BeautifulSoup4 解析器的说明的更多相关文章
- 爬虫笔记(四)------关于BeautifulSoup4解析器与编码
前言:本机环境配置:ubuntu 14.10,python 2.7,BeautifulSoup4 一.解析器概述 如同前几章笔记,当我们输入: soup=BeautifulSoup(response. ...
- Python爬虫开发【第1篇】【beautifulSoup4解析器】
CSS 选择器:BeautifulSoup4 Beautiful Soup 也是一个HTML/XML的解析器,主要的功能也是如何解析和提取 HTML/XML 数据. pip 安装:pip instal ...
- 爬虫中BeautifulSoup4解析器
CSS 选择器:BeautifulSoup4 和 lxml 一样,Beautiful Soup 也是一个HTML/XML的解析器,主要的功能也是如何解析和提取 HTML/XML 数据. lxml 只会 ...
- 爬虫——BeautifulSoup4解析器
BeautifulSoup用来解析HTML比较简单,API非常人性化,支持CSS选择器.Python标准库中的HTML解析器,也支持lxml的XML解析器. 其相较与正则而言,使用更加简单. 示例: ...
- Python爬虫(十四)_BeautifulSoup4 解析器
CSS选择器:BeautifulSoup4 和lxml一样,Beautiful Soup也是一个HTML/XML的解析器,主要的功能也是如何解析和提取HTML/XML数据. lxml只会局部遍历,而B ...
- Python HTML解析器BeautifulSoup(爬虫解析器)
BeautifulSoup简介 我们知道,Python拥有出色的内置HTML解析器模块——HTMLParser,然而还有一个功能更为强大的HTML或XML解析工具——BeautifulSoup(美味的 ...
- 第6章 网页解析器和BeautifulSoup第三方插件
第一节 网页解析器简介作用:从网页中提取有价值数据的工具python有哪几种网页解析器?其实就是解析HTML页面正则表达式:模糊匹配结构化解析-DOM树:html.parserBeautiful So ...
- python 之网页解析器
一.什么是网页解析器 1.网页解析器名词解释 首先让我们来了解下,什么是网页解析器,简单的说就是用来解析html网页的工具,准确的说:它是一个HTML网页信息提取工具,就是从html网页中解析提取出“ ...
- XML技术之DOM4J解析器
由于DOM技术的解析,存在很多缺陷,比如内存溢出,解析速度慢等问题,所以就出现了DOM4J解析技术,DOM4J技术的出现大大改进了DOM解析技术的缺陷. 使用DOM4J技术解析XML文件的步骤? pu ...
随机推荐
- php strip_tags() 函数去除 HTML、XML 以及 PHP 的标签。
strip_tags() 函数剥去 HTML.XML 以及 PHP 的标签.strip_tags(string,allow)参数 描述string 必需.规定要检查的字符串.allow ...
- Codeforces 911 三循环数覆盖问题 逆序对数结论题 栈操作模拟
A #include <bits/stdc++.h> #define PI acos(-1.0) #define mem(a,b) memset((a),b,sizeof(a)) #def ...
- ng-model 和ng-bind的区别
也就是说 ng-model是绑定html输入的值-->到控制器的变量,输入值变了,控制器对应的变量message的值页变了,这样,在其他地方就可以使用这个变化后的值 ng-bind 是绑定控制器 ...
- strtok的使用
/* strtok函数的使用 */ #include <stdio.h> #include <stdlib.h> #include <string.h> // 函数 ...
- thinkphp类型转换
类型转换 说白了就是在model类中声明的字段输出类型:其语法如下: 注意strtotime()函数可以将诸如‘2018-12-21’这样的日期字符串转为整数存入数据库 自动完成---等于提前对某一表 ...
- centos6.5搭建zabbix3.4
centos6.5搭建zabbix3.4 参考资料:https://blog.csdn.net/qq_36331560/article/details/80517282 客户端: https://bl ...
- pt-online-schema-change在线修改脚本
pt-online-schema-change在线修改脚本 经过几次在测试环境中使用,发现5.6和5.7可以正常使用.mysql8.0.18版本中,竟然无法使用,感到惊讶.难道mysql8.0.18强 ...
- linux服务器外网内网(双网络)搭建
一共有2台服务器,分别用a,b表示.a双网卡,即有外网也有内网.b只有内网环境.a,b的内网是通过交换机组建.至于外网怎么搭建我就不说了.关键说一说内网是怎么组建的. 如果你对linux不熟悉,对网卡 ...
- $.param()序列化对象
1.$.param(): param() 方法创建数组或对象的序列化表示形式. 序列化的值可在生成 AJAX 请求时用于 URL 查询字符串中. 第一行是原始数据,第二行是序列化后的.$.param( ...
- Mysql 日期函数date_format()
用法:DATE_FORMAT() 函数用于以不同的格式显示日期/时间数据 1.语法 date_fromat(date,format) 说明:date 参数是合法的日期.format 规定日期/时间的输 ...