亚洲免费av电影一区二区三区,日韩爱爱视频,51精品视频一区二区三区,91视频爱爱,日韩欧美在线播放视频,中文字幕少妇AV,亚洲电影中文字幕,久久久久亚洲av成人网址,久久综合视频网站,国产在线不卡免费播放

        ?

        爬取CSDN博客保存成PDF的方法

        2018-11-14 10:43:58中國電波傳播研究所
        電子世界 2018年20期
        關鍵詞:博文線程頁碼

        中國電波傳播研究所 劉 士

        中國電子科技集團公司第五十二研究所 支 浩

        本文闡述了一種爬取指定CSDN賬號的所有博文進行內(nèi)容提并批量合并成PDF的方法,對該方法給出了Python語言的實現(xiàn)方式。實驗結果證明,該方法具有可操作性和實用性。

        引言:在實際工作中常常需要對感興趣的CSDN博文保存成電子書,從而可以達到多設備、無網(wǎng)絡的情況下進行閱讀。本文介紹了如何使用Chrome瀏覽器和Python語言將目標博客內(nèi)容爬取后進行信息提取,然后合并成PDF格式的方法。除Python自帶的標準庫外,所用到的Python庫為BeautifulSoup、pdfkit、PyPDF2。本文一個主要成果是對爬取到的網(wǎng)頁進行有效的數(shù)據(jù)清洗和自定義,在博客篇數(shù)較多時進行快速合并。

        1.實現(xiàn)步驟

        本文的實現(xiàn)符合爬蟲的一般步驟即:“目標爬取、數(shù)據(jù)清洗、內(nèi)容整合”。首先針對某一個感興趣的作者爬取他的所有博文,然后進行信息提取后保存為PDF格式,最后將所有的PDF進行合并得到目標PDF。

        1.1 爬取原始網(wǎng)頁(Python 3 documentation;https://docs.python.org/3/.)

        ①爬取文章列表,使用chrome瀏覽器打開網(wǎng)址“https://blog.csdn.net/用戶名/article/list/頁碼”可以獲取指定用戶某一頁的所有文章。其中“用戶名”為博客作者的用戶名,頁碼為從1開始的整數(shù)。從“頁碼”為1開始依次遞增遍歷可以獲取所有頁面文章列表,當頁碼超出范圍后網(wǎng)頁會有“空空如野”提示,可作為終止條件;

        ②在上一步中進行網(wǎng)頁內(nèi)容解析后發(fā)現(xiàn)class=’article-list’中的所有<a>鏈接為具體某一篇博文的地址,可使用BeautifulSoup進行內(nèi)容提取;

        ③提取上一步中的a鏈接的href屬性后使用urlopen獲取某一篇博文內(nèi)容并保存到數(shù)據(jù)庫。

        在本步驟中,為了減少服務器的壓力,爬取前先查詢數(shù)據(jù)庫表,如果存在則跳過該篇文章;同時在打開目標網(wǎng)址時最好帶上請求“數(shù)據(jù)頭”并保存cookie,在爬取內(nèi)容成功后修眠幾秒鐘來減小爬蟲被封的可能。

        1.2 內(nèi)容整理(Html教程;www.w3school.com.cn/html/index.asp.)

        在獲取到所有博文后需要對網(wǎng)頁內(nèi)容進行提取去掉不感興趣的內(nèi)容,比如去廣告、去掉評論以及添加自定義聲明等,該部分涉及html知識。

        ①選取一篇已爬取到的博文內(nèi)容,新建一個空白的html文件并復制內(nèi)容到該文件,使用chrome瀏覽器打開,在開發(fā)者模式下(F12快捷鍵打開)和原博文進行對比分析;

        ②在開發(fā)者模式下發(fā)現(xiàn)博文的有效內(nèi)容在標簽class=’blogcontent-box’中,可以使用BS4提取所有內(nèi)容;

        ③自定義網(wǎng)頁內(nèi)容,經(jīng)調(diào)試發(fā)現(xiàn),想要“原汁原味”的還原CSDN的博文內(nèi)容并調(diào)整頁面適合閱讀,需要保留原來頁面head標簽中的jquery庫和sphonix系列主題;可以去掉原頁面中其他js代碼來加快頁面加載;修改<main>標簽width屬性CSS為100%,將’hide-articlebox’標簽的display:屬性設置為none,用來顯示全部網(wǎng)頁;同時可以在recommend-box標簽中添加自定義網(wǎng)頁內(nèi)容,如“本PDF是由spygg生成,請尊重原作者版權”...(見圖1),然后保存為html文件。

        需要注意的是,由于實際需要在本文實現(xiàn)時博客的評論部分被剔除。經(jīng)chrome抓包調(diào)試發(fā)現(xiàn)博客評論文章是通過ajax來獲取的,如果需要該部分內(nèi)容可打開chrome的Network標簽下的xhr標簽,觀察通信內(nèi)容來自行采集。

        1.3 轉化成pdf(wkhtmltopdf doc;https://github.com/wkhtmltopdf/wkhtmltopdf/.)

        ①遍歷數(shù)據(jù)庫表讀取上一步中保存的網(wǎng)頁內(nèi)容;

        ②將網(wǎng)頁內(nèi)容調(diào)用pdfkit的庫(wkhtmltopdf后端)函數(shù)轉化成pdf后保存所有博文PDF到指定路徑;

        需要注意的是,在轉化過程中有些網(wǎng)頁圖片可能不能正常加載,這時需要重定向系統(tǒng)stdout來獲取錯誤信息,如果發(fā)生錯誤可重新嘗試轉化;同時由于轉化成PDF的過程比較耗時,本文采用30個線程并行處理。一個實現(xiàn)技巧為:使用自定義線程池即先將線程句柄append到列表中,然后啟動線程;在同一個函數(shù)中,循環(huán)遍歷上述列表對每個線程執(zhí)行join操作,從而達到在主函數(shù)退出前等待各個線程結束的目的。

        1.4 批量合并pdf

        在博客篇數(shù)比較少(幾十篇)時,可以直接將各個網(wǎng)頁的內(nèi)容合并復制到一個html文件中使用上一步的方法進行轉化,也可利用chrome打開后直接保存成pdf,從而跳過本步驟。但是當博文篇數(shù)較多時,經(jīng)長時間測試運行(幾十個小時),上述兩種方法都會導致內(nèi)存耗盡而導致轉化失敗。更為通用的方法為使用PyPDF2庫,方法如下:

        ①生成PDF索引,使用PdfFileReader打開某一博文PDF獲取頁碼數(shù)、文章標題和文章內(nèi)容,然后添加到書簽;

        ②將讀取到的內(nèi)容使用PdfFileWriter函數(shù)將所有內(nèi)容進行保存合并到一個pdf中;

        需要注意的是,在合并時由于合并的PDF頁數(shù)過多,可能導致合并失敗;經(jīng)測試,可修改系統(tǒng)的最大遞歸深度為5000(編寫本文的實際環(huán)境為Ubuntu 18.04 64bit,該系統(tǒng)的遞歸深度為1000)。

        2.結論

        本方法在python 3開發(fā)環(huán)境下,爬取雷霄驊(FFMPEG視頻領域?qū)<遥┑牟┪墓?58篇,經(jīng)提取、整理、合并,如圖1所示:

        圖1 某博客整理效果圖

        在實際使用時,只需要在第一步“爬取原始網(wǎng)頁”時修改爬取目標網(wǎng)址中的用戶名即可爬取不同用戶的所有博客內(nèi)容。

        猜你喜歡
        博文線程頁碼
        Nonlinear Dynamic Analysis and Fatigue Study of Steep Wave Risers Under Irregular Loads
        第一次掙錢
        CONTENTS OF 2020
        特種油氣藏(2020年6期)2020-01-05 10:24:40
        誰和誰好
        Consequences of early adverse rearing experience(EARE) on development: insights from non-human primate studies
        淺談linux多線程協(xié)作
        算頁碼
        小學生導刊(2016年2期)2016-11-11 06:09:10
        Review on Tang Wenzhi’s The Gist of Chinese Writing Gamut
        打電話2
        Linux線程實現(xiàn)技術研究
        欧美丰满熟妇bbb久久久| 午夜日本精品一区二区| 亚洲国产大胸一区二区三区| 国产一品二品三品精品在线| 日韩精品区一区二区三vr| 亚洲欧美在线播放| 在线视频一区二区亚洲| 日本综合视频一区二区| 欧美丰满熟妇性xxxx| 性饥渴艳妇性色生活片在线播放| 亚洲色欲色欲大片WWW无码| 免费观看日本一区二区三区| 性久久久久久| 国产精品区一区第一页| 麻豆国产成人AV网| 99久久婷婷国产精品网| 东京热久久综合久久88| 最新亚洲人成无码网www电影| 久久亚洲精品成人AV无码网址 | 亚洲国产一区二区三区在线视频 | 亚洲www视频| 日本一区二区三区爱爱视频| 丰满少妇被粗大猛烈进人高清| 国产成人亚洲综合无码| 中文字幕日本女优在线观看| 亚洲高清中文字幕视频| 人妻激情另类乱人伦人妻| 亚洲国产A∨无码影院| 国产av一区二区日夜精品剧情| 97在线视频人妻无码| av在线免费观看蜜桃| ā片在线观看免费观看| 国产日韩欧美911在线观看| 亚洲av男人的天堂在线| 中文字幕色av一区二区三区| 日本一区二区三区高清千人斩| 精品少妇人妻久久免费| 色综合天天综合网国产成人网| 欧美最猛黑人xxxx黑人表情| 国产精品视频流白浆免费视频| 久久国产精品懂色av|