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

在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))

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

从应用的角度去学习Python--为孩子下载课本的更多相关文章

  1. 零基础学习 Python 之前期准备

    写在之前 从今天开始,我将开始新的篇章 -- 零基础学习 Python,在这里我将从最基本的 Python 写起,然后再慢慢涉及到高阶以及具体应用方面.我是完全自学的 Python,所以很是明白自学对 ...

  2. 【Python】Java程序员学习Python(三)— 基础入门

    一闪一闪亮晶晶,满天都是小星星,挂在天上放光明,好像许多小眼睛.不要问我为什么喜欢这首歌,我不会告诉你是因为有人用口琴吹给我听. 一.Python学习文档与资料 一般来说文档的资料总是最权威,最全面的 ...

  3. 学习python最难的就是入门,而这文章刚好适合初学者!

    Python可以应用于众多领域,如:数据分析.组件集成.网络服务.图像处理.数值计算和科学计算等众多领域.目前业内几乎所有大中型互联网企业都在使用Python,如:Youtube.Dropbox.BT ...

  4. 【转】学习Python的19个资源

    原文链接:[译]学习Python编程的19个资源 用Python编写代码一点都不难,事实上它一直被赞誉为最容易学的编程语言.如果你准备学习web开发, Python是一个不错的开始,甚至想做游戏的话, ...

  5. 学习 Python 编程的 19 个资源 (转)

    学习 Python 编程的 19 个资源 2018-01-07 数据与算法之美 编译:wzhvictor,英文:codecondo segmentfault.com/a/119000000418731 ...

  6. 学习Python要知道哪些重要的库和工具

    本文转自:https://github.com/jobbole/awesome-python-cn 环境管理 管理 Python 版本和环境的工具 p:非常简单的交互式 python 版本管理工具. ...

  7. 学习Python的day1

    自己以前从来没有写博客的想法,但是学Python,里面的老师也说了,写博客可以加深自己的记忆,也能回顾内容.还能给别人参考.挺值的.2017-09-16 一. Python介绍 python的创始人为 ...

  8. 一个Js开发者学习Python的第一天

    原文地址:小寒的博客 https://www.dodoblog.cn/blogs/5bf6b8fa0c09883d0f8aad13 作为一个有着足足两年半学习经验和一年半开发经验的js开发者,看着js ...

  9. Linux运维人员如何学习python编程

    Linux运维人员如何学习python编程 从不会写代码,到自己独立能写代码解决问题 .这个问题很重要!盲目学习所谓的项目,最后 还是不会自己写代码解决问题.首先解决了独立能写代码解决问题,再通过项目 ...

随机推荐

  1. python如何从内存地址上加载pythn对象

    python如何从内存地址上加载pythn对象 在python中我们可以通过id函数来获取某个python对象的内存地址,或者可以通过调用对象的__repr__魔术函数来获取对象的详细信息 def t ...

  2. JS刷算法题:二叉树

    Q1.翻转二叉树(easy) 如题所示 示例: 输入: 4 / \ 2 7 / \ / \ 1 3 6 9 输出: 4 / \ 7 2 / \ / \ 9 6 3 1 来源:力扣(LeetCode) ...

  3. 页面置换算法之Clock算法

    1.前言 缓冲池是数据库最终的概念,数据库可以将一部分数据页放在内存中形成缓冲池,当需要一个数据页时,首先检查内存中的缓冲池是否有这个页面,如果有则直接命中返回,没有则从磁盘中读取这一页,然后缓存到内 ...

  4. 如何在OpenStack中对云主机类型进行重新配置

    目标:很多用户在OpenStack启动一个虚拟机,选择了一个云主机配置类型,例如2CPU 4GB内存,使用了一段时间,感觉这个配置并不能满足需求,所以希望能够提高配置,那么OpeNStack的管理界面 ...

  5. Java 中序列化与反序列化

    一. 序列化和反序列化概念 Serialization(序列化)是一种将对象以一连串的字节描述的过程:反序列化deserialization是一种将这些字节重建成一个对象的过程.将程序中的对象,放入文 ...

  6. jQuery 基础 (笔记源于runoob)

    您需要具备的基础知识 在您开始学习 jQuery 之前,您应该对以下知识有基本的了解: HTML CSS JavaScript jQuery ? jQuery是一个JavaScript函数库. jQu ...

  7. Coroutine 练习 1 - Coroutine Exercises 1

    Coroutine 练习 1 - Coroutine Exercises 1 字典中为动词 “to yield” 给出了两个释义:产出和让步.对于 Python 生成器中的 yield 来 说,这两个 ...

  8. 【Debian】 Debian 安装源配置

    Debian 安装源配置 所有的Linux安装完后第一件事,就是要更新安装源 安装源是什么呢,安装源又称软件源,是指把软件的安装源地址放在一个pool里面,用一条命令(比如apt-get instal ...

  9. 数据算法 --hadoop/spark数据处理技巧 --(3.左外连接 4.反转排序)

    三. 左外连接 考虑一家公司,比如亚马逊,它拥有超过2亿的用户,每天要完成数亿次交易.假设我们有两类数据,用户和交易: users(user_id,location_id) transactions( ...

  10. 自动化运维利器 Fabric

    Fabric 主要用在应用部署与系统管理等任务的自动化,简单轻量级,提供有丰富的 SSH 扩展接口.在 Fabric 1.x 版本中,它混杂了本地及远程两类功能:但自 Fabric 2.x 版本起,它 ...