玩儿 “爬虫” 朋友最爱,都2021了,这个Python库你还不知道吗?

简介: 玩儿 “爬虫” 朋友最爱,都2021了,这个Python库你还不知道吗?

1.chardet库的安装与介绍

玩儿过爬虫的朋友应该知道,在爬取不同的网页时,返回结果会出现乱码的情况。比如,在爬取某个中文网页的时候,有的页面使用GBK/GB2312,有的使用UTF8,如果你需要去爬一些页面,知道网页编码很重要的。


虽然HTML页面有charset标签,但是有些时候是不对的,那么chardet就能帮我们大忙了。使用 chardet 可以很方便的实现字符串/文件的编码检测。


如果你安装过Anaconda,那么可以直接使用chardet库。如果你只是安装了Python的话,就需要使用下面几行代码,完成chardet库的安装。


pip install chardet


接着,使用下面这行代码,导入chardet库。


import chardet


2.chardet库的使用

这个小节,我们分3部分讲解。


2.1 chardet.detect()函数

detect()函数接受一个参数,一个非unicode字符串。它返回一个字典,其中包含自动检测到的字符编码和从0到1的可信度级别。


encoding:表示字符编码方式。

confidence:表示可信度。

language:语言。

光看这个解释,大多数朋友可能看不懂,下面我们就用例子来讲述这个函数。

2.2 使用该函数分别检测gbk、utf-8和日语

检测gbk编码的中文:


str1 = '大家好,我是黄同学'.encode('gbk')
chardet.detect(str1)
chardet.detect(str1)["encoding"]


结果如下:

image.png

检测的编码是GB2312,注意到GBK是GB2312的父集,两者是同一种编码,检测正确的概率是99%,language字段指出的语言是’Chinese’。


检测utf-8编码的中文:


str2 = '我有一个梦想'.encode('utf-8')
chardet.detect(str2)
chardet.detect(str2)["encoding"]


结果如下:

image.png

检测一段日文:


str3 = 'ありがとう'.encode('euc-jp')
chardet.detect(str3)
chardet.detect(str3)


结果如下:

image.png


2.3 如何在“爬虫”中使用chardet库呢?

我们以百度网页为例子,进行讲述。

image.png

这个网页的源代码,使用的是什么编码呢?我们看看源代码:

image.png

从图中可以看到,是utf-8字符编码。


如果不使用chardet库,获取网页源代码的时候,怎么指定字符编码呢?


import chardet
import requests
headers = {'User-Agent':'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/55.0.2883.87 Safari/537.36'}
response = requests.get('https://www.baidu.com',headers=headers)
response.encoding = "utf-8"
response.text


结果如下:

image.png

你会发现:正确指定编码后,没有乱码。如果你将编码改为gbk,再看看结果。此时已经乱码。

image.png

如果使用chardet库,获取网页源代码的时候,可以轻松指定字符编码!


import chardet
import requests
headers = {'User-Agent':'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/55.0.2883.87 Safari/537.36'}
response = requests.get('https://www.baidu.com',headers=headers)
# 注意下面这行代码,是怎么写的?
response.encoding = chardet.detect(response.content)['encoding']
response.text


结果如下:

image.png

编码不用我们自己查找,也不用猜,直接交给chardet库去猜测,正确率还高。


相关文章
|
6天前
|
Python
手撕Python!模块、包、库,傻傻分不清?一分钟带你弄明白!
手撕Python!模块、包、库,傻傻分不清?一分钟带你弄明白!
19 1
|
7天前
|
数据采集 存储 JSON
Python爬虫开发:BeautifulSoup、Scrapy入门
在现代网络开发中,网络爬虫是一个非常重要的工具。它可以自动化地从网页中提取数据,并且可以用于各种用途,如数据收集、信息聚合和内容监控等。在Python中,有多个库可以用于爬虫开发,其中BeautifulSoup和Scrapy是两个非常流行的选择。本篇文章将详细介绍这两个库,并提供一个综合详细的例子,展示如何使用它们来进行网页数据爬取。
|
6天前
|
安全 程序员 API
几个被淘汰的Python库,请不要再用!
几个被淘汰的Python库,请不要再用!
18 0
|
9天前
|
数据采集 存储 JSON
Python爬虫
【8月更文挑战第11天】
27 14
|
2天前
|
数据采集 存储 中间件
Python进行网络爬虫:Scrapy框架的实践
【8月更文挑战第17天】网络爬虫是自动化程序,用于从互联网收集信息。Python凭借其丰富的库和框架成为构建爬虫的首选语言。Scrapy作为一款流行的开源框架,简化了爬虫开发过程。本文介绍如何使用Python和Scrapy构建简单爬虫:首先安装Scrapy,接着创建新项目并定义爬虫,指定起始URL和解析逻辑。运行爬虫可将数据保存为JSON文件或存储到数据库。此外,Scrapy支持高级功能如中间件定制、分布式爬取、动态页面渲染等。在实践中需遵循最佳规范,如尊重robots.txt协议、合理设置爬取速度等。通过本文,读者将掌握Scrapy基础并了解如何高效地进行网络数据采集。
24 6
|
2天前
|
存储 JSON API
Pydantic:目前最流行的Python数据验证库
在处理来自系统外部的数据,如API、终端用户输入或其他来源时,我们必须牢记开发中的一条基本原则:“永远不要相信用户的输入”。 因此,我们必须对这些数据进行严格的检查和验证,确保它们被适当地格式化和标准化。这样做的目的是为了确保这些数据符合我们的程序所需的输入规范,从而保障项目能够正确且高效地运行。
|
4天前
|
存储 缓存 索引
Python中的NumPy库详解
Python中的NumPy库详解
|
6天前
|
XML 自然语言处理 关系型数据库
CasADi - 最优控制开源 Python/MATLAB 库4
CasADi - 最优控制开源 Python/MATLAB 库
18 4
|
6天前
|
Linux API C++
CasADi - 最优控制开源 Python/MATLAB 库3
CasADi - 最优控制开源 Python/MATLAB 库
21 4
|
6天前
|
算法 数据可视化 机器人
Pinocchio - 开源多刚体动力学 C++、Python库
Pinocchio - 开源多刚体动力学 C++、Python库
10 2