999精品在线视频,手机成人午夜在线视频,久久不卡国产精品无码,中日无码在线观看,成人av手机在线观看,日韩精品亚洲一区中文字幕,亚洲av无码人妻,四虎国产在线观看 ?

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

2018-11-14 10:43:58中國電波傳播研究所
電子世界 2018年20期
關鍵詞:頁面內容方法

中國電波傳播研究所 劉 士

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

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

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

1.實現步驟

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

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

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

②在上一步中進行網頁內容解析后發現class=’article-list’中的所有<a>鏈接為具體某一篇博文的地址,可使用BeautifulSoup進行內容提??;

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

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

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

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

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

②在開發者模式下發現博文的有效內容在標簽class=’blogcontent-box’中,可以使用BS4提取所有內容;

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

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

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

①遍歷數據庫表讀取上一步中保存的網頁內容;

②將網頁內容調用pdfkit的庫(wkhtmltopdf后端)函數轉化成pdf后保存所有博文PDF到指定路徑;

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

1.4 批量合并pdf

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

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

②將讀取到的內容使用PdfFileWriter函數將所有內容進行保存合并到一個pdf中;

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

2.結論

本方法在python 3開發環境下,爬取雷霄驊(FFMPEG視頻領域專家)的博文共558篇,經提取、整理、合并,如圖1所示:

圖1 某博客整理效果圖

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

猜你喜歡
頁面內容方法
大狗熊在睡覺
刷新生活的頁面
保健醫苑(2022年1期)2022-08-30 08:39:14
內容回顧溫故知新
科學大眾(2022年11期)2022-06-21 09:20:52
主要內容
臺聲(2016年2期)2016-09-16 01:06:53
用對方法才能瘦
Coco薇(2016年2期)2016-03-22 02:42:52
四大方法 教你不再“坐以待病”!
Coco薇(2015年1期)2015-08-13 02:47:34
捕魚
同一Word文檔 縱橫頁面并存
淺析ASP.NET頁面導航技術
主站蜘蛛池模板: 色妞永久免费视频| 九九香蕉视频| 国产色婷婷| 天天综合天天综合| 亚洲成年人网| 久操中文在线| 欧美日韩午夜| 久操中文在线| 中文字幕无码电影| 国产91精品调教在线播放| 在线视频一区二区三区不卡| 乱色熟女综合一区二区| 91午夜福利在线观看| 99久久国产综合精品女同| 欧美精品三级在线| 波多野结衣久久高清免费| 天天色综合4| 亚洲成人精品久久| 亚洲第一成人在线| 粗大猛烈进出高潮视频无码| 99热线精品大全在线观看| 一区二区欧美日韩高清免费| 日本a级免费| 国产v欧美v日韩v综合精品| 最新亚洲av女人的天堂| 99成人在线观看| 欧美精品一区二区三区中文字幕| 大香网伊人久久综合网2020| 人妻一区二区三区无码精品一区| 成人小视频网| 久久 午夜福利 张柏芝| 亚洲一区毛片| 亚洲人成网站色7777| 精品一區二區久久久久久久網站 | 成年人午夜免费视频| 国产精品亚洲专区一区| 久久永久视频| 亚洲天堂.com| 中文字幕日韩丝袜一区| 国产专区综合另类日韩一区| 小蝌蚪亚洲精品国产| 国产99视频免费精品是看6| 国产在线拍偷自揄拍精品| 波多野结衣久久高清免费| 成年A级毛片| 中文字幕首页系列人妻| 亚洲天堂免费观看| 亚洲国产天堂久久九九九| 亚洲天堂首页| 久久久黄色片| 国产精品55夜色66夜色| 国产一区二区三区免费观看| 国内精品视频| 视频一区视频二区日韩专区| 91福利在线看| 久久婷婷六月| 欧美综合一区二区三区| 国产成人综合网| 精品久久综合1区2区3区激情| 久久这里只有精品免费| 亚洲九九视频| 亚洲天堂视频在线播放| 午夜性爽视频男人的天堂| 国产成人一区| 456亚洲人成高清在线| 国产精品分类视频分类一区| 亚洲大学生视频在线播放| 中国一级特黄视频| 国内精品久久久久鸭| 成人免费一区二区三区| 国产一区成人| 国产不卡网| Aⅴ无码专区在线观看| 一本久道久综合久久鬼色| 久久亚洲中文字幕精品一区| 国产在线精品网址你懂的| 丁香五月激情图片| 亚洲伊人久久精品影院| 精品无码一区二区在线观看| 欧美成人免费午夜全| 玖玖精品视频在线观看| 亚亚洲乱码一二三四区|