• 从应用的角度去学习Python--为孩子下载课本


    最近,孩子上课都没有课本,老师给发的是一个微信链接,打开看可以,打印打不全。怎么办?我就想既然能看,从爬虫的角度就一定可以抓下来!

    在Chrome中打开网址,好家伙!一堆的Script之类的玩意儿。经过一番查找,发现他所有的图片都在一个div中。然后, 所有的图片的url都在里边。

    格式大致像下面这个样子:

    https://xxx.xxx.xxx/xxxx_jpg/Yf5NpblQ4YialfPteJjMWGJtpCIGzyXuKd4zEFbAZ8eKAy9sHHFZWfaZK3mQh1XL0rdlLRdcflgxQY9ibK9BcAxw/640?wx_fmt=jpeg
    

     避免一些不必要的麻烦,网址我隐去了。顺便说明:咱就是为了学习,没别的。

    虽然,我知道Xpath,BS4可以解决,可我还没有详细研究,所以,就用正则好了。上代码:

    import requests
    import re
    
    def write_jpg(img_url, filename):
        img_data = requests.get(url=img_url, headers=headers).content
        with open('./eng/' + filename + '.jpg', 'wb') as fp:
            fp.write(img_data)
    
    #这个网址好长好长,省略
    url = 'https://mp.weixin.qq.com/...................'
    headers = {
        'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/78.0.3904.108 Safari/537.36'
    }
    #这一块先把那个div整下来
    response = requests.get(url=url, headers=headers).text
    str_re1 = '<div class="rich_media_content " id="js_content" style="visibility: hidden;">(.*?)</div>'
    pat1 = re.compile(str_re1, re.S)
    items = re.findall(pat1, response)
    #再把所有的图片URL抓下来,存入Items2中
    str_re2 = 'https://.*?jpeg'
    pat2 = re.compile(str_re2, re.S)
    items2 = re.findall(pat2, items[0])
    #然后,把每一张图片下载下来,存入eng目录中
    for i in range(0, len(items2)):
        write_jpg(items2[i], str(i))
        print("the %d page downloads successful!" % i)

    不一会,几十张图片下载完毕,本来想一次存入Word中,打印文档。后来想,还不如生成一个PDF。轮子肯定有人造好了。百度!果然有个img2pdf库已经为我准备好了。

    还是上代码吧!

    import img2pdf
    import os
    
    def gen_file_list(dir_s):
        f_list = os.listdir(dir_s)
        for i in range(0, len(f_list)):
            f_list[i] = dir_s + '/' + f_list[i]
        return f_list
    
    sourc_dir = './eng'
    # print(gen_file_list(sourc_dir))
    
    
    a4input = (img2pdf.mm_to_pt(210), img2pdf.mm_to_pt(297))
    layout_fun = img2pdf.get_layout_fun(a4input)
    
    with open('english6x.pdf', 'wb') as f:
        f.write(img2pdf.convert(gen_file_list(sourc_dir), layout_fun=layout_fun))

    代码不复杂,我就不解释了。之所以把这个东西发上来,主要是感觉学东西,还是从实用角度比较快,也比较容易有成就感!

     

  • 相关阅读:
    Vue Scroller:Vue 下拉刷新及无限加载组件
    vue引用公用的头部和尾部文件。
    Java后期拓展(三)Nginx ——高性能的HTTP和反向代理服务器
    JAVA后期拓展(二)ZooKeeper——分布式应用程序协调服务系统
    Java高级部分
    Java后期拓展(一)非关系型数据库Redis
    LoadRunner(四)——深度了解LR相关功能
    LoadRunner(三)——LR相关概念&组成部分
    LoadRunner(二)——性能测试过程概述
    LoadRunner(一)——性能测试基础及性能指标概述
  • 原文地址:https://www.cnblogs.com/xiaolee-tech/p/12309482.html
Copyright © 2020-2023  润新知