疫情期間屡谐,大家都只能在家中線上學(xué)習(xí)述么,這種情況下,教材就成了一個(gè)問題愕掏。好在度秘,一大批數(shù)據(jù)庫(kù)都已經(jīng)面向社會(huì)部分開放,我們可以實(shí)現(xiàn)教材的在線閱讀饵撑。但是剑梳,這樣的在線閱讀不能在pdf上做筆記,尤其對(duì)于goodnotes深度用戶(比如我)來說就有點(diǎn)不太友好滑潘。
作為一名python業(yè)余愛好者(自從打過美賽之后再也不敢說自己熟練python和MATLAB了)垢乙,第一個(gè)想到的就是如何把圖書從網(wǎng)站上爬下來。當(dāng)然语卤,最開始我的嘗試是失敗了的追逮,不過在我把我的想法跟圈內(nèi)人聊過之后我一個(gè)朋友用一種很秀的方式實(shí)現(xiàn)了這一個(gè)玩法。詢問得知在urllib庫(kù)里面有一個(gè)urlretrieve函數(shù)可以實(shí)現(xiàn)將url對(duì)應(yīng)的圖片下載到本地的功能粹舵,然后由于數(shù)字書苑系統(tǒng)的圖書是一種png圖片播放器框架钮孵,它的圖片可以保存到本地,也有對(duì)應(yīng)的規(guī)律的url眼滤,從而存在爬取的可能巴席。經(jīng)過不懈努力之后我成功把這個(gè)功能在python 3.7.6上實(shí)現(xiàn)了(朋友最初的版本是py2的??)
話不多說,先放代碼
# 20200311 JamesBourbon
from urllib.request import urlretrieve
import time
import os
# 操作:(python3環(huán)境)
# 將數(shù)字書苑的圖書在chrome打開
# 在檢查中找到img src項(xiàng)诅需,將其url弄下來
# (此工作成熟期可用bs4完成)
# 此url中有一個(gè)pageid=1,將數(shù)字換成{}
# 此字符串為參數(shù)url情妖,頁(yè)碼尾數(shù)為tail_id, 保存文件夾目錄為dirpath
# 參數(shù)輸入到函數(shù)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'
# 有機(jī)化學(xué)
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'
# 以上鏈接均有可能過期睬关,建議重新打開數(shù)字書苑重新捕捉鏈接
tail_id = 528
dirpath = 'download_test'
def szsy_get(url, tail_id, dirpath):
# 連續(xù)爬取圖片,從而構(gòu)成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)
# 數(shù)字書苑的img src框架目標(biāo)毡证,其中只有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)
具體操作在注釋里面寫的很完全了,不過自己還想再新手向一點(diǎn)蔫仙。因?yàn)楸救说那岸思夹g(shù)也賊菜料睛,找個(gè)url還花了半天,也算是自用向記錄吧
-
在數(shù)字書苑中找一本書摇邦,開始閱讀恤煞,然后用共享方法發(fā)送到文本傳輸助手,在桌面打開電腦上用瀏覽器打開施籍,如圖:
2
image在這里插入圖片描述
image -
在電腦上成功用瀏覽器打開之后(建議谷歌)居扒,右鍵”檢查“,打開html框架代碼丑慎,從中找到對(duì)應(yīng)圖片的url喜喂,一般在img src處。如果右鍵支持在新窗口打開圖片的話也可以竿裂,兩者指向同一個(gè)url
image - 將這個(gè)url拷貝下來玉吁,里面會(huì)有個(gè)pageid=1(或其他數(shù)字),顯然腻异,這個(gè)1即是頁(yè)碼进副,接下來就利用python強(qiáng)大的字符串處理功能遍歷每一個(gè)頁(yè)碼,完成圖片爬取悔常,將圖片組合成pdf影斑,我們就可以得到我們想要的教材的電子版啦!
希望這個(gè)方法能幫到大家線上學(xué)習(xí)机打!
聲明:此方法爬取的電子書僅用于學(xué)習(xí)交流矫户,不會(huì)用于商業(yè)用途,也請(qǐng)使用此代碼爬取圖書的朋友們重視版權(quán)保護(hù)姐帚,切忌將此代碼用于商業(yè)用途吏垮,否則后果自負(fù)!