python 按类别下载Oreilly免费电子书。需要请求库和python 2.我到目前为止看到的类别是业务,数据,iot,secur

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了python 按类别下载Oreilly免费电子书。需要请求库和python 2.我到目前为止看到的类别是业务,数据,iot,secur相关的知识,希望对你有一定的参考价值。

import os
import re
import sys
import requests

filename_matcher = re.compile(r'http://www.oreilly.com/(.*)/free/(.*).csp')

def main():
    categories = sys.argv[1:]
    urls = map(lambda x: 'http://www.oreilly.com/{}/free/'.format(x), categories)
    for (category, url), filenames in zip(zip(categories, urls), map(retrieve_filenames, urls)):
        print(category)
        if not os.path.exists(category):
            os.makedirs(category)
        for title, (book_category, files) in filenames.items():
            path = os.path.join(category, title)
            if not os.path.exists(path):
                os.makedirs(path)
            print '\t{}'.format(title)
            for file in files:
                print('\t\t{}'.format(file))
                download_file(os.path.join(category, title, file),
                              'http://www.oreilly.com/{}/free/files/{}'.format(book_category, file))


def download_file(path, url):
    response = requests.get(url, stream=True)
    with open(path, 'wb') as f:
        for chunk in response.iter_content(chunk_size=1024):
            if chunk:
                f.write(chunk)


def retrieve_filenames(url):
    response = requests.get(url).text
    matches = filename_matcher.findall(response)
    return {
        name: (category, map(lambda x: x.format(name), ['{}.pdf', '{}.mobi', '{}.epub']))
        for (category, name) in matches
    }


if __name__ == '__main__':
    main()

以上是关于python 按类别下载Oreilly免费电子书。需要请求库和python 2.我到目前为止看到的类别是业务,数据,iot,secur的主要内容,如果未能解决你的问题,请参考以下文章

史上最全的Python电子书教程资源下载(转)

深入 Python3 PDF高清完整版免费下载|百度云盘|Python进阶教程免费电子书

深入 Python3 PDF高清完整版免费下载|百度云盘|Python进阶教程免费电子书

python编程初学者指南 PDF高清完整版免费下载|百度云盘|Python入门教程免费电子书

python编程初学者指南 PDF高清完整版免费下载|百度云盘|Python入门教程免费电子书

Python语言及其应用PDF高清完整版免费下载|百度云盘|python基础教程PDF电子书