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

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

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

最新文章

  1. Azure Backup (2) Azure备份服务
  2. PHP实现linux命令tail -f
  3. 这10道javascript笔试题你都会么
  4. css去掉使用bootstrap框架后打印网页时预览效果下的超链接
  5. Android事件处理
  6. RDMA的ibv_post_send() 函数
  7. [转]ORACLE 绑定变量用法总结
  8. [转] linux新的API signalfd、timerfd、eventfd使用说明
  9. Android 快速开发系列 打造万能的ListView GridView 适配器
  10. JavaScript实例技巧精选(9)—计算器实例1
  11. jQuery DataTables and ASP.NET MVC Integration
  12. React+webpack开发环境的搭建
  13. js实现导航菜单栏随着屏幕的滚动进行滚动的效果
  14. [转]SQL Server 表变量和临时表的区别
  15. Netty中的Channel之数据冲刷与线程安全(writeAndFlush)
  16. javascript高级程序设计第3版——第12章 DOM2与DOM3
  17. 使用Jmeter连接数据库检查数据库记录的方法
  18. rest_framework之视图及源码剖析
  19. 洛谷 画栅栏Painting the Fence 解题报告
  20. FileReader &amp; Blob &amp; File

热门文章

  1. keywords in my life
  2. SQL Server 2012 安装完成后,无法通过 sa账号登录
  3. shell正则表达式提取数字
  4. CCF_ 201512-3_画图
  5. 未来图书-需求分析——脑机接口、VR、AI推荐系统
  6. RocketChat:开源聊天软件部署
  7. 你还用拼音为变量命名?新人OIer别傻了,教你写出优质代码
  8. STM32F4相关
  9. Vue过滤器、生命周期函数和vue-resource
  10. Linux设备中的UUID