记一次坑,requests中的编码问题

前天在写央广网爬虫的时候遇到一个很奇怪的问题,就是在用xpath取数据的时候总是为空,而且数据明明就在源码上,并不是用JS传的,想了好久没想出来,后来发现是编码的问题。
python中有一个字符编码检测库叫charade,requests其实也能检测编码,不过有时候会不准确。charade还比较好用

    import requests
    from lxml import etree
    import chardet

    def test():
        headers = {
        'User-Agent': 'Mozilla/5.0 (Windows NT 6.1; Win64; x64; rv:62.0) Gecko/20100101 Firefox/62.0',        
        }
        # 央广网中随意选取的一个详情页测试的url
        url = 'http://news.cnr.cn/theory/gc/20180914/t20180914_524360107.shtml'
        req = requests.get(url, headers=headers)
        if req.status_code == 200:          
            res_cont = update_code(req.content)
            try:
                com = etree.HTML(res_cont)
            except:
                com = etree.HTML(req.content)

            article = ''.join(com.xpath('//div[@class="TRS_Editor"]/p//text()'))
            # 如果不调用下面的update_code函数,这里打印出来的会是空的
            print(article)
    
    # 可以写成一个模块,每次基本上都可以用,有的需要改成utf-8编码格式,主要看网站
    def update_code(content):
        try:
            code_content = content.decode('gb18030', errors='ignore')
            return code_content
        except:
            try:
                return content.decode()
            except:
                encod = chardet.detect(content)['encoding']
                return content.decode(encod)

    test()

这样才可以取到数据。

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 作者:Python学习 链接:https://www.jianshu.com/p/c2473f3ebf75 环境...
    步_尘阅读 7,281评论 1赞 40
  • 如果家里有即将上幼儿园的孩子,那么家长对蒙特梭利以及华德福就不会陌生,如今的幼儿园,如果不抬出蒙氏教育、华德福的...
    木容惠阅读 2,248评论 0赞 3
  • 食物: 2、山竹 又称莽吉柿、风果、倒稔子,属藤黄科藤黄属,有热带“果后”之美称。在东南亚,山竹果皮一直作为泰国传...
    张竟方阅读 308评论 0赞 0
  • 《大蒜换宝石》讲的是主人公阳阳的故事。 阳阳的爸爸是摩尔岛上最有钱的商人,他想造一支世界上最大的船队。因此不惜花尽...
    是海洋ya阅读 1,669评论 1赞 1
  • 在外我是黑先生在内我是粉小姐,在人海中黑先生最好认也是最不起眼的,一身黑衣, 黑裤,黑色高跟鞋。而粉小姐就不同...
    黑先生和粉小姐阅读 298评论 0赞 1

友情链接更多精彩内容