周末打算写一个脚本,功能是输入今日头条的文章链接,自动下载文章里的图片本地。
遇到坑了。
python requests 能成功获取到文章数据,用 charles 抓包也可以看到 requests.get 是成本获取到了文章数据,但是在本地解码的时候,无论是用 response.text,还是 response.content.decode,还是直接把 respons 接收到的数据以二进制写入文本,要么是乱码,要么是报错。( charles 抓包里查看是正常的数据)
respose 解码时试过 gbk,utf-8,iso ; decode 参数试过 ignore, replace 也没用。
谷歌百度也搜不到可用的解决方法。
import requests verify=False headers = ''' accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9 accept-encoding: gzip, deflate, br accept-language: zh-CN,zh;q=0.9,zh-TW;q=0.8,en;q=0.7 cache-control: no-cache cookie: tt_webid=6930433366274721287; csrftoken=50dc3846aa3e01cf8e7cc3cacd3cb664; tt_webid=6930433366274721287; _tea_utm_cache_2256={%22utm_source%22:%22copy_link%22%2C%22utm_medium%22:%22toutiao_ios%22%2C%22utm_campaign%22:%22client_share%22}; s_v_web_id=verify_kld3dq66_Wvi5ATKw_nvWF_4CHH_9aBi_wzhdhfONq7HB; _ga=GA1.2.1782351744.1613793452; _gid=GA1.2.504008286.1613793452; csrftoken=50dc3846aa3e01cf8e7cc3cacd3cb664; __ac_nOnce=06030995f005059b3fa30; __ac_signature=_02B4Z6wo00f01bNanKAAAIDB2pGskn.jLh2zfpgAAAznlJs4jAp.SxXUbLBYvi0aqQmu7OBPOm6M5vvKPJGKjxqNVGt0Cc2hHsiQ0bkQbsLQv.C4ZZyAHsoKG9tZtyfcvupCp.4rC56vmyGcb8; MONITOR_WEB_ID=72226c84-9c57-4b0e-931c-6a99c225be9d; tt_scid=w3cIoL.syHtp3f6lhdBFt08cmgEdko8ObFMxYA7uMNdRp-aVs1w0x852q6pFS7bybc1a dnt: 1 pragma: no-cache sec-ch-ua: "Chromium";v="88", "Google Chrome";v="88", ";Not A Brand";v="99" sec-ch-ua-mobile: ?0 sec-fetch-dest: document sec-fetch-mode: navigate sec-fetch-site: none sec-fetch-user: ?1 upgrade-insecure-requests: 1 user-agent: Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/42.0.2311.135 Safari/537.36 Edge/12.10240 ''' def todict(headers): return dict([ l.split(': ') for l in headers.split('\n') if l]) def downloadImages(url,headers): headers = todict(headers) res = requests.get(url=url,headers=headers,verify=False).content.decode('utf-8','ignore') print(res) if __name__ == '__main__': url = 'https://www.toutiao.com/a6931116005670371853/' downloadImages(url,headers)
1 maobukui 2021-02-20 12:06:38 +08:00 via iPhone ![]() 地址,参数案例发一下看看 |
![]() | 2 imn1 2021-02-20 12:13:29 +08:00 ![]() 写到硬盘的文件试一下 zip 软件能否打开 |
![]() | 3 est 2021-02-20 12:20:16 +08:00 ![]() 目测 LZ 用的是 win98 + py2 |
![]() | 4 limuyan44 2021-02-20 12:28:24 +08:00 ![]() 你直接发代码吧,这样也好测试,不然帮个忙还得自己写代码,没抓过的人全靠猜。 |
5 dididaren OP py3,已附代码 |
![]() | 6 Arrowing 2021-02-20 13:29:17 +08:00 via Android ![]() 内容经过压缩编码(gzip,compress 等)了吧,解压一下,浏览器一般自动解压,爬取的需要自己解压。 |
![]() | 7 Ptu2sha 2021-02-20 13:34:22 +08:00 ![]() accept-encoding: gzip, deflate, br 去掉 |
![]() | 10 fucUup 2021-02-20 16:53:28 +08:00 Chrome/42.0 你是古董机 |
![]() | 11 omph 2021-02-20 20:18:18 +08:00 运行环境:linux,locale 默认 utf8 代码输出正常。重定向存为 html 文件,打开正常 |
![]() | 12 vone 2021-02-20 21:39:56 +08:00 6 楼正解,br 压缩的问题,requests 默认不能解析 br 压缩后的 Body 。 请求头的 accept-encoding 参数删掉 br 就可以了。 |