python requests模块下载文件_用Python的requests模块下载文件出现413

Python新手,想写个脚本去批量下载链接这个站点的文件。其中一个文件的下载页面是这样的:链接。

分析这个下载页面,发现点下载按钮的时候会向http://cdn.share-byte.net/d.php 这个URL去post,传递s和k两个值,这两个值可以通过正则匹配到,已经获得。

现在是把post返回的结果写文件,发现返回结果是个错误的HTML文件提示,不像浏览器点下载直接下载二进制文件,错误文件内容如下:

https://gist.github.com/zxmLoveLife/8680558

我代码里用到了Python的第三方模块requests和pyquery.代码如下,高手帮分析下,感激不尽。

代码截图如下:

线上浏览如下:

https://gist.github.com/zxmLoveLife/8680596

data=json.dumps(params)

是以json格式POST上去的,表单提交直接使用

params

即可。

使用

json.dumps(params)

提交的数据是:

{"s": "bfcaeee4d1dce32f0e5945b3705bd870", "k": "jfKpK8"}

而直接提交params,提交的数据是:

s=bfcaeee4d1dce32f0e5945b3705bd870&k=jfKpK8

如 @依云 所说,把返回的头部当作请求头部也是错的。

下面是我的代码:

import requests, re

from pyquery import PyQuery as pq

url = 'http://www.share-byte.net/jfKpK8'

session = requests.Session()

resp = session.get(url)

d = pq(resp.text)

script = d('#downloadFile').prev('script').text()

t0 = re.findall(r"t\[0\] = "(\w*)"", script)

t1 = re.findall(r"t\[1\] = "(\w*)"", script)

params = {'s': t1[0], 'k': t0[0]}

r = session.post('http://cdn.share-byte.net/d.php', data=params)

print(r.status_code)

print(r.content)

谢谢 @依云 @yiner ,dict是可以直接传给post函数的,另外,把返回的头部当作请求头部也是一个问题。

Content-Type

也是可以去掉的。

不要把 HTTP 响应的标头作为 HTTP 请求标头发出去…………

你那个

req

其实应该叫

res(ponse)

才对。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值