使用python代码抓取网页源代码本地打开显示乱码解决

本实例是通过使用浏览器本地存放的cookie登录人人网的简单代码来说明如何解决乱码问题的

from urllib import request

if __name__ == '__main__':
    url = "http://www.renren.com/967817731/profile"

    headers = {"Cookie":"anonymid=jlgmarpu-du56ow; depovince=GW; _r01_=1; JSESSIONID=abcp1NqNC5_YnhQ_melww; ick_login=00838244-64d5-4725-93c9-23507ed0d3cc; loginfrom=null; jebe_key=be7597ad-5f72-4827-b76e-b2ab29f46a18%7Cf9ffc3eebe4f17a06c225425016a816a%7C1535636483805%7C1%7C1535636484232; wp_fold=0; t=31f0b003d8d79d5c5b67d189dcff59c62; societyguester=31f0b003d8d79d5c5b67d189dcff59c62; id=967817732; xnsid=74d456a9; jebecookies=019dc91b-8da1-4a51-9704-9c4ae5c51fdf|||||"}

    req = request.Request(url,headers=headers)

    rsp = request.urlopen(req)

    html = rsp.read().decode()

    with open("rsp.html","w") as f:
        f.write(html)

写好之后debug没有错误,生成的rsp.html双击打开发现是一堆乱码,如下图示(局部代码):
使用python代码抓取网页源代码本地打开显示乱码解决_第1张图片
此时小白可能会考虑到去python源代码里面添加编码格式,这是错误的,因为python文件里面的编码格式的作用域只是python文件,只保证python文件里面的字符显示正常,与运行结果无关。
正确的做法是写html文件的时候指定编码格式,此处就是要在open(“rsp.html”,”w”)的open方法里面传递encoding=”utf-8”或者相应的你需要的编码格式就可以正常显示,python源代码和html结果如下图示(局部代码):

from urllib import request

if __name__ == '__main__':
    url = "http://www.renren.com/967817732/profile"

    headers = {"Cookie":"anonymid=jlgmarpu-du56ow; depovince=GW; _r01_=1; JSESSIONID=abcp1NqNC5_YnhQ_melww; ick_login=00838244-64d5-4725-93c9-23507ed0d3cc; loginfrom=null; jebe_key=be7597ad-5f72-4827-b76e-b2ab29f46a18%7Cf9ffc3eebe4f17a06c225425016a816a%7C1535636483805%7C1%7C1535636484232; wp_fold=0; t=31f0b003d8d79d5c5b67d189dcff59c62; societyguester=31f0b003d8d79d5c5b67d189dcff59c62; id=967817732; xnsid=74d456a9; jebecookies=019dc91b-8da1-4a51-9704-9c4ae5c51fdf|||||"}

    req = request.Request(url,headers=headers)

    rsp = request.urlopen(req)

    html = rsp.read().decode()

    with open("rsp.html","w",encoding="utf-8") as f:
        f.write(html)

运行得到的html部分源码如下
使用python代码抓取网页源代码本地打开显示乱码解决_第2张图片
如此,成功解决!

这个问题之所以想歪有一点原因就是我们只是编写了python代码,没有编写html,所以小白第一时间会想是自己忘记在代码中添加编码格式了,但实际上我们编写的代码已经帮我们写(复制)了一个html文件,我们要在这个由代码编写的html文件中添加编码格式才能解决该问题

你可能感兴趣的:(Python使用篇)