疫情期间,大家都只能在家中线上学习,这种情况下,教材就成了一个问题。好在,一大批数据库都已经面向社会部分开放,我们可以实现教材的在线阅读。但是,这样的在线阅读不能在pdf上做笔记,尤其对于goodnotes深度用户(比如我)来说就有点不太友好。
作为一名python业余爱好者(自从打过美赛之后再也不敢说自己熟练python和MATLAB了),第一个想到的就是如何把图书从网站上爬下来。当然,最开始我的尝试是失败了的,不过在我把我的想法跟圈内人聊过之后我一个朋友用一种很秀的方式实现了这一个玩法。询问得知在urllib库里面有一个urlretrieve函数可以实现将url对应的图片下载到本地的功能,然后由于数字书苑系统的图书是一种png图片播放器框架,它的图片可以保存到本地,也有对应的规律的url,从而存在爬取的可能。经过不懈努力之后我成功把这个功能在python 3.7.6上实现了(朋友最初的版本是py2的😂)
话不多说,先放代码
# 20200311 JamesBourbon
from urllib.request import urlretrieve
import time
import os
# 操作:(python3环境)
# 将数字书苑的图书在chrome打开
# 在检查中找到img src项,将其url弄下来
# (此工作成熟期可用bs4完成)
# 此url中有一个pageid=1,将数字换成{}
# 此字符串为参数url,页码尾数为tail_id, 保存文件夹目录为dirpath
# 参数输入到函数szsy_get中即可
# 化工原理上
# url = 'http://cebxol.apabi.com/command/imagepage.ashx?ServiceType=Imagepage&objID=m.20181009-HXGY-XRTO-0449.ft.cebx.1&metaId=m.20181009-HXGY-XRTO-0449&OrgId=iyzhi&username=iyzhi&rights=1-0_00&time=2020-03-08+13%3A20%3A58&sign=7B27C3449E3D2814F6FB948CF0A7273E&pageid={}&width=3284&height=1734'
# 化工原理下
# url = 'http://cebxol.apabi.com/command/imagepage.ashx?ServiceType=Imagepage&objID=m.20181009-HXGY-XRTO-0449.ft.cebx.1&metaId=m.20181009-HXGY-XRTO-0449&OrgId=iyzhi&username=iyzhi&rights=1-0_00&time=2020-03-05+13%3A45%3A50&sign=2DDF187FD2C7BA71C451F5ECD85751C5&pageid={}&width=2732&height=1170'
# 有机化学
url = 'http://cebxol.apabi.com/command/imagepage.ashx?ServiceType=Imagepage&objID=m.20181203-HXGY-RXJC-0307.ft.cebx.1&metaId=m.20181203-HXGY-RXJC-0307&OrgId=iyzhi&username=iyzhi&rights=1-0_00&time=2020-03-12+21%3A54%3A01&sign=699186CCE8AD626EE29968EF9310D7D1&pageid={}&width=3840&height=1794'
# 以上链接均有可能过期,建议重新打开数字书苑重新捕捉链接
tail_id = 528
dirpath = 'download_test'
def szsy_get(url, tail_id, dirpath):
# 连续爬取图片,从而构成pdf
print('start {}'.format(dirpath))
if os.access(dirpath, os.R_OK) == False:
os.makedirs(dirpath)
try:
for i in range(tail_id):
url_use = url.format(i+1)
# 数字书苑的img src框架目标,其中只有pageid从1到末尾
urlretrieve(url_use, "{}/{}.png".format(dirpath,i+1))
# time.sleep(0.1)
print('{} Done'.format(i+1))
except:
print('failed somehow')
szsy_get(url, tail_id, dirpath)
具体操作在注释里面写的很完全了,不过自己还想再新手向一点。因为本人的前端技术也贼菜,找个url还花了半天,也算是自用向记录吧
-
在数字书苑中找一本书,开始阅读,然后用共享方法发送到文本传输助手,在桌面打开电脑上用浏览器打开,如图:
2
-
在电脑上成功用浏览器打开之后(建议谷歌),右键”检查“,打开html框架代码,从中找到对应图片的url,一般在img src处。如果右键支持在新窗口打开图片的话也可以,两者指向同一个url
- 将这个url拷贝下来,里面会有个pageid=1(或其他数字),显然,这个1即是页码,接下来就利用python强大的字符串处理功能遍历每一个页码,完成图片爬取,将图片组合成pdf,我们就可以得到我们想要的教材的电子版啦!
希望这个方法能帮到大家线上学习!
声明:此方法爬取的电子书仅用于学习交流,不会用于商业用途,也请使用此代码爬取图书的朋友们重视版权保护,切忌将此代码用于商业用途,否则后果自负!