Python3 request抓取网页内容乱码解决方案

下面的解决方案也是参照网上其他人的总结,放在这里方面自己日后查看。

        # --- 百度搜索框默认是GBK编码
        orgName_gbk = orgName.encode('gbk')
        orgName_gbk = urllib.parse.quote(orgName_gbk)
        search_url = 'https://zhidao.baidu.com/search?word=' + orgName_gbk + '&ie=gbk&site=-1&sites=0&date=0&pn=' + str(
            k * 10)
        html = requests.get(url=search_url, headers=head, proxies=proxies)
        # --- python3 request解决网页乱码
        myencoding = ""
        if html.encoding == 'ISO-8859-1':
            encodings = requests.utils.get_encodings_from_content(html.text)
            if encodings:
                myencoding = encodings[0]
            else:
                myencoding = html.apparent_encoding
        html_text = html.text.encode('ISO-8859-1').decode(myencoding, 'replace')
        htmol_soup = BeautifulSoup(html_text, "html.parser") # or "lxml"
       

上面解决了两个问题:

1 百度的搜索框默认是gbk编码,所以先把str类型的orgName转成百度能够识别的编码,用的是

urllib.parse.quote

    需要先import urllib.parse

2 Python3 request网页乱码,这是由于有些网页不是utf-8编码的,而是ISO-8859-1编码的,需要先用个判断语句识别网页中的编码,再进行转换

html_text = html.text.encode('ISO-8859-1').decode(myencoding, 'replace')

    转换好后的html_text就可以继续用beautifulsoup或是xpath等进行处理了。

猜你喜欢

转载自blog.csdn.net/dongweionly/article/details/79745095
今日推荐