Python 百度百科爬虫结果乱码问题

2019-03-20 15:02:17 +08:00
 jianzhao123

楼主 python 学的不是很深,仿照网上实例,写了个爬虫 结果输出的好多乱码,也不是很清楚,target="_blank"后面这类属于什么编码,希望有了解的朋友指点下,谢谢:)

2414 次点击
所在节点    Python
13 条回复
xiri
2019-03-20 15:14:19 +08:00
额,一般不是全转 utf-8 就可以了吗?
jianzhao123
2019-03-20 15:18:01 +08:00
@xiri 貌似不行啊,Python3.X 源码文件默认使用 utf-8 编码的
codechaser
2019-03-20 15:19:26 +08:00
@jianzhao123 至少把相关代码贴一下吧?看这个好像就是解码的问题
holajamc
2019-03-20 15:23:59 +08:00
In [1]: import requests

In [2]: url = 'https://baike.baidu.com/item/Python/407313'

In [3]: headers = {'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_3) AppleWebK
...: it/537.36 (KHTML, like Gecko) Chrome/73.0.3683.75 Safari/537.36'}

In [4]: r = requests.get(url=url, headers=headers)

In [5]: '计算机程序设计语言' in r.text
Out[5]: False

In [6]: r.encoding = 'utf8'

In [7]: '计算机程序设计语言' in r.text
Out[7]: True
ipwx
2019-03-20 15:24:02 +08:00
<!DOCTYPE html>
<!--STATUS OK-->
<html>


<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=Edge" />
<meta name="referrer" content="always" />
<meta name="description" content="百度百科是一部内容开放、自由的网络百科全书,旨在创造一个涵盖所有领域知识,服务所有互联网用户的中文知识性百科全书。在这里你可以参与词条编辑,分享贡献你的知识。">
<title>百度百科_全球最大中文百科全书</title>
<link rel="shortcut icon" href="/favicon.ico" type="image/x-icon" />
<link rel="icon" sizes="any" mask href="//www.baidu.com/img/baidu.svg">
...

----

所以是 UTF-8。楼主的问题不在于不会 Python,而是不会 HTML。
xiri
2019-03-20 15:25:43 +08:00
@jianzhao123 python 的源码文件用 utf-8 跟这个没关系,你抓内容都时候要解码成 utf-8。
比如你用 requests 请求的话,要这样转一下码:
'''
req = requests.get(url = http........)
req.encoding = 'utf-8'
'''
jianzhao123
2019-03-20 15:27:55 +08:00
@ipwx 楼主不是科班出身对 HTML 不是太了解,请问怎么操作呀,实在是不清楚 😂
jianzhao123
2019-03-20 15:29:55 +08:00
@xiri 道行太浅,多谢指点,OK 了
holajamc
2019-03-20 15:31:37 +08:00
@holajamc 流程大概是这样的,HTTP 的 response 合理的规范会在 Content-Type 中附带 chatset 信息,告知客户端服务端会使用什么样子的编码,比如你可以试试访问 github,看一看 response 的 headers 部分
但是这种设想都是十分美好的事情,比如百度百科的 Content-Type 仅仅只有页面类型,因此 requests 会使用 iso-8859
当然了也可以使用 requests 进行编码推测,这是一件开销很大的事情所以不要尝试~
holajamc
2019-03-20 15:32:44 +08:00
@holajamc emmm chatset -> charset
vexetron
2019-03-20 15:32:50 +08:00
@jianzhao123 这和科班没关系
jianzhao123
2019-03-20 15:36:40 +08:00
@holajamc 明白了,谢谢
ipwx
2019-03-20 16:30:37 +08:00
@jianzhao123 注意这行:

<meta charset="UTF-8">

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/546598

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX