python 知识星球文件下载

#!/usr/bin/python3
# -*- coding: UTF-8 -*-

import requests
import json
from urllib.parse import quote
import os
from pyquery import PyQuery as pq
import datetime

headers = {
‘Authorization‘: ‘37923FBC-C87D-454C-902D-A81DB0834605‘,
‘x-request-id‘: "73e67a6f-cf88-4c10-26da-a30441464ed5",
‘accept‘: "application/json, text/plain, */*",
‘host‘: "api.zsxq.com",
‘connection‘: "keep-alive",
‘referer‘: "https://wx.zsxq.com/dweb/",
‘user-agent‘: "Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/69.0.3497.100 Safari/537.36",
}

def readtopicurl(filename):
with open(filename, ‘r‘) as f:
url = f.read()
return url

def writetopicurl(filename,url):
try:
with open(filename, ‘w‘) as f:
f.write(url)
return True
except:
return False

def getDownloadURL(file_id):
file_url = ‘https://api.zsxq.com/v1.10/files/{0}/download_url‘.format(file_id)
return file_url

def get_topic_list(topics_url, end_time=None):
if end_time:
url = topics_url + ‘&end_time=‘ + quote(end_time)
return url

def get_endtime(create_time):
try:
# int -1 后需要进行补 0 处理,test_str.zfill(3)
end_time = create_time[:20]+str(int(create_time[20:23])-1).zfill(3)+create_time[23:]
# 时间出现整点时需要特殊处理,否则会出现 -1
if create_time[20:23] == ‘000‘:
temp_time = datetime.datetime.strptime(create_time, "%Y-%m-%dT%H:%M:%S.%f+0800")
temp_time += datetime.timedelta(seconds=-1)
end_time = temp_time.strftime("%Y-%m-%dT%H:%M:%S") + ‘.999+0800‘
print(‘end_time:{0}‘.format(end_time))
return end_time
except IndexError :
print("error")
return None

def request_topics_url(topics_url,headers):
topics_page = requests.get(topics_url, headers=headers)
if topics_page.status_code == 200:
resp_data = json.loads(topics_page.text)
return resp_data
else:
return None

def download_file(index, url, file_name,filedir):
currentpath=os.getcwd()
if not os.path.exists(filedir):
os.mkdir(filedir)
file_fullpath = ‘{0}\{1}\{2}‘.format(currentpath,filedir,file_name)
if os.path.exists(file_fullpath):
return True
file_res = requests.get(url)
#print(‘file_res.status_code:{0}‘.format(file_res.status_code))
if file_res.status_code == 200:
with open(file_fullpath, ‘wb‘) as f:
f.write(file_res.content)
print(‘----第 {0}个文件:{1}下载成功!‘.format(index+1,file_name))
return True

else:
return False

def download_file_url(url):
doc = pq(requests.get(url,headers=headers).text)
res_data = json.loads(doc(‘p‘).text())
fileurl = res_data[‘resp_data‘][‘download_url‘]
return fileurl

if __name__ =="__main__":
init_topics_url = ‘https://api.zsxq.com/v1.10/groups/454548818428/files?count=20‘
#以下载老齐的读书圈为例
urlfile = ‘temp_topics_url.txt‘
filedir = ‘读书圈文件‘
if not os.path.exists(urlfile):
writetopicurl(urlfile, init_topics_url)
topic_urls = init_topics_url
else:
topic_urls = readtopicurl(urlfile)

print(‘file_urls:{0}‘.format(topic_urls))

while True:
resp_data = request_topics_url(topic_urls,headers)
filelist = resp_data[‘resp_data‘][‘files‘]
for index , urlinfo in enumerate(filelist):
file_id = urlinfo[‘file‘][‘file_id‘]
file_name = urlinfo[‘file‘][‘name‘]
create_time = urlinfo[‘file‘][‘create_time‘]
downloadurl = getDownloadURL(file_id)
file_url = download_file_url(downloadurl)
download_file(index,file_url, file_name,filedir)
if index == 19:
end_time = get_endtime(create_time)
topic_urls = get_topic_list(init_topics_url,end_time)
writetopicurl(urlfile, topic_urls)
print(‘topic_urls:{0}‘.format(topic_urls))
#print(‘end_time:‘.format(end_time))
if len(filelist) < 20:
print(‘全部文件下载完成!!!‘)
break

原文地址:http://blog.51cto.com/xumingjiang/2329719

时间: 2024-11-11 03:01:34

python 知识星球文件下载的相关文章

Python知识总结

Python知识总结 一.python简介 1.Python简介 Python是一种解释型.交互式.面向对象.是初学者的语言. 2.python特点 ①易于学习 ②易于阅读 ③易于维护 ④一个广泛的标准库 ⑤互动模式 ⑥便携式 ⑦可扩展 ⑧数据库 ⑨GUI编程 ⑩可扩展性 3.python支持tab补全功能: >>> import readline,rlcompleter >>> readline.parse_and_bind('tab: complete') 可以将上

python 简单的文件下载

需要使用urllib2库 import urllib2def download(url, szFileName = ""): #szFileName:下载文件到的目标路径 if szFileName == "": szFileName = url[url.rfind('/') + 1:] print "正在下载" + szFileName + "..." f = urllib2.urlopen(url) data = f.re

[python]学习Django中的python知识拾遗

1.使用正则表达式进行URL匹配 urlpatterns = patterns('', # ... (r'^time/plus/\d+/$', hours_ahead), # ... ) (1)使用r代表字符串是原始字符串,表示python不会对立面的反斜杠\转义符进行处理,使用正则表达式一般使用原始字符串. (2)使用\d+表示匹配1个或者多个数字,如果限定只能使用两个数字,则\d{1,2}. (3)如果要把正则表达式的某个数作为参数,则用小括号包起来,如(r'^time/plus/(\d{1

欢迎加入我的知识星球:C语言解惑课堂

我在知识星球上开通了一个有关C语言基础答疑解惑的星球,它叫做:“C语言解惑课堂”.看这名字你就知道虽然有点俗,俗才贴近你的真正需求嘛!这是一个专门帮助C语言初学者答疑解惑的课堂.嗯~~~,关于这个星球我是有一些想法的,各位看官请继续看! 一.我为啥要开通这个星球? 我在知乎.今日头条.CSDN.微信公众号等平台做C语言基础答疑工作差不多有三四年时间了,这期间我有跟不少同学交流,在为同学们答疑解惑的过程中我有以下几点感触,不知你们是否感同身受. 1.C语言基础的疑难点太多了 很多同学学习C程序课程

微信公众、免费知识星球(附比特币链接)

文章一般都会在公众号抢先预览,一个系列出差不多的时候一般博客园汇总一下(文章很长) 微信公众号:逸鹏说道(dotnetcrazy) 免费版的知识星球,目的给大家一个交流的社区环境: Bitcoin:18i4JpL6g54yAPAefdtgqwRrZ43YJwAV5z Ether:使用ETH钱包扫描这个二维码 BitcoinCash:使用Bitcoin Cash钱包扫描此QR码 原文地址:https://www.cnblogs.com/dotnetcrazy/p/9111781.html

《Python知识手册》

<Python知识手册>1. <a href="https://mp.weixin.qq.com/s/rNY4-_Li5R5B4IBSjnCD0A">手册介绍链接</a> 2. <a href="https://github.com/liyangbit/Python-Knowledge-Handbook">手册 Github 地址</a> 3. <Python知识手册>下载链接https://p

学python知识第一天

总结第一天学python的基础知识: 一. Python介绍 python的创始人为吉多·范罗苏姆(Guido van Rossum).1989年的圣诞节期间,吉多·范罗苏姆为了在阿姆斯特丹打发时间,决心开发一个新的脚本解释程序,作为ABC语言的一种继承.   最新的TIOBE排行榜,Python赶超PHP占据第五, Python崇尚优美.清晰.简单,是一个优秀并广泛使用的语言. 目前Python主要应用领域: 云计算: 云计算最火的语言, 典型应用OpenStack WEB开发: 众多优秀的W

python知识简单总结 - 语言基础 (一)

语言基础 基础知识 pycharm快捷键 快速复制 光标定位到某行或者选中很多行 crtl/command + d 注释 光标定位到某行或者选中很多行 crtl/command + / 删除(剪切) 光标定位到某行或者选中很多行 crtl/command + d pycharm 简单设置 python模版文件设置 command + , -> Editor -> Code Style -> File and Code Templaates -> Python Script 解释器修

python知识大全目录,想学的看过来!

Python总结篇--知识大全 python装饰器 PyCharm安装与配置,python的Hello World sort与sorted的区别及实例 我必须得告诉大家的MySQL优化原理 Python四大主流网络编程框架 验证码的爬取和识别详解 Flex 布局:实例篇 http和socket之长连接和短连接区别 CSS之Flex 布局:语法篇 爬虫必须学会的正则表达式 符合语言习惯的 Python 优雅编程技巧 Python面试必须要看的15个问题 HTTP和HTTPS的请求和响应 我不想用f