周末打算写一个脚本,功能是输入今日头条的文章链接,自动下载文章里的图片本地。
遇到坑了。
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 1
地址,参数案例发一下看看
|
2
imn1 2021-02-20 12:13:29 +08:00 1
写到硬盘的文件试一下 zip 软件能否打开
|
3
est 2021-02-20 12:20:16 +08:00 1
目测 LZ 用的是 win98 + py2
|
4
limuyan44 2021-02-20 12:28:24 +08:00 1
你直接发代码吧,这样也好测试,不然帮个忙还得自己写代码,没抓过的人全靠猜。
|
5
dididaren OP py3,已附代码
|
6
Arrowing 2021-02-20 13:29:17 +08:00 via Android 1
内容经过压缩编码(gzip,compress 等)了吧,解压一下,浏览器一般自动解压,爬取的需要自己解压。
|
7
Ptu2sha 2021-02-20 13:34:22 +08:00 1
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 就可以了。 |