python:requests获取网页源码的时候乱码

 栾先益_319 发布于 2022-11-02 00:57
def getHtml(url,timeout=20):
    try:
        headers = {
            'Accept-Language': 'zh-cn',
            'Content-Type': 'application/x-www-form-urlencoded',
            'User-Agent': 'Mozilla/4.0 (compatible MSIE 6.00 Windows NT 5.1 SV1)',
        }
        r = requests.get(url,headers=headers,timeout=timeout)
        html = r.text
        return html
    except Exception,ex:
        return None
soup = BeautifulSoup(getHtml())
print soup.title

以上代码,如何改进,才能在获取任何网页标题的时候,不至于乱码。
注:提取部分网页的标题的时候会直接乱码显示。如何改进,才能通用?

6 个回答
  • with open('r.txt','w',encoding='utf-8') as ff:
    ff.write(r.text)

    2022-11-03 18:43 回答
  • 先看看是不是编码问题,如果不是的话,建议再看看是不是gzip加密了,如果是的话需要解密,Python有自带的gzip库,
    import gzip

    g = gzip.open(path, 'rb')
    然后对象g就能当普通文件对象进行操作了(虽然type不是'file')

    2022-11-03 19:00 回答
  • 通用比較困難,有些不給編碼又使用奇怪編碼的網頁很難確定用的什麼。

    不過只要知道網頁的編碼,在讀取的時候選區合適的解碼器就好了。

    2022-11-03 19:03 回答
  • 参考一下这个头文件

    ,试试

    2022-11-03 19:07 回答
  • 查看一下网页的编码,比如是gbk的话,就r.encoding='gbk'。一下内容摘自requests文档

    Requests会自动解码来自服务器的内容。大多数unicode字符集都能被无缝地解码。

    请求发出后,Requests会基于HTTP头部对响应的编码作出有根据的推测。当你访问 r.text 之时,Requests会使用其推测的文本编码。你可以找出Requests使用了什么编码,并且能够使用 r.encoding 属性来改变它:

    r.encoding
    'utf-8'
    r.encoding = 'ISO-8859-1'
    如果你改变了编码,每当你访问 r.text ,Request都将会使用 r.encoding 的新值。你可能希望在使用特殊逻辑计算出文本的编码的情况下来修改编码。比如 HTTP 和 XML 自身可以指定编码。这样的话,你应该使用 r.content 来找到编码,然后设置 r.encoding 为相应的编码。这样就能使用正确的编码解析 r.text 了。

    2022-11-03 19:08 回答
  • 有个 chardet 用来检测编码的,如果安装了,BeautifulSoup 貌似会自动调用这个库来检测编码并 decode 成 unicode。

    对了,上面是从网上看的。

    总之拿到文件编码就好办了。

    2022-11-03 19:09 回答
撰写答案
今天,你开发时遇到什么问题呢?
立即提问
热门标签
PHP1.CN | 中国最专业的PHP中文社区 | PNG素材下载 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有