2022-07-11 分類: 網(wǎng)站制作
如何用 Python 爬取網(wǎng)站制作電子書
有人爬取數(shù)據(jù)分析黃金周旅游景點(diǎn),有人爬取數(shù)據(jù)分析相親,有人大數(shù)據(jù)分析雙十一,連小學(xué)生寫論文都用上了大數(shù)據(jù)。
我們每個人每天都在往網(wǎng)上通過微信、微博、淘寶等上傳我們的個人信息,現(xiàn)在就連我們的錢都是放在網(wǎng)上,以后到強(qiáng)人工智能,我們連決策都要依靠網(wǎng)絡(luò)。網(wǎng)上的數(shù)據(jù)就是資源和寶藏,我們需要一把鏟子來挖掘它。
最近,AI 的興起讓 Python 火了一把。實際上 Python 擁有龐大的第三方支持,生態(tài)系統(tǒng)非常完整,可以適用各種場景和行業(yè)。
這次,我們準(zhǔn)備通過 Python 學(xué)習(xí)爬蟲的開發(fā),既簡單有趣,而且是數(shù)據(jù)采集重要一環(huán)。同時脫離應(yīng)用談技術(shù)就是耍流氓,通過制作電子書學(xué)習(xí)數(shù)據(jù)的收集與整理,即能學(xué)到東西又有實用價值。
我們將通過爬取網(wǎng)頁信息這個很小的應(yīng)用場景來體會數(shù)據(jù)預(yù)處理的思想,并從中學(xué)習(xí)了解數(shù)據(jù)處理中抓取、處理、分組、存儲等過程的實現(xiàn)。
我這次分享主要分為以下幾個部分:
Python 語法:通過分享掌握簡單的 Python 開發(fā)語法和思路,側(cè)重于后面爬蟲開發(fā)的需要用的內(nèi)容;
Scrapy 爬蟲開發(fā):通過分享了解基本的 Scrapy 開發(fā),并實現(xiàn)從網(wǎng)絡(luò)爬取數(shù)據(jù),使用 Sigil 制作 epub 電子書;
最后,我希望通過分享,讓更多人能夠入門并喜歡上 Python 開發(fā),掌握 Scrapy 爬蟲開發(fā)的思路和方法。
一、Python 開發(fā)
1.1 Windows 下環(huán)境安裝
熟悉 Windows 的安裝 Python 不難,首先官網(wǎng)下載:https://www.python.org/downloads/。
有兩個版本,根據(jù)需要選擇自己的版本,現(xiàn)在越來越多的庫開始支持 3,所以建議下載 3,這里我們以 2 為例。
雙擊下載的安裝文件,一路 Next 即可,但是要注意勾選 __pip__ 和 Add python.exe to Pat
pip 是 Python 生態(tài)體系里面的包管理工具,很多第三方庫可以通過它方便的管理。
安裝 Finish 之后,打開命令行窗口,輸入 Python:
如果出現(xiàn)這個界面說明安裝成功了。
需要把 python.exe 的目錄添加到 path 中,一般是 C:/Python27。
1.2 Python 之 HelloWorld
目前我所接觸過的所有編程語言都只要掌握三個內(nèi)容就可以了:就是輸入、處理、輸出。我們已經(jīng)安裝好了 Python,可以來一個最俗套的程序。
首先我們打開 windows 的控制臺,然后輸入 python 回車。
根據(jù)我上面的說法,這個程序的輸入就是 Hello World 字符串,處理使系統(tǒng)內(nèi)部的輸出處理,輸出結(jié)果就是 ‘Hello World’。
我們說這個不是單純的秀一下,以前沒有用戶界面的時候 print 可以作為人機(jī)交互用途,現(xiàn)在多數(shù)是用于調(diào)試,可以在程序運(yùn)行的時候快速的輸出程序結(jié)果或者過程結(jié)果。
1.3 做菜與編程
現(xiàn)在有個很有意思的說法:生數(shù)據(jù)(原始數(shù)據(jù))就是沒有處理過的數(shù)據(jù),熟數(shù)據(jù)(Cooked Data)是指原始數(shù)據(jù)經(jīng)過加工處理后的數(shù)據(jù),處理包括解壓縮、組織,或者是分析和提出,以備將來使用。
這就像做菜生菜是輸入,菜譜是程序,洗、切、烹飪等處理是程序執(zhí)行過程,最后輸出的熟菜。但不管生菜、熟菜都是菜,或者都是物質(zhì)。
準(zhǔn)備食材
在程序世界里的物質(zhì)組成就是數(shù)據(jù),就像有蘿卜白菜等不同的品種一樣,數(shù)據(jù)也有不同的類型。我目前所接觸到的數(shù)據(jù)類型主要有以下幾種:
物理類:數(shù)據(jù)在物理內(nèi)存中的表達(dá)存儲方式;
位
字
字節(jié)
數(shù)據(jù)類:數(shù)據(jù)類中的具體類型代表了不同精度和內(nèi)存中不同的存儲結(jié)構(gòu);
整數(shù)
浮點(diǎn)數(shù)
長整型
雙精度
字符類:就是文本字符相關(guān)的數(shù)據(jù)類型;
字符
字符串
邏輯類:就是邏輯真與邏輯假;
布爾值
復(fù)合類:由各基本的數(shù)據(jù)類型按照一定的結(jié)構(gòu)組合而成的數(shù)據(jù);
結(jié)構(gòu)體
類
集合
字典
列表
序列
Hash 表
……
這里我強(qiáng)調(diào)幾點(diǎn):
首先,這個分類不是某種語言特有,目前大多數(shù)編程語言都差不多,你理解這個思想就把自己的編程能力擴(kuò)展了。
其次,它不需要專門記憶,編程是程序性的知識,運(yùn)用的知識,是一種技能,你要做什么菜,你來這個分類查查需要什么原材料,再去具體研究,慢慢就會了,不做你記住了也沒用。
用多深,研究多深,不用就別研究浪費(fèi)時間。比如說,我們一般性應(yīng)用不會去考慮數(shù)據(jù)的內(nèi)存模型,但是涉及到精度、性能或者邊界值時我們就需要小心,研究得深一些。
器皿
食材已準(zhǔn)備好了,可以下鍋,可鍋在哪里,你不能放在手里加工。程序里我們用變量、常量來盛各種數(shù)據(jù),還有個作用域的問題,嚴(yán)格的廚房紅案和白案是分開的,有時候砧板是不能互用的。
空值:四大皆空,什么也不是,不是 0,不是長度為 0 的字符串,不是 false,什么都不是;
變量:學(xué)過數(shù)學(xué)的人都應(yīng)該有這個概念,反正差不多;
常量:固定不變的量,比如說 π。
烹飪手法
剛查了下,我大天朝常用的烹飪手法多達(dá) 20 多種,我歸納了一下,編程大概就那么幾種:
數(shù)值計算——加減乘除、位移等;
邏輯計算——邏輯真假判斷;
過程計算——循環(huán)、嵌套、遞歸等;
數(shù)據(jù)處理——字符串、對象的操作。
菜譜與炒菜
菜都準(zhǔn)備好了,下鍋怎么炒,全靠菜譜,它就是程序,而我們按照菜譜炒菜這個過程就是程序的執(zhí)行。
Python 或任何一種編程語言都是博大精深,同時又是一種技能,不可能在使用之前完全掌握,也沒必要。
我們需要知道的是我們想吃什么(程序要輸出什么),然后再去菜市場買時才找菜譜(搜索引擎查資料),最后按照我們的需求加工(編程)。
1.4 Python 簡單實踐
我們運(yùn)行了 hello.py 文件,然后 hello.py 導(dǎo)入了包 pkg;包 pkg 定義了一個方法和一個類,我們在 hello.py 文件里面調(diào)用了外部的方法和類。
二、使用 Scrapy 抓取電子書
2.1 寫在爬取數(shù)據(jù)之前
雖然我們這里的數(shù)據(jù)都是從公開的網(wǎng)絡(luò)獲取,但也不能確定其版權(quán)問題,因此獲取的數(shù)據(jù)僅用于編程練習(xí),嚴(yán)禁分享或用于其他用途。
好了,現(xiàn)在我們找一個在線看書的網(wǎng)站,找一本書把它下載到本地。首先,我們準(zhǔn)備下載工具,就是 Python 的爬蟲框架 Scrapy。
2.2 Scrapy 安裝
安裝完 Python 后可以用以下的命令按照 Scrapy,有些版本的 Python 沒有帶 pip 需要手動安裝。
pip 是 Python 的包管理器,大量的第三方包或者說功能可以通過這個工具來管理,所謂包就是模塊化的功能集合,基本的技術(shù)參考實踐里面的包。
2.3 新建 Scrapy 爬蟲項目
Scrapy 是 Python 程序,同時也是一套框架,提供了一系列工具來簡化開發(fā),因此我們按照 Scrapy 的模式來開發(fā),先新建一個 Scrapy 項目。
Scrapy 項目包含一些基礎(chǔ)框架代碼,我們在此基礎(chǔ)上開發(fā)。
2.4 新建 Scrapy 爬蟲
這時,Scrapy 還不知道我們要爬取什么數(shù)據(jù),所以我們要用 Scrapy 工具新建一個爬蟲,命令如
下面實操,我們在起點(diǎn)中文網(wǎng)找一篇免費(fèi)小說的完本,這里選擇是《修真小主播》。
我們就在前面建立的 Scrapy 項目 ebook 下新建一個爬蟲,命令如下:
執(zhí)行成功之后,在項目的 spider 目錄下就多了一個 xzxzb.py 的文件。
2.5 爬蟲思路
怎么抓取數(shù)據(jù),首先我們要看從哪里取,打開《修真小主播》的頁面,如下:
有個目錄頁簽,點(diǎn)擊這個頁簽可以看見目錄,使用瀏覽器的元素查看工具,我們可以定位到目錄和每一章節(jié)的相關(guān)信息。
2.6 獲取章節(jié)地址
現(xiàn)在我們打開 xzxzb.py 文件,就是我們剛剛創(chuàng)建的爬蟲
start_urls 就是目錄地址,爬蟲會自動爬這個地址,然后結(jié)果就在下面的 parse 中處理。現(xiàn)在創(chuàng)新互聯(lián)就來編寫代碼處理目錄數(shù)據(jù),首先爬取小說的主頁,獲取目錄列表
獲取網(wǎng)頁中的 DOM 數(shù)據(jù)有兩種方式,一種是使用 CSS 選擇子,另外一種是使用 XML 的 xPath 查詢。
這里我們用 xPath,相關(guān)知識請自行學(xué)習(xí),看以上代碼,首先我們通過 ID 獲取目錄框,獲取類 cf 獲取目錄列表
接著,遍歷子節(jié)點(diǎn),并查詢 li 標(biāo)簽內(nèi) a 子節(jié)點(diǎn)的 href 屬性,最后打印出來
這樣,可以說爬取章節(jié)路徑的小爬蟲就寫好了,使用如下命令運(yùn)行 xzxzb 爬蟲查看結(jié)果
爬取章節(jié)路徑的小爬蟲就寫好了,但我們的目的不僅于此,我們接下來使用這些地址來抓取內(nèi)容:
2.7 章節(jié)頁面分析
我們接下來分析一下章節(jié)頁面,從章節(jié)頁面我們要獲取標(biāo)題和內(nèi)容。
如果說章節(jié)信息爬取使用的 parser 方法,那么我們可以給每一個章節(jié)內(nèi)容的爬取寫一個方法,比如:parser_chapter,先看看章節(jié)頁面的具體情況
可以看到,章節(jié)的整個內(nèi)容在類名為 main-text-wrap 的 div 標(biāo)簽內(nèi),標(biāo)題是其中類名為j_chapterName的 h3 標(biāo)簽,具體內(nèi)容是類名為read-content j_readContent的 div 標(biāo)簽。
scrapy.Request 不同于使用 response.follow,需要通過相對路徑構(gòu)造出絕對路徑,response.follow 可以直接使用相對路徑,因此就不需要調(diào)用 urljoin 方法了。
注意,response.follow 直接返回一個 Request 實例,可以直接通過 yield 進(jìn)行返回。
數(shù)據(jù)獲取了之后是存儲,由于我們要的是 html 頁面,因此,我們就按標(biāo)題存儲即可。
2.8 數(shù)據(jù)整理
首先,我們爬取下來的章節(jié)頁面排序不是很好,如果人工去排需要太多的時間精力;另外,章節(jié)內(nèi)容包含許多額外的東西,閱讀體驗不好,我們需要優(yōu)化內(nèi)容的排版和可讀性。
我們先給章節(jié)排個序,因為目錄中的章節(jié)列表是按順序排列的,所以只需要給下載頁面名稱添加一個順序號就行了。
不知道大家注意到?jīng)]有,前面的分析中目錄已經(jīng)提供了一個data_rid可以作為排序號,我們在目錄分析頁面獲取這個序號,然后通過 request 的 meta 傳入parse_chapter。
在parse_chapter中通過 response 的 meta 獲取傳入的參數(shù),然后文件名中加入這個順序好完成了排序。另外,Sigil 找那個通過 H1 標(biāo)簽來生成目錄,需要目錄的話,我們需要給內(nèi)容添加一個 h1 標(biāo)簽。
還有可讀性差的問題,也許我們下載的網(wǎng)頁可能會包含一些亂七八糟的東西,我們有很多辦法,也可以使用 readbility 等第三方庫,這里就不深入了。
三、使用 Sigil 制作電子書
電子書的制作,完全就是工具的應(yīng)用,非常簡單,這里把流程過一下,大家根據(jù)興趣自行深入。
3.1 Sigil 簡介
Sigil 是一個多平臺的 ePub 電子書編輯器。官方網(wǎng)站:https://sigil-ebook.com/,下載頁面在 https://github.com/Sigil-Ebook/Sigil/releases,根據(jù)自己的需求下載,安裝很簡單就不啰嗦了。
3.2 ePub 電子書簡介
ePub(Electronic Publication 的縮寫,意為:電子出版),是一個自由的開放標(biāo)準(zhǔn),屬于一種可以 “自動重新編排” 的內(nèi)容;也就是文字內(nèi)容可以根據(jù)閱讀設(shè)備的特性,以最適于閱讀的方式顯示。
ePub 檔案內(nèi)部使用了 XHTML 或 DTBook (一種由 DAISY Consortium 提出的 XML 標(biāo)準(zhǔn))來展現(xiàn)文字、并以 zip 壓縮格式來包裹檔案內(nèi)容。EPub 格式中包含了數(shù)位版權(quán)管理(DRM)相關(guān)功能可供選用。
3.3 加載 html 文件
要制作 ePub 電子書,我們首先通過 Sigil 把我們的抓取的文件加載到程序中,在添加文件對話框中我們?nèi)x所有文件。
內(nèi)容都是 HTML 文件,所以編輯、排版什么的學(xué)習(xí)下 HTML。
3.4 制作目錄
文件中存在 HTML 的 h 標(biāo)簽時,點(diǎn)擊生成目錄按鈕就可以自動生成目錄,我們在前面數(shù)據(jù)抓取時已經(jīng)自動添加了 h1 標(biāo)簽。
3.5 制作封面
封面本質(zhì)上也是 HTML,可以編輯,也可以從頁面爬取,就留給大家自己實現(xiàn)吧。
3.6 編輯元數(shù)據(jù)
編輯書名、作者等信息。
3.6 輸出 ePub
編輯完成后保存,取個名字。
輸出可以使用電子書閱讀軟件打開查看,我用的是 Calibre,還可以方便的轉(zhuǎn)換為相應(yīng)的格式裝到 Kindle 中閱讀。
名稱欄目:如何用 Python 爬取網(wǎng)站制作電子書
轉(zhuǎn)載來于:http://jinyejixie.com/news15/176715.html
網(wǎng)站建設(shè)、網(wǎng)絡(luò)推廣公司-創(chuàng)新互聯(lián),是專注品牌與效果的網(wǎng)站制作,網(wǎng)絡(luò)營銷seo公司;服務(wù)項目有網(wǎng)站制作等
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)
猜你還喜歡下面的內(nèi)容