抓取網(wǎng)頁(yè)生成電子書(shū)
抓取網(wǎng)頁(yè)生成電子書(shū)(Windows,OSX及Linux操作系統格式的在線(xiàn)資料格式)
網(wǎng)站優(yōu)化 ? 優(yōu)采云 發(fā)表了文章 ? 0 個(gè)評論 ? 132 次瀏覽 ? 2021-10-16 13:30
自從我買(mǎi)了kindle,我就一直在想如何最大限度地發(fā)揮它的功效。雖然可供購買(mǎi)的書(shū)籍很多,網(wǎng)上也有很多免費的電子書(shū),但還是有很多有趣的內容以網(wǎng)頁(yè)的形式出現。例如,O'Reilly Atlas 提供了很多電子書(shū),但只提供免費在線(xiàn)閱讀;此外,許多材料或文件只是網(wǎng)絡(luò )形式。所以我希望將這些網(wǎng)上資料以某種方式轉換成epub或者mobi格式,以便在kindle上閱讀。本文文章介紹了如何使用calibre并編寫(xiě)少量代碼來(lái)實(shí)現這一目標。
Calibre 簡(jiǎn)介
Calibre 是一款免費的電子書(shū)管理工具,兼容 Windows、OS X 和 Linux。令人欣慰的是,除了GUI,calibre 還提供了很多命令行工具。ebook-convert 命令可以基于用戶(hù)編寫(xiě)的食譜。該文件(實(shí)際上是python代碼)抓取指定頁(yè)面的內容,生成mobi等格式的電子書(shū)。爬取行為可以通過(guò)編寫(xiě)recipe來(lái)定制,以適應不同的網(wǎng)頁(yè)結構。
安裝口徑
Calibre的下載地址是,您可以根據自己的操作系統下載相應的安裝程序。
如果是Linux操作系統,也可以通過(guò)軟件倉庫安裝:
Archlinux:
pacman -S calibre<br />
Debian/Ubuntu:
apt-get install calibre<br />
紅帽/Fedora/CentOS:
yum -y install calibre<br />
請注意,如果您使用 OSX,則需要單獨安裝命令行工具。
抓取網(wǎng)頁(yè)以生成電子書(shū)
下面以Git Pocket Guide為例,說(shuō)明如何通過(guò)calibre從網(wǎng)頁(yè)生成電子書(shū)。
找到索引頁(yè)
要爬取整本書(shū),首先要找到索引頁(yè)。這個(gè)頁(yè)面一般是目錄,也就是目錄頁(yè)面,其中每個(gè)目錄鏈接都連接到相應的內容頁(yè)面。在生成電子書(shū)時(shí),索引頁(yè)會(huì )指導抓取哪些頁(yè)面以及內容組織的順序。在這個(gè)例子中,索引頁(yè)是。
寫(xiě)食譜
食譜是一個(gè)帶有食譜擴展名的腳本。內容其實(shí)是一段python代碼,定義了calibre爬取頁(yè)面的范圍和行為。以下是爬取 Git Pocket Guide 的秘籍:
from calibre.web.feeds.recipes import BasicNewsRecipe<br /><br />class Git_Pocket_Guide(BasicNewsRecipe):<br /><br /> title = 'Git Pocket Guide'<br /> description = ''<br /> cover_url = 'http://akamaicovers.oreilly.co ... %3Bbr /><br /> url_prefix = 'http://chimera.labs.oreilly.co ... %3Bbr /> no_stylesheets = True<br /> keep_only_tags = [{ 'class': 'chapter' }]<br /><br /> def get_title(self, link):<br /> return link.contents[0].strip()<br /><br /> def parse_index(self):<br /> soup = self.index_to_soup(self.url_prefix + 'index.html')<br /><br /> div = soup.find('div', { 'class': 'toc' })<br /><br /> articles = []<br /> for link in div.findAll('a'):<br /> if '#' in link['href']:<br /> continue<br /><br /> if not 'ch' in link['href']:<br /> continue<br /><br /> til = self.get_title(link)<br /> url = self.url_prefix + link['href']<br /> a = { 'title': til, 'url': url }<br /><br /> articles.append(a)<br /><br /> ans = [('Git_Pocket_Guide', articles)]<br /><br /> return ans<br />
下面解釋了代碼的不同部分。
整體結構
一般來(lái)說(shuō),一個(gè)recipe是一個(gè)python類(lèi),但是這個(gè)類(lèi)必須繼承calibre.web.feeds.recipes.BasicNewsRecipe。
解析索引
整個(gè)recipe的核心方法是parse_index,這也是recipes必須實(shí)現的唯一方法。該方法的目標是通過(guò)分析索引頁(yè)的內容,返回一個(gè)稍微復雜一些的數據結構(稍后介紹)。這個(gè)數據結構定義了整個(gè)電子書(shū)的內容和內容組織順序。
整體屬性設置
在類(lèi)的開(kāi)頭,定義了一些全局屬性:
title = 'Git Pocket Guide'<br />description = ''<br />cover_url = 'http://akamaicovers.oreilly.co ... %3Bbr /><br />url_prefix = 'http://chimera.labs.oreilly.co ... %3Bbr />no_stylesheets = True<br />keep_only_tags = [{ 'class': 'chapter' }]<br />
parse_index 返回值
下面通過(guò)分析索引頁(yè)來(lái)描述parse_index需要返回的數據結構。
整體的返回數據結構是一個(gè)列表,其中每個(gè)元素是一個(gè)元組,一個(gè)元組代表一個(gè)卷。在這個(gè)例子中,只有一個(gè)卷,所以列表中只有一個(gè)元組。
每個(gè)元組有兩個(gè)元素,第一個(gè)元素是卷名,第二個(gè)元素是一個(gè)列表,列表中的每個(gè)元素都是一個(gè)映射,表示一個(gè)章節(chapter),映射中有兩個(gè)元素: title 和 url , Title是章節的標題,url是章節所在的內容頁(yè)面的url。
Calibre 會(huì )根據parse_index 返回的結果對整本書(shū)進(jìn)行爬取和組織,并會(huì )自行爬取處理內容內外的圖片。
整個(gè)parse_index使用soup解析索引頁(yè),生成上述數據結構。
更多的
以上是最基本的食譜。如果想詳細了解如何使用,可以參考API文檔。
生成手機
寫(xiě)好菜譜后,可以在命令行中使用以下命令生成電子書(shū):
ebook-convert Git_Pocket_Guide.recipe Git_Pocket_Guide.mobi<br />
您可以生成mobi 格式的電子書(shū)。ebook-convert 會(huì )爬取相關(guān)內容,根據配方代碼自行組織結構。
最終效果
下面是在kindle上看到的效果。
內容
內容一
內容二
帶圖片的頁(yè)面
實(shí)際效果
我的食譜倉庫
我在github上做了一個(gè)kindle-open-books,里面有一些菜譜,是我自己寫(xiě)的,其他同學(xué)貢獻的。歡迎任何人提供食譜。 查看全部
抓取網(wǎng)頁(yè)生成電子書(shū)(Windows,OSX及Linux操作系統格式的在線(xiàn)資料格式)
自從我買(mǎi)了kindle,我就一直在想如何最大限度地發(fā)揮它的功效。雖然可供購買(mǎi)的書(shū)籍很多,網(wǎng)上也有很多免費的電子書(shū),但還是有很多有趣的內容以網(wǎng)頁(yè)的形式出現。例如,O'Reilly Atlas 提供了很多電子書(shū),但只提供免費在線(xiàn)閱讀;此外,許多材料或文件只是網(wǎng)絡(luò )形式。所以我希望將這些網(wǎng)上資料以某種方式轉換成epub或者mobi格式,以便在kindle上閱讀。本文文章介紹了如何使用calibre并編寫(xiě)少量代碼來(lái)實(shí)現這一目標。
Calibre 簡(jiǎn)介
Calibre 是一款免費的電子書(shū)管理工具,兼容 Windows、OS X 和 Linux。令人欣慰的是,除了GUI,calibre 還提供了很多命令行工具。ebook-convert 命令可以基于用戶(hù)編寫(xiě)的食譜。該文件(實(shí)際上是python代碼)抓取指定頁(yè)面的內容,生成mobi等格式的電子書(shū)。爬取行為可以通過(guò)編寫(xiě)recipe來(lái)定制,以適應不同的網(wǎng)頁(yè)結構。
安裝口徑
Calibre的下載地址是,您可以根據自己的操作系統下載相應的安裝程序。
如果是Linux操作系統,也可以通過(guò)軟件倉庫安裝:
Archlinux:
pacman -S calibre<br />
Debian/Ubuntu:
apt-get install calibre<br />
紅帽/Fedora/CentOS:
yum -y install calibre<br />
請注意,如果您使用 OSX,則需要單獨安裝命令行工具。
抓取網(wǎng)頁(yè)以生成電子書(shū)
下面以Git Pocket Guide為例,說(shuō)明如何通過(guò)calibre從網(wǎng)頁(yè)生成電子書(shū)。
找到索引頁(yè)
要爬取整本書(shū),首先要找到索引頁(yè)。這個(gè)頁(yè)面一般是目錄,也就是目錄頁(yè)面,其中每個(gè)目錄鏈接都連接到相應的內容頁(yè)面。在生成電子書(shū)時(shí),索引頁(yè)會(huì )指導抓取哪些頁(yè)面以及內容組織的順序。在這個(gè)例子中,索引頁(yè)是。
寫(xiě)食譜
食譜是一個(gè)帶有食譜擴展名的腳本。內容其實(shí)是一段python代碼,定義了calibre爬取頁(yè)面的范圍和行為。以下是爬取 Git Pocket Guide 的秘籍:
from calibre.web.feeds.recipes import BasicNewsRecipe<br /><br />class Git_Pocket_Guide(BasicNewsRecipe):<br /><br /> title = 'Git Pocket Guide'<br /> description = ''<br /> cover_url = 'http://akamaicovers.oreilly.co ... %3Bbr /><br /> url_prefix = 'http://chimera.labs.oreilly.co ... %3Bbr /> no_stylesheets = True<br /> keep_only_tags = [{ 'class': 'chapter' }]<br /><br /> def get_title(self, link):<br /> return link.contents[0].strip()<br /><br /> def parse_index(self):<br /> soup = self.index_to_soup(self.url_prefix + 'index.html')<br /><br /> div = soup.find('div', { 'class': 'toc' })<br /><br /> articles = []<br /> for link in div.findAll('a'):<br /> if '#' in link['href']:<br /> continue<br /><br /> if not 'ch' in link['href']:<br /> continue<br /><br /> til = self.get_title(link)<br /> url = self.url_prefix + link['href']<br /> a = { 'title': til, 'url': url }<br /><br /> articles.append(a)<br /><br /> ans = [('Git_Pocket_Guide', articles)]<br /><br /> return ans<br />
下面解釋了代碼的不同部分。
整體結構
一般來(lái)說(shuō),一個(gè)recipe是一個(gè)python類(lèi),但是這個(gè)類(lèi)必須繼承calibre.web.feeds.recipes.BasicNewsRecipe。
解析索引
整個(gè)recipe的核心方法是parse_index,這也是recipes必須實(shí)現的唯一方法。該方法的目標是通過(guò)分析索引頁(yè)的內容,返回一個(gè)稍微復雜一些的數據結構(稍后介紹)。這個(gè)數據結構定義了整個(gè)電子書(shū)的內容和內容組織順序。
整體屬性設置
在類(lèi)的開(kāi)頭,定義了一些全局屬性:
title = 'Git Pocket Guide'<br />description = ''<br />cover_url = 'http://akamaicovers.oreilly.co ... %3Bbr /><br />url_prefix = 'http://chimera.labs.oreilly.co ... %3Bbr />no_stylesheets = True<br />keep_only_tags = [{ 'class': 'chapter' }]<br />
parse_index 返回值
下面通過(guò)分析索引頁(yè)來(lái)描述parse_index需要返回的數據結構。
整體的返回數據結構是一個(gè)列表,其中每個(gè)元素是一個(gè)元組,一個(gè)元組代表一個(gè)卷。在這個(gè)例子中,只有一個(gè)卷,所以列表中只有一個(gè)元組。
每個(gè)元組有兩個(gè)元素,第一個(gè)元素是卷名,第二個(gè)元素是一個(gè)列表,列表中的每個(gè)元素都是一個(gè)映射,表示一個(gè)章節(chapter),映射中有兩個(gè)元素: title 和 url , Title是章節的標題,url是章節所在的內容頁(yè)面的url。
Calibre 會(huì )根據parse_index 返回的結果對整本書(shū)進(jìn)行爬取和組織,并會(huì )自行爬取處理內容內外的圖片。
整個(gè)parse_index使用soup解析索引頁(yè),生成上述數據結構。
更多的
以上是最基本的食譜。如果想詳細了解如何使用,可以參考API文檔。
生成手機
寫(xiě)好菜譜后,可以在命令行中使用以下命令生成電子書(shū):
ebook-convert Git_Pocket_Guide.recipe Git_Pocket_Guide.mobi<br />
您可以生成mobi 格式的電子書(shū)。ebook-convert 會(huì )爬取相關(guān)內容,根據配方代碼自行組織結構。
最終效果
下面是在kindle上看到的效果。
內容
內容一
內容二
帶圖片的頁(yè)面
實(shí)際效果
我的食譜倉庫
我在github上做了一個(gè)kindle-open-books,里面有一些菜譜,是我自己寫(xiě)的,其他同學(xué)貢獻的。歡迎任何人提供食譜。
抓取網(wǎng)頁(yè)生成電子書(shū)(只要能顯示在網(wǎng)頁(yè)上的東西都可以抓下來(lái)。。 )
網(wǎng)站優(yōu)化 ? 優(yōu)采云 發(fā)表了文章 ? 0 個(gè)評論 ? 143 次瀏覽 ? 2021-10-15 11:08
)
最近,我迷上了德州撲克。我的同學(xué)H是這次活動(dòng)的領(lǐng)隊(tuifei)。我們同學(xué)不僅PK了,還給我發(fā)了截圖,WC,你也買(mǎi)了書(shū),你也進(jìn)了群,你快上天堂了。. .
晚上11點(diǎn)30分,我用我的房門(mén)打開(kāi)他房間的門(mén),他果然在床上。
H,有資源嗎?
不是,X寶上貼的和我下載的一樣,只有44頁(yè),前十頁(yè)是廣告。
哎,無(wú)良商家,退款?
不,只有1.00元,她又給了我一本書(shū)。
來(lái)看看澳門(mén)賭場(chǎng)上線(xiàn)的感覺(jué)吧。
回去jd上找,電子版18元,紙質(zhì)版什么的。沒(méi)有微信閱讀。
第二天,我在實(shí)驗室遇到了H。還有其他資源嗎?
恩,網(wǎng)易閱讀上有,我付費了。
第一次聽(tīng)說(shuō)網(wǎng)易讀書(shū),周末在他的實(shí)驗室度過(guò)。
神奇的是網(wǎng)易云閱讀器可以在網(wǎng)頁(yè)上打開(kāi)查看。
有這樣的操作嗎??
我發(fā)現了一些東西,
WC,網(wǎng)易太甜了!
太甜了,我也想為此把文字記下來(lái)。
換句話(huà)說(shuō),只要能在網(wǎng)頁(yè)上顯示,就可以被捕獲。
一、創(chuàng )意的產(chǎn)生
要么使用現成的工具,比如優(yōu)采云,來(lái)抓取網(wǎng)絡(luò )上的數據,但使用這個(gè)工具顯然是一個(gè)失學(xué)的人。要么使用開(kāi)源框架,然后在知乎上有一個(gè)非常流行的“爬蟲(chóng)”。玩爬蟲(chóng)的人很多,請自己知乎。用的比較多的框架有scrapy、pyspider等,前者比較低級,搞這個(gè)工作的人玩這個(gè)比較專(zhuān)業(yè)。后者非常適合新手玩,帶有WEUI,網(wǎng)頁(yè)上的可視化操作,非常方便。這篇文章懶得用pyspider。
二、設置環(huán)境
這部分我其實(shí)是一年前做的,不過(guò)當時(shí)我用的是windows平臺?,F在再看pyspider的官網(wǎng),發(fā)現windows的缺點(diǎn)很多,而且pyspider的開(kāi)發(fā)也是在linux平臺上進(jìn)行的。所以即使我是新手,也得在linux上使用環(huán)境。(pyspider 文檔在這里)
對于Linux發(fā)行版的選擇,官網(wǎng)列出了幾個(gè),centos(我的VPS上用的那個(gè)),ubuntu等??紤]到用瀏覽器,可能需要帶桌面的linux系統。于是我在我的windows10上的vbox上安裝了centos,后來(lái)發(fā)現安裝桌面環(huán)境真的太慢了??。突然發(fā)現自己太傻了。真的,我安裝了一個(gè)Kali系統(我前段時(shí)間學(xué)會(huì )了安裝)。Kali是基于Debian的發(fā)行版,ubuntu也是基于Debian的,所以使用kali應該沒(méi)有問(wèn)題。
參考pyspider幫助,pyspider中文網(wǎng)站
首先安裝pyspider
apt-get 安裝 pyspider
然后安裝phantomjs
apt-get 安裝 phantomjs
是不是很簡(jiǎn)單。Phantomjs 是一個(gè)無(wú)界面瀏覽器,用于完全模擬用戶(hù)在瀏覽器上的操作,用于處理比較麻煩的問(wèn)題,比如運行js、異步加載網(wǎng)頁(yè)、響應網(wǎng)站反爬策略。另外,這款瀏覽器比IE、Chrome、Firefox等界面瀏覽器要快很多,詳情請參考/。
安裝成功后,在終端輸入pyspider
提示phantomjs fetcher運行在25555端口,這個(gè)其實(shí)是pyspider用phantomjs運行的,所以在加載AJAX頁(yè)面的時(shí)候很有用。
三、分析頁(yè)面
打開(kāi)某章的閱讀頁(yè)面,如《副王:秋雨傳》-老秋-電子書(shū)-在線(xiàn)閱讀-網(wǎng)易云閱讀,打開(kāi)調試工具Firebug。
選擇net標簽,這樣在打開(kāi)網(wǎng)頁(yè)的時(shí)候就可以看到頁(yè)面加載的過(guò)程。
一個(gè)閱讀頁(yè)面需要這么多資源!其實(shí)還有很多東西是不需要關(guān)心的,把tab切換成HTML,
其實(shí)請求只有兩個(gè),第一個(gè)在域名下,第二個(gè)在下??梢约僭O第二個(gè)與此頁(yè)面的內容幾乎沒(méi)有相關(guān)性,可以用于統計目的。查看第一個(gè)請求
具體不說(shuō)了,反正回復里沒(méi)有章節內容。
那么章節內容在哪里呢?
將選項卡切換到 XHR,
收錄 4 個(gè)異步請求。從 URL 和接收數據的時(shí)間(時(shí)間軸上的綠色部分),可以猜測最后一個(gè)是獲取章節內容的請求。其實(shí)就是一一點(diǎn)擊查看接收到的數據??梢钥吹缴洗握埱蠓祷氐臄祿且粋€(gè)json數據。
很明顯,json的一個(gè)字段就是content,這很可能就是我們想要的。但是這個(gè)字符串要編碼,常規套路是base64編碼,因為不是敏感數據。試試看,打開(kāi)瀏覽器的hack欄,把內容復制進(jìn)去,在Encoding里面選擇Base64Decode
結果是
你看到了什么?亂七八糟的胡言亂語(yǔ)。
不完全是,有
人物。這說(shuō)明content的內容確實(shí)是base64編碼的,但是漢字的解碼有問(wèn)題。
這時(shí)候使用pyspider的返回數據的json方法提取json數據,然后嘗試解碼收錄中文的內容:
得到了答案
本來(lái)以為和中文打交道要花點(diǎn)時(shí)間,沒(méi)想到一次就成功了。
四、登錄問(wèn)題
其實(shí)最難的不是找到文章的內容,而是以注冊人的身份訪(fǎng)問(wèn)網(wǎng)站。這個(gè)問(wèn)題從周末的兩天,到周一的一整天的戰斗,到周二的放棄,再到周三的重新審視這個(gè)問(wèn)題,我真的學(xué)到了很多。我遇到的問(wèn)題不是因為問(wèn)題本身的難度,而是因為我對它的理解深度。了解的越深,把握的就越準確。一個(gè)人摸索的時(shí)候,一開(kāi)始很興奮,漸漸地我懷疑自己,這個(gè)問(wèn)題有沒(méi)有辦法解決?還是自己的能力差距很大?
周三,我冷靜下來(lái),重新組織了登錄流程、cookie 交付流程,并將每次 cookie 更改記錄在草稿紙上。最終在不斷的嘗試和推理中找到了正確的應用方法,作為登錄者成功獲取了數據。其實(shí)核心就是cookie的交付,但是摸索的過(guò)程太長(cháng)了,我也是菜鳥(niǎo)。
五、數據的后處理
后處理其實(shí)很簡(jiǎn)單,上面已經(jīng)正確解碼了,下面只是將其寫(xiě)入文件。
def detail_page(self, response):
results=response.json
content=base64.b64decode(results['content'])
fo = open('/root/Documents/davidchiu2.txt','a')
fo.write(content)
fo.close()
return {
# "content": content,
"content_cn": content,
}
將結果保存到txt文件中,如下
因為有html的段落格式,還有圖片的鏈接,加個(gè)html header和end,把擴展名改成html,這樣用瀏覽器打開(kāi)就可以看到圖片了。
然后將頁(yè)面上的文字和圖片全部復制到word,排版后導出PDF,完美。
查看全部
抓取網(wǎng)頁(yè)生成電子書(shū)(只要能顯示在網(wǎng)頁(yè)上的東西都可以抓下來(lái)。。
)
最近,我迷上了德州撲克。我的同學(xué)H是這次活動(dòng)的領(lǐng)隊(tuifei)。我們同學(xué)不僅PK了,還給我發(fā)了截圖,WC,你也買(mǎi)了書(shū),你也進(jìn)了群,你快上天堂了。. .
晚上11點(diǎn)30分,我用我的房門(mén)打開(kāi)他房間的門(mén),他果然在床上。
H,有資源嗎?
不是,X寶上貼的和我下載的一樣,只有44頁(yè),前十頁(yè)是廣告。
哎,無(wú)良商家,退款?
不,只有1.00元,她又給了我一本書(shū)。
來(lái)看看澳門(mén)賭場(chǎng)上線(xiàn)的感覺(jué)吧。
回去jd上找,電子版18元,紙質(zhì)版什么的。沒(méi)有微信閱讀。
第二天,我在實(shí)驗室遇到了H。還有其他資源嗎?
恩,網(wǎng)易閱讀上有,我付費了。
第一次聽(tīng)說(shuō)網(wǎng)易讀書(shū),周末在他的實(shí)驗室度過(guò)。
神奇的是網(wǎng)易云閱讀器可以在網(wǎng)頁(yè)上打開(kāi)查看。

有這樣的操作嗎??
我發(fā)現了一些東西,

WC,網(wǎng)易太甜了!
太甜了,我也想為此把文字記下來(lái)。
換句話(huà)說(shuō),只要能在網(wǎng)頁(yè)上顯示,就可以被捕獲。
一、創(chuàng )意的產(chǎn)生
要么使用現成的工具,比如優(yōu)采云,來(lái)抓取網(wǎng)絡(luò )上的數據,但使用這個(gè)工具顯然是一個(gè)失學(xué)的人。要么使用開(kāi)源框架,然后在知乎上有一個(gè)非常流行的“爬蟲(chóng)”。玩爬蟲(chóng)的人很多,請自己知乎。用的比較多的框架有scrapy、pyspider等,前者比較低級,搞這個(gè)工作的人玩這個(gè)比較專(zhuān)業(yè)。后者非常適合新手玩,帶有WEUI,網(wǎng)頁(yè)上的可視化操作,非常方便。這篇文章懶得用pyspider。
二、設置環(huán)境
這部分我其實(shí)是一年前做的,不過(guò)當時(shí)我用的是windows平臺?,F在再看pyspider的官網(wǎng),發(fā)現windows的缺點(diǎn)很多,而且pyspider的開(kāi)發(fā)也是在linux平臺上進(jìn)行的。所以即使我是新手,也得在linux上使用環(huán)境。(pyspider 文檔在這里)
對于Linux發(fā)行版的選擇,官網(wǎng)列出了幾個(gè),centos(我的VPS上用的那個(gè)),ubuntu等??紤]到用瀏覽器,可能需要帶桌面的linux系統。于是我在我的windows10上的vbox上安裝了centos,后來(lái)發(fā)現安裝桌面環(huán)境真的太慢了??。突然發(fā)現自己太傻了。真的,我安裝了一個(gè)Kali系統(我前段時(shí)間學(xué)會(huì )了安裝)。Kali是基于Debian的發(fā)行版,ubuntu也是基于Debian的,所以使用kali應該沒(méi)有問(wèn)題。
參考pyspider幫助,pyspider中文網(wǎng)站
首先安裝pyspider
apt-get 安裝 pyspider
然后安裝phantomjs
apt-get 安裝 phantomjs
是不是很簡(jiǎn)單。Phantomjs 是一個(gè)無(wú)界面瀏覽器,用于完全模擬用戶(hù)在瀏覽器上的操作,用于處理比較麻煩的問(wèn)題,比如運行js、異步加載網(wǎng)頁(yè)、響應網(wǎng)站反爬策略。另外,這款瀏覽器比IE、Chrome、Firefox等界面瀏覽器要快很多,詳情請參考/。
安裝成功后,在終端輸入pyspider

提示phantomjs fetcher運行在25555端口,這個(gè)其實(shí)是pyspider用phantomjs運行的,所以在加載AJAX頁(yè)面的時(shí)候很有用。
三、分析頁(yè)面
打開(kāi)某章的閱讀頁(yè)面,如《副王:秋雨傳》-老秋-電子書(shū)-在線(xiàn)閱讀-網(wǎng)易云閱讀,打開(kāi)調試工具Firebug。

選擇net標簽,這樣在打開(kāi)網(wǎng)頁(yè)的時(shí)候就可以看到頁(yè)面加載的過(guò)程。

一個(gè)閱讀頁(yè)面需要這么多資源!其實(shí)還有很多東西是不需要關(guān)心的,把tab切換成HTML,

其實(shí)請求只有兩個(gè),第一個(gè)在域名下,第二個(gè)在下??梢约僭O第二個(gè)與此頁(yè)面的內容幾乎沒(méi)有相關(guān)性,可以用于統計目的。查看第一個(gè)請求

具體不說(shuō)了,反正回復里沒(méi)有章節內容。
那么章節內容在哪里呢?
將選項卡切換到 XHR,

收錄 4 個(gè)異步請求。從 URL 和接收數據的時(shí)間(時(shí)間軸上的綠色部分),可以猜測最后一個(gè)是獲取章節內容的請求。其實(shí)就是一一點(diǎn)擊查看接收到的數據??梢钥吹缴洗握埱蠓祷氐臄祿且粋€(gè)json數據。

很明顯,json的一個(gè)字段就是content,這很可能就是我們想要的。但是這個(gè)字符串要編碼,常規套路是base64編碼,因為不是敏感數據。試試看,打開(kāi)瀏覽器的hack欄,把內容復制進(jìn)去,在Encoding里面選擇Base64Decode

結果是

你看到了什么?亂七八糟的胡言亂語(yǔ)。
不完全是,有
人物。這說(shuō)明content的內容確實(shí)是base64編碼的,但是漢字的解碼有問(wèn)題。
這時(shí)候使用pyspider的返回數據的json方法提取json數據,然后嘗試解碼收錄中文的內容:

得到了答案

本來(lái)以為和中文打交道要花點(diǎn)時(shí)間,沒(méi)想到一次就成功了。
四、登錄問(wèn)題
其實(shí)最難的不是找到文章的內容,而是以注冊人的身份訪(fǎng)問(wèn)網(wǎng)站。這個(gè)問(wèn)題從周末的兩天,到周一的一整天的戰斗,到周二的放棄,再到周三的重新審視這個(gè)問(wèn)題,我真的學(xué)到了很多。我遇到的問(wèn)題不是因為問(wèn)題本身的難度,而是因為我對它的理解深度。了解的越深,把握的就越準確。一個(gè)人摸索的時(shí)候,一開(kāi)始很興奮,漸漸地我懷疑自己,這個(gè)問(wèn)題有沒(méi)有辦法解決?還是自己的能力差距很大?
周三,我冷靜下來(lái),重新組織了登錄流程、cookie 交付流程,并將每次 cookie 更改記錄在草稿紙上。最終在不斷的嘗試和推理中找到了正確的應用方法,作為登錄者成功獲取了數據。其實(shí)核心就是cookie的交付,但是摸索的過(guò)程太長(cháng)了,我也是菜鳥(niǎo)。
五、數據的后處理
后處理其實(shí)很簡(jiǎn)單,上面已經(jīng)正確解碼了,下面只是將其寫(xiě)入文件。
def detail_page(self, response):
results=response.json
content=base64.b64decode(results['content'])
fo = open('/root/Documents/davidchiu2.txt','a')
fo.write(content)
fo.close()
return {
# "content": content,
"content_cn": content,
}
將結果保存到txt文件中,如下

因為有html的段落格式,還有圖片的鏈接,加個(gè)html header和end,把擴展名改成html,這樣用瀏覽器打開(kāi)就可以看到圖片了。

然后將頁(yè)面上的文字和圖片全部復制到word,排版后導出PDF,完美。
抓取網(wǎng)頁(yè)生成電子書(shū)(快速指南發(fā)送一個(gè)請求:Requests-html的方便(圖))
網(wǎng)站優(yōu)化 ? 優(yōu)采云 發(fā)表了文章 ? 0 個(gè)評論 ? 119 次瀏覽 ? 2021-10-15 11:05
無(wú)意中發(fā)現了一個(gè)可以免費下載電子書(shū)的網(wǎng)站。它立刻勾起了我采集電子書(shū)的愛(ài)好,我很想下載這些書(shū)。
就在最近,requests 的作者 kennethreitz 發(fā)布了一個(gè)新的庫 requests-html。
它不僅可以請求網(wǎng)頁(yè),還可以解析 HTML 文檔。讓我們開(kāi)始吧。
安裝。
安裝很簡(jiǎn)單,直接執行:
pip install requests-html
就是這樣。
分析頁(yè)面結構
通過(guò)瀏覽器查看元素,可以發(fā)現這本電子書(shū)網(wǎng)站是用WordPress搭建的。主頁(yè)上的列表元素非常簡(jiǎn)單和規則。
所以我們可以搜索 .entry-title> a 得到所有書(shū)籍詳情頁(yè)的鏈接,然后我們進(jìn)入詳情頁(yè)找到下載鏈接。
從下圖。
可以發(fā)現download-links>a中的鏈接是該書(shū)的下載鏈接。
回到列表頁(yè)面,可以發(fā)現該站點(diǎn)有700多個(gè)頁(yè)面,因此我們可以遍歷列表以獲取所有下載鏈接。
請求-html 快速指南
發(fā)送 GET 請求:
from requests_html import HTMLSession
session = HTMLSession()
r = session.get('https://python.org/')
Requests-html 的方便之處在于它解析 html 的方式就像使用 jQuery 一樣簡(jiǎn)單,比如:
# 獲取頁(yè)面的所有鏈接可以這樣寫(xiě):
r.html.links
# 會(huì )返回 {'//docs.python.org/3/tutorial/', '/about/apps/'}
# 獲取頁(yè)面的所有的絕對鏈接:
r.html.absolute_links
# 會(huì )返回 {'https://github.com/python/pyth ... 39%3B, 'https://docs.python.org/3/tutorial/'}
# 通過(guò) CSS 選擇器選擇元素:
about = r.find('.about', first=True)
# 參數 first 表示只獲取找到的第一元素
about.text # 獲取 .about 下的所有文本
about.attrs # 獲取 .about 下所有屬性像 id, src, href 等等
about.html # 獲取 .about 的 HTML
about.find('a') # 獲取 .about 下的所有 a 標簽
構建代碼。
from requests_html import HTMLSession
import requests
import time
import json
import random
import sys
session = HTMLSession()
list_url = 'http://www.allitebooks.com/page/'
USER_AGENTS = [
"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_7_3) AppleWebKit/535.20 (KHTML, like Gecko) Chrome/19.0.1036.7 Safari/535.20",
"Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.1 (KHTML, like Gecko) Chrome/21.0.1180.71 Safari/537.1 LBBROWSER",
"Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/535.11 (KHTML, like Gecko) Chrome/17.0.963.84 Safari/535.11 LBBROWSER",
"Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.1; WOW64; Trident/5.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; .NET4.0C; .NET4.0E)",
"Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; QQDownload 732; .NET4.0C; .NET4.0E)",
"Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; Trident/4.0; SV1; QQDownload 732; .NET4.0C; .NET4.0E; 360SE)",
"Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; QQDownload 732; .NET4.0C; .NET4.0E)",
"Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.1 (KHTML, like Gecko) Chrome/21.0.1180.89 Safari/537.1",
"Mozilla/5.0 (iPad; U; CPU OS 4_2_1 like Mac OS X; zh-cn) AppleWebKit/533.17.9 (KHTML, like Gecko) Version/5.0.2 Mobile/8C148 Safari/6533.18.5",
"Mozilla/5.0 (Windows NT 6.1; Win64; x64; rv:2.0b13pre) Gecko/20110307 Firefox/4.0b13pre",
"Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:16.0) Gecko/20100101 Firefox/16.0",
"Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.11 (KHTML, like Gecko) Chrome/23.0.1271.64 Safari/537.11",
"Mozilla/5.0 (X11; U; Linux x86_64; zh-CN; rv:1.9.2.10) Gecko/20100922 Ubuntu/10.10 (maverick) Firefox/3.6.10"
]
# 獲取當前列表頁(yè)所有圖書(shū)鏈接
def get_list(url):
response = session.get(url)
all_link = response.html.find('.entry-title a') # 獲取頁(yè)面所有圖書(shū)詳情鏈接
for link in all_link:
getBookUrl(link.attrs['href'])
# 獲取圖書(shū)下載鏈接
def getBookUrl(url):
response = session.get(url)
l = response.html.find('.download-links a', first=True)
if l is not None: # 運行后發(fā)現有的個(gè)別頁(yè)面沒(méi)有下載鏈接,這里加個(gè)判斷
link = l.attrs['href'];
download(link)
#下載圖書(shū)
def download(url):
# 隨機瀏覽器 User-Agent
headers={ "User-Agent":random.choice(USER_AGENTS) }
# 獲取文件名
filename = url.split('/')[-1]
# 如果 url 里包含 .pdf
if ".pdf" in url:
file = 'book/'+filename # 文件路徑寫(xiě)死了,運行時(shí)當前目錄必須有名 book 的文件夾
with open(file, 'wb') as f:
print("正在下載 %s" % filename)
response = requests.get(url, stream=True, headers=headers)
# 獲取文件大小
total_length = response.headers.get('content-length')
# 如果文件大小不存在,則直接寫(xiě)入返回的文本
if total_length is None:
f.write(response.content)
else:
# 下載進(jìn)度條
dl = 0
total_length = int(total_length) # 文件大小
for data in response.iter_content(chunk_size=4096): # 每次響應獲取 4096 字節
dl += len(data)
f.write(data)
done = int(50 * dl / total_length)
sys.stdout.write("\r[%s%s]" % ('=' * done, ' ' * (50-done)) ) # 打印進(jìn)度條
sys.stdout.flush()
print(filename + '下載完成!')
if __name__ == '__main__':
#從這運行,應為知道列表總數,所以偷個(gè)懶直接開(kāi)始循環(huán)
for x in range(1,756):
print('當前頁(yè)面: '+ str(x))
get_list(list_url+str(x))
運行結果:
讀者福利,點(diǎn)擊鏈接領(lǐng)取相關(guān)學(xué)習福利包:
是安全的網(wǎng)站不用擔心,繼續訪(fǎng)問(wèn)后即可收到
就業(yè)系列:
有方向和目標的學(xué)習可以節省時(shí)間,而沒(méi)有方向和目標的學(xué)習純粹是浪費時(shí)間。
部分視頻展示:
電子書(shū)系列:
視頻通俗易懂,電子書(shū)作為輔助。有時(shí)看視頻不方便。您可以使用電子書(shū)作為輔助
Python人工智能系列:
學(xué)習是一個(gè)人最大的成就。通過(guò)學(xué)習,不僅可以提升自己的境界,還可以豐富自己的知識,為以后的就業(yè)打下基礎。
如果看到最后的小伙伴們,如果覺(jué)得這個(gè)文章對你有好處,請給我點(diǎn)個(gè)贊,關(guān)注我們,支持你?。。?! 查看全部
抓取網(wǎng)頁(yè)生成電子書(shū)(快速指南發(fā)送一個(gè)請求:Requests-html的方便(圖))
無(wú)意中發(fā)現了一個(gè)可以免費下載電子書(shū)的網(wǎng)站。它立刻勾起了我采集電子書(shū)的愛(ài)好,我很想下載這些書(shū)。

就在最近,requests 的作者 kennethreitz 發(fā)布了一個(gè)新的庫 requests-html。
它不僅可以請求網(wǎng)頁(yè),還可以解析 HTML 文檔。讓我們開(kāi)始吧。
安裝。
安裝很簡(jiǎn)單,直接執行:
pip install requests-html
就是這樣。
分析頁(yè)面結構
通過(guò)瀏覽器查看元素,可以發(fā)現這本電子書(shū)網(wǎng)站是用WordPress搭建的。主頁(yè)上的列表元素非常簡(jiǎn)單和規則。

所以我們可以搜索 .entry-title> a 得到所有書(shū)籍詳情頁(yè)的鏈接,然后我們進(jìn)入詳情頁(yè)找到下載鏈接。
從下圖。

可以發(fā)現download-links>a中的鏈接是該書(shū)的下載鏈接。
回到列表頁(yè)面,可以發(fā)現該站點(diǎn)有700多個(gè)頁(yè)面,因此我們可以遍歷列表以獲取所有下載鏈接。

請求-html 快速指南
發(fā)送 GET 請求:
from requests_html import HTMLSession
session = HTMLSession()
r = session.get('https://python.org/')
Requests-html 的方便之處在于它解析 html 的方式就像使用 jQuery 一樣簡(jiǎn)單,比如:
# 獲取頁(yè)面的所有鏈接可以這樣寫(xiě):
r.html.links
# 會(huì )返回 {'//docs.python.org/3/tutorial/', '/about/apps/'}
# 獲取頁(yè)面的所有的絕對鏈接:
r.html.absolute_links
# 會(huì )返回 {'https://github.com/python/pyth ... 39%3B, 'https://docs.python.org/3/tutorial/'}
# 通過(guò) CSS 選擇器選擇元素:
about = r.find('.about', first=True)
# 參數 first 表示只獲取找到的第一元素
about.text # 獲取 .about 下的所有文本
about.attrs # 獲取 .about 下所有屬性像 id, src, href 等等
about.html # 獲取 .about 的 HTML
about.find('a') # 獲取 .about 下的所有 a 標簽
構建代碼。
from requests_html import HTMLSession
import requests
import time
import json
import random
import sys
session = HTMLSession()
list_url = 'http://www.allitebooks.com/page/'
USER_AGENTS = [
"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_7_3) AppleWebKit/535.20 (KHTML, like Gecko) Chrome/19.0.1036.7 Safari/535.20",
"Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.1 (KHTML, like Gecko) Chrome/21.0.1180.71 Safari/537.1 LBBROWSER",
"Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/535.11 (KHTML, like Gecko) Chrome/17.0.963.84 Safari/535.11 LBBROWSER",
"Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.1; WOW64; Trident/5.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; .NET4.0C; .NET4.0E)",
"Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; QQDownload 732; .NET4.0C; .NET4.0E)",
"Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; Trident/4.0; SV1; QQDownload 732; .NET4.0C; .NET4.0E; 360SE)",
"Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; QQDownload 732; .NET4.0C; .NET4.0E)",
"Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.1 (KHTML, like Gecko) Chrome/21.0.1180.89 Safari/537.1",
"Mozilla/5.0 (iPad; U; CPU OS 4_2_1 like Mac OS X; zh-cn) AppleWebKit/533.17.9 (KHTML, like Gecko) Version/5.0.2 Mobile/8C148 Safari/6533.18.5",
"Mozilla/5.0 (Windows NT 6.1; Win64; x64; rv:2.0b13pre) Gecko/20110307 Firefox/4.0b13pre",
"Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:16.0) Gecko/20100101 Firefox/16.0",
"Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.11 (KHTML, like Gecko) Chrome/23.0.1271.64 Safari/537.11",
"Mozilla/5.0 (X11; U; Linux x86_64; zh-CN; rv:1.9.2.10) Gecko/20100922 Ubuntu/10.10 (maverick) Firefox/3.6.10"
]
# 獲取當前列表頁(yè)所有圖書(shū)鏈接
def get_list(url):
response = session.get(url)
all_link = response.html.find('.entry-title a') # 獲取頁(yè)面所有圖書(shū)詳情鏈接
for link in all_link:
getBookUrl(link.attrs['href'])
# 獲取圖書(shū)下載鏈接
def getBookUrl(url):
response = session.get(url)
l = response.html.find('.download-links a', first=True)
if l is not None: # 運行后發(fā)現有的個(gè)別頁(yè)面沒(méi)有下載鏈接,這里加個(gè)判斷
link = l.attrs['href'];
download(link)
#下載圖書(shū)
def download(url):
# 隨機瀏覽器 User-Agent
headers={ "User-Agent":random.choice(USER_AGENTS) }
# 獲取文件名
filename = url.split('/')[-1]
# 如果 url 里包含 .pdf
if ".pdf" in url:
file = 'book/'+filename # 文件路徑寫(xiě)死了,運行時(shí)當前目錄必須有名 book 的文件夾
with open(file, 'wb') as f:
print("正在下載 %s" % filename)
response = requests.get(url, stream=True, headers=headers)
# 獲取文件大小
total_length = response.headers.get('content-length')
# 如果文件大小不存在,則直接寫(xiě)入返回的文本
if total_length is None:
f.write(response.content)
else:
# 下載進(jìn)度條
dl = 0
total_length = int(total_length) # 文件大小
for data in response.iter_content(chunk_size=4096): # 每次響應獲取 4096 字節
dl += len(data)
f.write(data)
done = int(50 * dl / total_length)
sys.stdout.write("\r[%s%s]" % ('=' * done, ' ' * (50-done)) ) # 打印進(jìn)度條
sys.stdout.flush()
print(filename + '下載完成!')
if __name__ == '__main__':
#從這運行,應為知道列表總數,所以偷個(gè)懶直接開(kāi)始循環(huán)
for x in range(1,756):
print('當前頁(yè)面: '+ str(x))
get_list(list_url+str(x))
運行結果:

讀者福利,點(diǎn)擊鏈接領(lǐng)取相關(guān)學(xué)習福利包:
是安全的網(wǎng)站不用擔心,繼續訪(fǎng)問(wèn)后即可收到

就業(yè)系列:
有方向和目標的學(xué)習可以節省時(shí)間,而沒(méi)有方向和目標的學(xué)習純粹是浪費時(shí)間。

部分視頻展示:


電子書(shū)系列:
視頻通俗易懂,電子書(shū)作為輔助。有時(shí)看視頻不方便。您可以使用電子書(shū)作為輔助

Python人工智能系列:

學(xué)習是一個(gè)人最大的成就。通過(guò)學(xué)習,不僅可以提升自己的境界,還可以豐富自己的知識,為以后的就業(yè)打下基礎。
如果看到最后的小伙伴們,如果覺(jué)得這個(gè)文章對你有好處,請給我點(diǎn)個(gè)贊,關(guān)注我們,支持你?。。?!
抓取網(wǎng)頁(yè)生成電子書(shū)(requests-html快速指南發(fā)送一個(gè)get(請求:requests))
網(wǎng)站優(yōu)化 ? 優(yōu)采云 發(fā)表了文章 ? 0 個(gè)評論 ? 89 次瀏覽 ? 2021-10-14 11:13
安裝
安裝很簡(jiǎn)單,直接執行:
pip install requests-html
就是這樣。
分析頁(yè)面結構
通過(guò)瀏覽器查看元素,可以發(fā)現這本電子書(shū)網(wǎng)站是用wordpress構建的。主頁(yè)上的列表元素非常簡(jiǎn)單和規則。
所以我們可以搜索 .entry-title> a 得到所有書(shū)籍詳情頁(yè)的鏈接,然后我們進(jìn)入詳情頁(yè)找到下載鏈接,如下圖
可以發(fā)現 .download-links>a 中的鏈接是該書(shū)的下載鏈接?;氐搅斜眄?yè)面,可以發(fā)現該站點(diǎn)有700多個(gè)頁(yè)面,因此我們可以遍歷列表以獲取所有下載鏈接。
requests-html 快速指南
發(fā)送獲取請求:
from requests_html import htmlsession
session = htmlsession()
r = session.get('https://python.org/')
requests-html的方便之處在于它解析html的方式就像使用jquery一樣簡(jiǎn)單,例如:
# 獲取頁(yè)面的所有鏈接可以這樣寫(xiě):
r.html.links
# 會(huì )返回 {'//docs.python.org/3/tutorial/', '/about/apps/'}
# 獲取頁(yè)面的所有的絕對鏈接:
r.html.absolute_links
# 會(huì )返回 {'https://github.com/python/pythondotorg/issues', 'https://docs.python.org/3/tutorial/'}
# 通過(guò) css 選擇器選擇元素:
about = r.find('.about', first=true)
# 參數 first 表示只獲取找到的第一元素
about.text # 獲取 .about 下的所有文本
about.attrs # 獲取 .about 下所有屬性像 id, src, href 等等
about.html # 獲取 .about 的 html
about.find('a') # 獲取 .about 下的所有 a 標簽
構建代碼
from requests_html import htmlsession
import requests
import time
import json
import random
import sys
'''
想要學(xué)習python?python學(xué)習交流群:984632579滿(mǎn)足你的需求,資料都已經(jīng)上傳群文件,可以自行下載!
'''
session = htmlsession()
list_url = 'http://www.allitebooks.com/page/'
user_agents = [
"mozilla/5.0 (macintosh; intel mac os x 10_7_3) applewebkit/535.20 (khtml, like gecko) chrome/19.0.1036.7 safari/535.20",
"mozilla/5.0 (windows nt 6.1; wow64) applewebkit/537.1 (khtml, like gecko) chrome/21.0.1180.71 safari/537.1 lbbrowser",
"mozilla/5.0 (windows nt 6.1; wow64) applewebkit/535.11 (khtml, like gecko) chrome/17.0.963.84 safari/535.11 lbbrowser",
"mozilla/4.0 (compatible; msie 7.0; windows nt 6.1; wow64; trident/5.0; slcc2; .net clr 2.0.50727; .net clr 3.5.30729; .net clr 3.0.30729; media center pc 6.0; .net4.0c; .net4.0e)",
"mozilla/4.0 (compatible; msie 6.0; windows nt 5.1; sv1; qqdownload 732; .net4.0c; .net4.0e)",
"mozilla/4.0 (compatible; msie 7.0; windows nt 5.1; trident/4.0; sv1; qqdownload 732; .net4.0c; .net4.0e; 360se)",
"mozilla/4.0 (compatible; msie 6.0; windows nt 5.1; sv1; qqdownload 732; .net4.0c; .net4.0e)",
"mozilla/5.0 (windows nt 6.1; wow64) applewebkit/537.1 (khtml, like gecko) chrome/21.0.1180.89 safari/537.1",
"mozilla/5.0 (ipad; u; cpu os 4_2_1 like mac os x; zh-cn) applewebkit/533.17.9 (khtml, like gecko) version/5.0.2 mobile/8c148 safari/6533.18.5",
"mozilla/5.0 (windows nt 6.1; win64; x64; rv:2.0b13pre) gecko/20110307 firefox/4.0b13pre",
"mozilla/5.0 (x11; ubuntu; linux x86_64; rv:16.0) gecko/20100101 firefox/16.0",
"mozilla/5.0 (windows nt 6.1; wow64) applewebkit/537.11 (khtml, like gecko) chrome/23.0.1271.64 safari/537.11",
"mozilla/5.0 (x11; u; linux x86_64; zh-cn; rv:1.9.2.10) gecko/20100922 ubuntu/10.10 (maverick) firefox/3.6.10"
]
# 獲取當前列表頁(yè)所有圖書(shū)鏈接
def get_list(url):
response = session.get(url)
all_link = response.html.find('.entry-title a') # 獲取頁(yè)面所有圖書(shū)詳情鏈接
for link in all_link:
getbookurl(link.attrs['href'])
# 獲取圖書(shū)下載鏈接
def getbookurl(url):
response = session.get(url)
l = response.html.find('.download-links a', first=true)
if l is not none: # 運行后發(fā)現有的個(gè)別頁(yè)面沒(méi)有下載鏈接,這里加個(gè)判斷
link = l.attrs['href'];
download(link)
#下載圖書(shū)
def download(url):
# 隨機瀏覽器 user-agent
headers={ "user-agent":random.choice(user_agents) }
# 獲取文件名
filename = url.split('/')[-1]
# 如果 url 里包含 .pdf
if ".pdf" in url:
file = 'book/'+filename # 文件路徑寫(xiě)死了,運行時(shí)當前目錄必須有名 book 的文件夾
with open(file, 'wb') as f:
print("正在下載 %s" % filename)
response = requests.get(url, stream=true, headers=headers)
# 獲取文件大小
total_length = response.headers.get('content-length')
# 如果文件大小不存在,則直接寫(xiě)入返回的文本
if total_length is none:
f.write(response.content)
else:
# 下載進(jìn)度條
dl = 0
total_length = int(total_length) # 文件大小
for data in response.iter_content(chunk_size=4096): # 每次響應獲取 4096 字節
dl += len(data)
f.write(data)
done = int(50 * dl / total_length)
sys.stdout.write("\r[%s%s]" % ('=' * done, ' ' * (50-done)) ) # 打印進(jìn)度條
sys.stdout.flush()
print(filename + '下載完成!')
if __name__ == '__main__':
#從這運行,應為知道列表總數,所以偷個(gè)懶直接開(kāi)始循環(huán)
for x in range(1,756):
print('當前頁(yè)面: '+ str(x))
get_list(list_url+str(x))
運行結果:
以上就是小編為大家介紹的內容。我已經(jīng)用python抓取了7000多本電子書(shū)進(jìn)行了詳細的集成和集成。我希望它會(huì )對你有所幫助。 查看全部
抓取網(wǎng)頁(yè)生成電子書(shū)(requests-html快速指南發(fā)送一個(gè)get(請求:requests))
安裝
安裝很簡(jiǎn)單,直接執行:
pip install requests-html
就是這樣。
分析頁(yè)面結構
通過(guò)瀏覽器查看元素,可以發(fā)現這本電子書(shū)網(wǎng)站是用wordpress構建的。主頁(yè)上的列表元素非常簡(jiǎn)單和規則。

所以我們可以搜索 .entry-title> a 得到所有書(shū)籍詳情頁(yè)的鏈接,然后我們進(jìn)入詳情頁(yè)找到下載鏈接,如下圖

可以發(fā)現 .download-links>a 中的鏈接是該書(shū)的下載鏈接?;氐搅斜眄?yè)面,可以發(fā)現該站點(diǎn)有700多個(gè)頁(yè)面,因此我們可以遍歷列表以獲取所有下載鏈接。
requests-html 快速指南
發(fā)送獲取請求:
from requests_html import htmlsession
session = htmlsession()
r = session.get('https://python.org/')
requests-html的方便之處在于它解析html的方式就像使用jquery一樣簡(jiǎn)單,例如:
# 獲取頁(yè)面的所有鏈接可以這樣寫(xiě):
r.html.links
# 會(huì )返回 {'//docs.python.org/3/tutorial/', '/about/apps/'}
# 獲取頁(yè)面的所有的絕對鏈接:
r.html.absolute_links
# 會(huì )返回 {'https://github.com/python/pythondotorg/issues', 'https://docs.python.org/3/tutorial/'}
# 通過(guò) css 選擇器選擇元素:
about = r.find('.about', first=true)
# 參數 first 表示只獲取找到的第一元素
about.text # 獲取 .about 下的所有文本
about.attrs # 獲取 .about 下所有屬性像 id, src, href 等等
about.html # 獲取 .about 的 html
about.find('a') # 獲取 .about 下的所有 a 標簽
構建代碼
from requests_html import htmlsession
import requests
import time
import json
import random
import sys
'''
想要學(xué)習python?python學(xué)習交流群:984632579滿(mǎn)足你的需求,資料都已經(jīng)上傳群文件,可以自行下載!
'''
session = htmlsession()
list_url = 'http://www.allitebooks.com/page/'
user_agents = [
"mozilla/5.0 (macintosh; intel mac os x 10_7_3) applewebkit/535.20 (khtml, like gecko) chrome/19.0.1036.7 safari/535.20",
"mozilla/5.0 (windows nt 6.1; wow64) applewebkit/537.1 (khtml, like gecko) chrome/21.0.1180.71 safari/537.1 lbbrowser",
"mozilla/5.0 (windows nt 6.1; wow64) applewebkit/535.11 (khtml, like gecko) chrome/17.0.963.84 safari/535.11 lbbrowser",
"mozilla/4.0 (compatible; msie 7.0; windows nt 6.1; wow64; trident/5.0; slcc2; .net clr 2.0.50727; .net clr 3.5.30729; .net clr 3.0.30729; media center pc 6.0; .net4.0c; .net4.0e)",
"mozilla/4.0 (compatible; msie 6.0; windows nt 5.1; sv1; qqdownload 732; .net4.0c; .net4.0e)",
"mozilla/4.0 (compatible; msie 7.0; windows nt 5.1; trident/4.0; sv1; qqdownload 732; .net4.0c; .net4.0e; 360se)",
"mozilla/4.0 (compatible; msie 6.0; windows nt 5.1; sv1; qqdownload 732; .net4.0c; .net4.0e)",
"mozilla/5.0 (windows nt 6.1; wow64) applewebkit/537.1 (khtml, like gecko) chrome/21.0.1180.89 safari/537.1",
"mozilla/5.0 (ipad; u; cpu os 4_2_1 like mac os x; zh-cn) applewebkit/533.17.9 (khtml, like gecko) version/5.0.2 mobile/8c148 safari/6533.18.5",
"mozilla/5.0 (windows nt 6.1; win64; x64; rv:2.0b13pre) gecko/20110307 firefox/4.0b13pre",
"mozilla/5.0 (x11; ubuntu; linux x86_64; rv:16.0) gecko/20100101 firefox/16.0",
"mozilla/5.0 (windows nt 6.1; wow64) applewebkit/537.11 (khtml, like gecko) chrome/23.0.1271.64 safari/537.11",
"mozilla/5.0 (x11; u; linux x86_64; zh-cn; rv:1.9.2.10) gecko/20100922 ubuntu/10.10 (maverick) firefox/3.6.10"
]
# 獲取當前列表頁(yè)所有圖書(shū)鏈接
def get_list(url):
response = session.get(url)
all_link = response.html.find('.entry-title a') # 獲取頁(yè)面所有圖書(shū)詳情鏈接
for link in all_link:
getbookurl(link.attrs['href'])
# 獲取圖書(shū)下載鏈接
def getbookurl(url):
response = session.get(url)
l = response.html.find('.download-links a', first=true)
if l is not none: # 運行后發(fā)現有的個(gè)別頁(yè)面沒(méi)有下載鏈接,這里加個(gè)判斷
link = l.attrs['href'];
download(link)
#下載圖書(shū)
def download(url):
# 隨機瀏覽器 user-agent
headers={ "user-agent":random.choice(user_agents) }
# 獲取文件名
filename = url.split('/')[-1]
# 如果 url 里包含 .pdf
if ".pdf" in url:
file = 'book/'+filename # 文件路徑寫(xiě)死了,運行時(shí)當前目錄必須有名 book 的文件夾
with open(file, 'wb') as f:
print("正在下載 %s" % filename)
response = requests.get(url, stream=true, headers=headers)
# 獲取文件大小
total_length = response.headers.get('content-length')
# 如果文件大小不存在,則直接寫(xiě)入返回的文本
if total_length is none:
f.write(response.content)
else:
# 下載進(jìn)度條
dl = 0
total_length = int(total_length) # 文件大小
for data in response.iter_content(chunk_size=4096): # 每次響應獲取 4096 字節
dl += len(data)
f.write(data)
done = int(50 * dl / total_length)
sys.stdout.write("\r[%s%s]" % ('=' * done, ' ' * (50-done)) ) # 打印進(jìn)度條
sys.stdout.flush()
print(filename + '下載完成!')
if __name__ == '__main__':
#從這運行,應為知道列表總數,所以偷個(gè)懶直接開(kāi)始循環(huán)
for x in range(1,756):
print('當前頁(yè)面: '+ str(x))
get_list(list_url+str(x))
運行結果:

以上就是小編為大家介紹的內容。我已經(jīng)用python抓取了7000多本電子書(shū)進(jìn)行了詳細的集成和集成。我希望它會(huì )對你有所幫助。
抓取網(wǎng)頁(yè)生成電子書(shū)(網(wǎng)絡(luò )書(shū)籍抓取器是一款幫助用戶(hù)下載指定網(wǎng)頁(yè)的某)
網(wǎng)站優(yōu)化 ? 優(yōu)采云 發(fā)表了文章 ? 0 個(gè)評論 ? 325 次瀏覽 ? 2021-10-11 17:45
在線(xiàn)圖書(shū)抓取器是一種可以幫助用戶(hù)下載指定網(wǎng)頁(yè)的某本書(shū)和某章節的軟件。在線(xiàn)圖書(shū)抓取器可以快速下載小說(shuō)。同時(shí)軟件支持斷點(diǎn)續傳功能,非常方便,很有必要??梢韵螺d使用。
在線(xiàn)搶書(shū)功能介紹
您可以提取指定小說(shuō)目錄頁(yè)的章節信息并進(jìn)行調整,然后按照章節順序抓取小說(shuō)內容,然后以最合適的方式進(jìn)行合并。抓取過(guò)程可以隨時(shí)中斷,關(guān)閉程序后可以繼續上一個(gè)任務(wù)。
網(wǎng)絡(luò )圖書(shū)采集器軟件功能
1、 章節調整:提取目錄后,可以進(jìn)行移動(dòng)、刪除、倒序等調整操作。調整會(huì )直接影響最終的書(shū)籍,也會(huì )以調整后的章節順序輸出。
2、自動(dòng)重試:在爬取過(guò)程中,由于網(wǎng)絡(luò )因素,可能會(huì )出現爬取失敗的情況。程序可能會(huì )自動(dòng)重試直到成功,也可以暫時(shí)中斷爬?。ㄖ袛嗪箨P(guān)閉程序不影響進(jìn)度),等網(wǎng)絡(luò )好后再試。
3、停止和恢復:可以隨時(shí)停止抓取過(guò)程,退出程序后不影響進(jìn)度(章節信息會(huì )保存在記錄中,運行程序后可以恢復抓取下一次。注意:您需要先使用停止按鈕中斷然后退出程序,如果直接退出,將不會(huì )恢復)。
4、 一鍵抓?。河址Q(chēng)“啞模式”,基本可以實(shí)現自動(dòng)抓取合并功能,直接輸出最終的文本文件。前面可能需要輸入最基本的網(wǎng)址、保存位置等信息(會(huì )有明顯的操作提示),調整章節后也可以一鍵抓取,抓取合并操作會(huì )自動(dòng)完成.
5、適用網(wǎng)站:已收錄10個(gè)適用網(wǎng)站(選擇后可以快速打開(kāi)網(wǎng)站找到自己需要的書(shū)),并自動(dòng)應用相應的代碼,也可以測試其他小說(shuō)網(wǎng)站,如果一起使用,可以手動(dòng)添加到設置文件中,以備后用。
6、 制作電子書(shū)方便:可以在設置文件中添加每個(gè)章節名稱(chēng)的前綴和后綴,為后期制作電子書(shū)的目錄帶來(lái)極大的方便。
如何使用在線(xiàn)圖書(shū)抓取器
一、首先進(jìn)入你要下載的小說(shuō)的網(wǎng)頁(yè)。
二、輸入書(shū)名,點(diǎn)擊目錄提取。
三、設置保存路徑,點(diǎn)擊Start crawling開(kāi)始下載。 查看全部
抓取網(wǎng)頁(yè)生成電子書(shū)(網(wǎng)絡(luò )書(shū)籍抓取器是一款幫助用戶(hù)下載指定網(wǎng)頁(yè)的某)
在線(xiàn)圖書(shū)抓取器是一種可以幫助用戶(hù)下載指定網(wǎng)頁(yè)的某本書(shū)和某章節的軟件。在線(xiàn)圖書(shū)抓取器可以快速下載小說(shuō)。同時(shí)軟件支持斷點(diǎn)續傳功能,非常方便,很有必要??梢韵螺d使用。
在線(xiàn)搶書(shū)功能介紹
您可以提取指定小說(shuō)目錄頁(yè)的章節信息并進(jìn)行調整,然后按照章節順序抓取小說(shuō)內容,然后以最合適的方式進(jìn)行合并。抓取過(guò)程可以隨時(shí)中斷,關(guān)閉程序后可以繼續上一個(gè)任務(wù)。
網(wǎng)絡(luò )圖書(shū)采集器軟件功能
1、 章節調整:提取目錄后,可以進(jìn)行移動(dòng)、刪除、倒序等調整操作。調整會(huì )直接影響最終的書(shū)籍,也會(huì )以調整后的章節順序輸出。
2、自動(dòng)重試:在爬取過(guò)程中,由于網(wǎng)絡(luò )因素,可能會(huì )出現爬取失敗的情況。程序可能會(huì )自動(dòng)重試直到成功,也可以暫時(shí)中斷爬?。ㄖ袛嗪箨P(guān)閉程序不影響進(jìn)度),等網(wǎng)絡(luò )好后再試。
3、停止和恢復:可以隨時(shí)停止抓取過(guò)程,退出程序后不影響進(jìn)度(章節信息會(huì )保存在記錄中,運行程序后可以恢復抓取下一次。注意:您需要先使用停止按鈕中斷然后退出程序,如果直接退出,將不會(huì )恢復)。
4、 一鍵抓?。河址Q(chēng)“啞模式”,基本可以實(shí)現自動(dòng)抓取合并功能,直接輸出最終的文本文件。前面可能需要輸入最基本的網(wǎng)址、保存位置等信息(會(huì )有明顯的操作提示),調整章節后也可以一鍵抓取,抓取合并操作會(huì )自動(dòng)完成.
5、適用網(wǎng)站:已收錄10個(gè)適用網(wǎng)站(選擇后可以快速打開(kāi)網(wǎng)站找到自己需要的書(shū)),并自動(dòng)應用相應的代碼,也可以測試其他小說(shuō)網(wǎng)站,如果一起使用,可以手動(dòng)添加到設置文件中,以備后用。
6、 制作電子書(shū)方便:可以在設置文件中添加每個(gè)章節名稱(chēng)的前綴和后綴,為后期制作電子書(shū)的目錄帶來(lái)極大的方便。
如何使用在線(xiàn)圖書(shū)抓取器
一、首先進(jìn)入你要下載的小說(shuō)的網(wǎng)頁(yè)。
二、輸入書(shū)名,點(diǎn)擊目錄提取。
三、設置保存路徑,點(diǎn)擊Start crawling開(kāi)始下載。
抓取網(wǎng)頁(yè)生成電子書(shū)(爬蟲(chóng)基礎:http協(xié)議和http相關(guān)協(xié)議編寫(xiě)python怎么爬)
網(wǎng)站優(yōu)化 ? 優(yōu)采云 發(fā)表了文章 ? 0 個(gè)評論 ? 140 次瀏覽 ? 2021-10-11 15:54
抓取網(wǎng)頁(yè)生成電子書(shū),批量增刪文件,python實(shí)現網(wǎng)頁(yè)爬蟲(chóng),抓取網(wǎng)頁(yè)上的文章和圖片;網(wǎng)頁(yè)上標注文章作者,評論的網(wǎng)頁(yè)及評論數、積分,統計參加活動(dòng)的人數;生成圖片下載代碼,
爬蟲(chóng)需要那些技術(shù)?爬蟲(chóng)基礎:http協(xié)議和http相關(guān)協(xié)議編寫(xiě)python爬蟲(chóng),爬蟲(chóng)怎么爬,爬什么,為什么要爬,爬取到的內容存在哪里,存儲時(shí)間大概是多久,網(wǎng)頁(yè)列表如何下載btw,網(wǎng)頁(yè)列表下載目前能實(shí)現的有九種下載方式,各有優(yōu)缺點(diǎn),對這方面了解不深,提供參考數據爬取,主要可以包括urllib,urllib2等模塊,也可以使用lxml模塊,也可以使用beautifulsoup模塊,采用正則表達式將數據以url的形式存入數據庫。
數據分析:根據輸入的python文件內容獲取其中的數據,即pandas,matplotlib,seaborn等。數據可視化:給數據結構化,以幫助更好的理解數據的價(jià)值和特征。以上所提到的爬蟲(chóng)主要偏向于前端編程部分,后臺的java,c++,python等如果要深入可以將原始數據獲取和預處理后在寫(xiě)入文件中,或者在本地使用https協(xié)議抓取,像uc直達云平臺,則采用了這個(gè)。
不過(guò)主要有幾點(diǎn)是要注意的,第一個(gè),數據的存儲,很有可能你獲取的數據到不了文件存儲的地方,只能像本地文件存儲一樣文件名都為文件的后綴名。第二個(gè),特征提取,這方面做的好的公司有百度地圖的百度圖片的美圖秀秀的拼圖云等。第三個(gè),爬蟲(chóng)模塊的封裝,當然這里的爬蟲(chóng)模塊主要有一個(gè)對接,爬蟲(chóng)通過(guò)相關(guān)模塊獲取數據,對接數據庫以后。
按照一定規則去實(shí)現網(wǎng)頁(yè)中數據的查詢(xún)、更新,然后進(jìn)行數據分析。當然也可以post等其他形式。第四個(gè),復雜問(wèn)題處理,例如多人隱私處理,公眾號打開(kāi)限制,登錄驗證和接口調用處理,綁定公眾號和開(kāi)發(fā)者后端等。這些問(wèn)題依據處理方法不同,會(huì )構成分布式爬蟲(chóng)、網(wǎng)頁(yè)加密、反爬蟲(chóng)等相關(guān)問(wèn)題。第五個(gè),服務(wù)器設計,如何對爬蟲(chóng)程序做一個(gè)很好的保護和監控?這個(gè)和運維部分有很大關(guān)系。這一塊其實(shí)也有很多的問(wèn)題需要思考和處理。 查看全部
抓取網(wǎng)頁(yè)生成電子書(shū)(爬蟲(chóng)基礎:http協(xié)議和http相關(guān)協(xié)議編寫(xiě)python怎么爬)
抓取網(wǎng)頁(yè)生成電子書(shū),批量增刪文件,python實(shí)現網(wǎng)頁(yè)爬蟲(chóng),抓取網(wǎng)頁(yè)上的文章和圖片;網(wǎng)頁(yè)上標注文章作者,評論的網(wǎng)頁(yè)及評論數、積分,統計參加活動(dòng)的人數;生成圖片下載代碼,
爬蟲(chóng)需要那些技術(shù)?爬蟲(chóng)基礎:http協(xié)議和http相關(guān)協(xié)議編寫(xiě)python爬蟲(chóng),爬蟲(chóng)怎么爬,爬什么,為什么要爬,爬取到的內容存在哪里,存儲時(shí)間大概是多久,網(wǎng)頁(yè)列表如何下載btw,網(wǎng)頁(yè)列表下載目前能實(shí)現的有九種下載方式,各有優(yōu)缺點(diǎn),對這方面了解不深,提供參考數據爬取,主要可以包括urllib,urllib2等模塊,也可以使用lxml模塊,也可以使用beautifulsoup模塊,采用正則表達式將數據以url的形式存入數據庫。
數據分析:根據輸入的python文件內容獲取其中的數據,即pandas,matplotlib,seaborn等。數據可視化:給數據結構化,以幫助更好的理解數據的價(jià)值和特征。以上所提到的爬蟲(chóng)主要偏向于前端編程部分,后臺的java,c++,python等如果要深入可以將原始數據獲取和預處理后在寫(xiě)入文件中,或者在本地使用https協(xié)議抓取,像uc直達云平臺,則采用了這個(gè)。
不過(guò)主要有幾點(diǎn)是要注意的,第一個(gè),數據的存儲,很有可能你獲取的數據到不了文件存儲的地方,只能像本地文件存儲一樣文件名都為文件的后綴名。第二個(gè),特征提取,這方面做的好的公司有百度地圖的百度圖片的美圖秀秀的拼圖云等。第三個(gè),爬蟲(chóng)模塊的封裝,當然這里的爬蟲(chóng)模塊主要有一個(gè)對接,爬蟲(chóng)通過(guò)相關(guān)模塊獲取數據,對接數據庫以后。
按照一定規則去實(shí)現網(wǎng)頁(yè)中數據的查詢(xún)、更新,然后進(jìn)行數據分析。當然也可以post等其他形式。第四個(gè),復雜問(wèn)題處理,例如多人隱私處理,公眾號打開(kāi)限制,登錄驗證和接口調用處理,綁定公眾號和開(kāi)發(fā)者后端等。這些問(wèn)題依據處理方法不同,會(huì )構成分布式爬蟲(chóng)、網(wǎng)頁(yè)加密、反爬蟲(chóng)等相關(guān)問(wèn)題。第五個(gè),服務(wù)器設計,如何對爬蟲(chóng)程序做一個(gè)很好的保護和監控?這個(gè)和運維部分有很大關(guān)系。這一塊其實(shí)也有很多的問(wèn)題需要思考和處理。
抓取網(wǎng)頁(yè)生成電子書(shū)(IbookBox網(wǎng)頁(yè)小說(shuō)批量下載閱讀器中輸入任一網(wǎng)頁(yè)地址即可批量抓取和下載)
網(wǎng)站優(yōu)化 ? 優(yōu)采云 發(fā)表了文章 ? 0 個(gè)評論 ? 131 次瀏覽 ? 2021-10-11 05:00
目的是下載一本全分類(lèi)的小說(shuō)網(wǎng)站,并根據分類(lèi)自動(dòng)創(chuàng )建目錄,并按小說(shuō)名稱(chēng)保存為txt文件。一、 搶點(diǎn)子:我的點(diǎn)子是百度的小說(shuō)網(wǎng)站 找小說(shuō)的章節頁(yè),用requests。
在IbookBox網(wǎng)絡(luò )小說(shuō)批量下載閱讀器中輸入任意網(wǎng)址,即可批量抓取下載網(wǎng)絡(luò )上的所有電子書(shū)。1、支持所有小說(shuō)網(wǎng)站。
本劇本僅針對“玄書(shū)網(wǎng)”小說(shuō)網(wǎng)“奇幻奇幻”類(lèi)小說(shuō)進(jìn)行拍攝。供網(wǎng)友參考,可自行修改。文筆粗糙,請勿噴……原文鏈接。
批量下載小說(shuō)爬蟲(chóng)下載v1.0免費版-西溪軟件下載。
IbookBox小說(shuō)批量下載閱讀器,讓讀者遠離垃圾廣告。輸入任意網(wǎng)頁(yè)地址,批量抓取下載網(wǎng)頁(yè)上的所有電子書(shū)。
IbookBox網(wǎng)絡(luò )小說(shuō)批量下載閱讀器是一款可以通過(guò)輸入任意網(wǎng)頁(yè)地址批量抓取下載網(wǎng)絡(luò )上所有電子書(shū)的軟件。支持所有小說(shuō)網(wǎng)站抓取,支持生成抓取的電子書(shū)txt發(fā)送到手機,支持。
軟件介紹 《批量下載小說(shuō)爬蟲(chóng)》是一款非常好用又方便的小說(shuō)批量下載軟件。通過(guò)小說(shuō)爬蟲(chóng),用戶(hù)可以快速下載自己想要的小說(shuō)txt文件放到手機上離線(xiàn)觀(guān)看,軟件爬蟲(chóng)速度。
目的是下載一本全分類(lèi)的小說(shuō)網(wǎng)站,并根據分類(lèi)自動(dòng)創(chuàng )建目錄,并按小說(shuō)名稱(chēng)保存為txt文件。一、 搶點(diǎn)子:我的點(diǎn)子是百度一號。 查看全部
抓取網(wǎng)頁(yè)生成電子書(shū)(IbookBox網(wǎng)頁(yè)小說(shuō)批量下載閱讀器中輸入任一網(wǎng)頁(yè)地址即可批量抓取和下載)
目的是下載一本全分類(lèi)的小說(shuō)網(wǎng)站,并根據分類(lèi)自動(dòng)創(chuàng )建目錄,并按小說(shuō)名稱(chēng)保存為txt文件。一、 搶點(diǎn)子:我的點(diǎn)子是百度的小說(shuō)網(wǎng)站 找小說(shuō)的章節頁(yè),用requests。
在IbookBox網(wǎng)絡(luò )小說(shuō)批量下載閱讀器中輸入任意網(wǎng)址,即可批量抓取下載網(wǎng)絡(luò )上的所有電子書(shū)。1、支持所有小說(shuō)網(wǎng)站。
本劇本僅針對“玄書(shū)網(wǎng)”小說(shuō)網(wǎng)“奇幻奇幻”類(lèi)小說(shuō)進(jìn)行拍攝。供網(wǎng)友參考,可自行修改。文筆粗糙,請勿噴……原文鏈接。
批量下載小說(shuō)爬蟲(chóng)下載v1.0免費版-西溪軟件下載。
IbookBox小說(shuō)批量下載閱讀器,讓讀者遠離垃圾廣告。輸入任意網(wǎng)頁(yè)地址,批量抓取下載網(wǎng)頁(yè)上的所有電子書(shū)。

IbookBox網(wǎng)絡(luò )小說(shuō)批量下載閱讀器是一款可以通過(guò)輸入任意網(wǎng)頁(yè)地址批量抓取下載網(wǎng)絡(luò )上所有電子書(shū)的軟件。支持所有小說(shuō)網(wǎng)站抓取,支持生成抓取的電子書(shū)txt發(fā)送到手機,支持。
軟件介紹 《批量下載小說(shuō)爬蟲(chóng)》是一款非常好用又方便的小說(shuō)批量下載軟件。通過(guò)小說(shuō)爬蟲(chóng),用戶(hù)可以快速下載自己想要的小說(shuō)txt文件放到手機上離線(xiàn)觀(guān)看,軟件爬蟲(chóng)速度。

目的是下載一本全分類(lèi)的小說(shuō)網(wǎng)站,并根據分類(lèi)自動(dòng)創(chuàng )建目錄,并按小說(shuō)名稱(chēng)保存為txt文件。一、 搶點(diǎn)子:我的點(diǎn)子是百度一號。
抓取網(wǎng)頁(yè)生成電子書(shū)(使用Cookie有兩種方式,你知道嗎?(組圖))
網(wǎng)站優(yōu)化 ? 優(yōu)采云 發(fā)表了文章 ? 0 個(gè)評論 ? 174 次瀏覽 ? 2021-10-08 21:27
在實(shí)際情況下,網(wǎng)站的很多內容只有登錄后才能看到,所以我們需要進(jìn)行模擬登錄,利用登錄狀態(tài)進(jìn)行爬取。這里我們需要用到cookies。
現在大多數 網(wǎng)站 使用 cookie 來(lái)跟蹤用戶(hù)的登錄狀態(tài)。一旦網(wǎng)站驗證登錄信息,登錄信息將存儲在瀏覽器的cookie中。網(wǎng)站會(huì )使用這個(gè)cookie作為認證的憑證,在瀏覽網(wǎng)站的頁(yè)面時(shí)返回給服務(wù)器。
由于 cookie 存儲在本地,因此它們可以被篡改和偽造。讓我們來(lái)看看 cookie 是什么樣子的。
打開(kāi)網(wǎng)頁(yè)調試工具,隨意打開(kāi)一個(gè)網(wǎng)頁(yè),在“網(wǎng)絡(luò )”選項卡中,打開(kāi)一個(gè)鏈接,在標題中:
我們把它復制出來(lái)看看:
__guid=137882464.208312339030071800.1455264073383.613;
__huid=10POq43DvPO3U0izV0xej4%2BFDIemVPybee0j1Z1xnJnpQ%3D;
__hsid=825c7462cc8195a5;
somultiswitch=1;
__seedSign=68;
count=1; sessionID=132730903.3074093016427610600.1483758834211.764;
piao34=1;
city_code=101280101;
customEng=1-7
它由鍵值對組成。
接下來(lái)我們以豆豆一書(shū)的詳情頁(yè)為例,講解cookies的使用。
See Do是一個(gè)電子書(shū)下載網(wǎng)站,我的Kindle上的大部分書(shū)都在這里找到。
示例網(wǎng)址為:宇宙是貓的困夢(mèng)-看豆-提供優(yōu)質(zhì)正版電子書(shū)導購服務(wù)
一般情況下,未登錄的用戶(hù)是看不到下載鏈接的,比如:
這本書(shū)的下載鏈接是隱藏的。
頭信息如下:
我們來(lái)看看登錄后的頁(yè)面:
下載鏈接已經(jīng)顯示出來(lái)了,我們來(lái)看一下header信息的Cookie部分
顯然它與之前處于未記錄狀態(tài)的 cookie 不同。
接下來(lái),我們按照上一章抓取騰訊新聞的方法,對示例網(wǎng)址()進(jìn)行HTTP請求:
# coding:utf-8
import requests
from bs4 import BeautifulSoup
url = 'https://kankandou.com/book/vie ... 39%3B
wbdata = requests.get(url).text
soup = BeautifulSoup(wbdata,'lxml')
print(soup)
結果如下:
我們找到了下載鏈接所在的“圖書(shū)購物指南”一欄的HTML代碼:
書(shū)籍導購
去亞馬遜購買(mǎi)《宇宙是貓咪酣睡的夢(mèng)》
就像我們在未登錄狀態(tài)下使用瀏覽器訪(fǎng)問(wèn)本網(wǎng)站時(shí),只顯示亞馬遜的購買(mǎi)鏈接,沒(méi)有電子格式的下載鏈接。
我們嘗試在登錄后使用以下 cookie:
有兩種使用cookies的方法,
1、在header中直接寫(xiě)cookie
完整代碼如下:
# coding:utf-8
import requests
from bs4 import BeautifulSoup
cookie = '''cisession=19dfd70a27ec0eecf1fe3fc2e48b7f91c7c83c60;CNZZDATA1000201968=1815846425-1478580135-https%253A%252F%252Fwww.baidu.com%252F%7C1483922031;Hm_lvt_f805f7762a9a237a0deac37015e9f6d9=1482722012,1483926313;Hm_lpvt_f805f7762a9a237a0deac37015e9f6d9=1483926368'''
header = {
'User-Agent': 'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/53.0.2785.143 Safari/537.36',
'Connection': 'keep-alive',
'accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8',
'Cookie': cookie}
url = 'https://kankandou.com/book/vie ... 39%3B
wbdata = requests.get(url,headers=header).text
soup = BeautifulSoup(wbdata,'lxml')
print(soup)
上面的代碼將響應返回給page(),
我們的搜索響應代碼,
紅色橢圓部分與無(wú)cookie訪(fǎng)問(wèn)時(shí)返回的HTML一致,即亞馬遜的購買(mǎi)鏈接。
紅色矩形是電子書(shū)的下載鏈接,也就是請求中使用的cookie。
與實(shí)際網(wǎng)頁(yè)相比,與網(wǎng)頁(yè)登錄查看的顯示頁(yè)面一致。
功能完成。接下來(lái)看第二種方式
2、使用請求插入cookies
完整代碼如下:
# coding:utf-8
import requests
from bs4 import BeautifulSoup
cookie = {
"cisession":"19dfd70a27ec0eecf1fe3fc2e48b7f91c7c83c60",
"CNZZDATA100020196":"1815846425-1478580135-https%253A%252F%252Fwww.baidu.com%252F%7C1483922031",
"Hm_lvt_f805f7762a9a237a0deac37015e9f6d9":"1482722012,1483926313",
"Hm_lpvt_f805f7762a9a237a0deac37015e9f6d9":"1483926368"
}
url = 'https://kankandou.com/book/vie ... 39%3B
wbdata = requests.get(url,cookies=cookie).text
soup = BeautifulSoup(wbdata,'lxml')
print(soup)
你得到的是登錄后顯示的 HTML:
這樣,我們就可以方便地使用cookies來(lái)獲取需要登錄驗證的網(wǎng)頁(yè)和資源。
這里只是簡(jiǎn)單介紹一下cookies的使用。關(guān)于如何獲取cookie,手動(dòng)復制是一種方式。通過(guò)代碼獲取需要用到Selenium,后面章節會(huì )講解,這里不再展示。
================================================== ====================== 查看全部
抓取網(wǎng)頁(yè)生成電子書(shū)(使用Cookie有兩種方式,你知道嗎?(組圖))
在實(shí)際情況下,網(wǎng)站的很多內容只有登錄后才能看到,所以我們需要進(jìn)行模擬登錄,利用登錄狀態(tài)進(jìn)行爬取。這里我們需要用到cookies。
現在大多數 網(wǎng)站 使用 cookie 來(lái)跟蹤用戶(hù)的登錄狀態(tài)。一旦網(wǎng)站驗證登錄信息,登錄信息將存儲在瀏覽器的cookie中。網(wǎng)站會(huì )使用這個(gè)cookie作為認證的憑證,在瀏覽網(wǎng)站的頁(yè)面時(shí)返回給服務(wù)器。
由于 cookie 存儲在本地,因此它們可以被篡改和偽造。讓我們來(lái)看看 cookie 是什么樣子的。
打開(kāi)網(wǎng)頁(yè)調試工具,隨意打開(kāi)一個(gè)網(wǎng)頁(yè),在“網(wǎng)絡(luò )”選項卡中,打開(kāi)一個(gè)鏈接,在標題中:

我們把它復制出來(lái)看看:
__guid=137882464.208312339030071800.1455264073383.613;
__huid=10POq43DvPO3U0izV0xej4%2BFDIemVPybee0j1Z1xnJnpQ%3D;
__hsid=825c7462cc8195a5;
somultiswitch=1;
__seedSign=68;
count=1; sessionID=132730903.3074093016427610600.1483758834211.764;
piao34=1;
city_code=101280101;
customEng=1-7
它由鍵值對組成。
接下來(lái)我們以豆豆一書(shū)的詳情頁(yè)為例,講解cookies的使用。
See Do是一個(gè)電子書(shū)下載網(wǎng)站,我的Kindle上的大部分書(shū)都在這里找到。
示例網(wǎng)址為:宇宙是貓的困夢(mèng)-看豆-提供優(yōu)質(zhì)正版電子書(shū)導購服務(wù)
一般情況下,未登錄的用戶(hù)是看不到下載鏈接的,比如:

這本書(shū)的下載鏈接是隱藏的。
頭信息如下:

我們來(lái)看看登錄后的頁(yè)面:

下載鏈接已經(jīng)顯示出來(lái)了,我們來(lái)看一下header信息的Cookie部分

顯然它與之前處于未記錄狀態(tài)的 cookie 不同。
接下來(lái),我們按照上一章抓取騰訊新聞的方法,對示例網(wǎng)址()進(jìn)行HTTP請求:
# coding:utf-8
import requests
from bs4 import BeautifulSoup
url = 'https://kankandou.com/book/vie ... 39%3B
wbdata = requests.get(url).text
soup = BeautifulSoup(wbdata,'lxml')
print(soup)
結果如下:

我們找到了下載鏈接所在的“圖書(shū)購物指南”一欄的HTML代碼:
書(shū)籍導購
去亞馬遜購買(mǎi)《宇宙是貓咪酣睡的夢(mèng)》
就像我們在未登錄狀態(tài)下使用瀏覽器訪(fǎng)問(wèn)本網(wǎng)站時(shí),只顯示亞馬遜的購買(mǎi)鏈接,沒(méi)有電子格式的下載鏈接。
我們嘗試在登錄后使用以下 cookie:
有兩種使用cookies的方法,
1、在header中直接寫(xiě)cookie
完整代碼如下:
# coding:utf-8
import requests
from bs4 import BeautifulSoup
cookie = '''cisession=19dfd70a27ec0eecf1fe3fc2e48b7f91c7c83c60;CNZZDATA1000201968=1815846425-1478580135-https%253A%252F%252Fwww.baidu.com%252F%7C1483922031;Hm_lvt_f805f7762a9a237a0deac37015e9f6d9=1482722012,1483926313;Hm_lpvt_f805f7762a9a237a0deac37015e9f6d9=1483926368'''
header = {
'User-Agent': 'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/53.0.2785.143 Safari/537.36',
'Connection': 'keep-alive',
'accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8',
'Cookie': cookie}
url = 'https://kankandou.com/book/vie ... 39%3B
wbdata = requests.get(url,headers=header).text
soup = BeautifulSoup(wbdata,'lxml')
print(soup)
上面的代碼將響應返回給page(),
我們的搜索響應代碼,

紅色橢圓部分與無(wú)cookie訪(fǎng)問(wèn)時(shí)返回的HTML一致,即亞馬遜的購買(mǎi)鏈接。
紅色矩形是電子書(shū)的下載鏈接,也就是請求中使用的cookie。
與實(shí)際網(wǎng)頁(yè)相比,與網(wǎng)頁(yè)登錄查看的顯示頁(yè)面一致。
功能完成。接下來(lái)看第二種方式
2、使用請求插入cookies
完整代碼如下:
# coding:utf-8
import requests
from bs4 import BeautifulSoup
cookie = {
"cisession":"19dfd70a27ec0eecf1fe3fc2e48b7f91c7c83c60",
"CNZZDATA100020196":"1815846425-1478580135-https%253A%252F%252Fwww.baidu.com%252F%7C1483922031",
"Hm_lvt_f805f7762a9a237a0deac37015e9f6d9":"1482722012,1483926313",
"Hm_lpvt_f805f7762a9a237a0deac37015e9f6d9":"1483926368"
}
url = 'https://kankandou.com/book/vie ... 39%3B
wbdata = requests.get(url,cookies=cookie).text
soup = BeautifulSoup(wbdata,'lxml')
print(soup)

你得到的是登錄后顯示的 HTML:
這樣,我們就可以方便地使用cookies來(lái)獲取需要登錄驗證的網(wǎng)頁(yè)和資源。
這里只是簡(jiǎn)單介紹一下cookies的使用。關(guān)于如何獲取cookie,手動(dòng)復制是一種方式。通過(guò)代碼獲取需要用到Selenium,后面章節會(huì )講解,這里不再展示。
================================================== ======================
抓取網(wǎng)頁(yè)生成電子書(shū)(如何將網(wǎng)頁(yè)文章批量抓取、生成電子書(shū)、直接推送到Kindle)
網(wǎng)站優(yōu)化 ? 優(yōu)采云 發(fā)表了文章 ? 0 個(gè)評論 ? 300 次瀏覽 ? 2021-10-08 21:09
很長(cháng)一段時(shí)間,我一直在研究如何將我關(guān)注的網(wǎng)頁(yè)或文章安裝到Kindle中進(jìn)行認真閱讀,但很長(cháng)一段時(shí)間都沒(méi)有真正的進(jìn)展。手動(dòng)格式化書(shū)籍制作電子書(shū)的方法雖然簡(jiǎn)單易行,但對于短小且更新頻繁的網(wǎng)頁(yè)文章來(lái)說(shuō)效率低下。如果有工具可以批量抓取網(wǎng)頁(yè)文章,生成電子書(shū),直接推送到Kindle上就好了。Doocer 是一個(gè)非常有用的工具。
Doocer 是由@lepture 開(kāi)發(fā)的在線(xiàn)服務(wù)。它允許用戶(hù)在 Pocket 帳戶(hù)中提交 URL、RSS 提要地址和 文章 供以后閱讀,然后將它們一一或批量制作成 ePub、MOBI 電子書(shū)。您可以直接在 Doocer 中閱讀所有 文章,或者將它們推送到 Kindle 和 Apple Books 閱讀。
閱讀體驗真的很好
Doocer 生成的電子書(shū)格式良好且引人注目。應該收錄的內容很多,不應該收錄的內容并不多。本書(shū)不僅封面有圖文,還收錄文章目錄、網(wǎng)站出處、文章原作者等信息。Doocer生成的MOBI電子書(shū)支持KF8標準,因此支持Kindle原生替換自定義字體。
由于網(wǎng)站文章通常都有標準和通用的排版規范,所以Doocer生成的電子書(shū)文章中的大小、標題和列表圖例與原創(chuàng )網(wǎng)頁(yè)高度一致文章。原文章中的超鏈接也全部保留,評論信息、廣告等內容全部丟棄。全書(shū)的閱讀體驗非常友好。(當然,如果原網(wǎng)頁(yè)文章的布局亂了,得到的電子書(shū)也可能完全不一樣。)
將網(wǎng)頁(yè)文章制作成電子書(shū)
Doocer完成注冊和登錄后,我們就可以開(kāi)始將文章網(wǎng)頁(yè)制作成電子書(shū)了。首先,我們點(diǎn)擊“NEW BOOK”按鈕新建電子書(shū),輸入電子書(shū)書(shū)名。然后在右上角選擇“添加”,添加文章 URL或RSS提要地址。
以小眾網(wǎng)頁(yè)的文章為例,我們選擇“FEED”,在輸入框中粘貼RSS地址,然后點(diǎn)擊“PARSE”,就會(huì )出現小眾文章的近期列表顯示給我們添加到。我們可以根據需要選擇,也可以點(diǎn)擊“全選”來(lái)全選文章。最后,下拉到頁(yè)面底部,選擇“SAVE”,這些文章就會(huì )被添加到書(shū)中。
實(shí)際上,Doocer 網(wǎng)頁(yè)與 RSS 工具非常相似。實(shí)現了從網(wǎng)站批量抓取文章并集中展示的功能。
要將這些文章轉換成電子書(shū)并推送到Kindle,我們需要進(jìn)行一些簡(jiǎn)單的操作。
首先,根據Doocer個(gè)人設置頁(yè)面的提示,我們打開(kāi)Amazon Kindle的個(gè)人文檔設置,在個(gè)人文檔接收地址中添加Doocer電子書(shū)的發(fā)送地址。完成后,我們再在輸入框中填寫(xiě)Kindle的個(gè)人文檔接收地址,點(diǎn)擊保存。
最后,我們在Doocer中打開(kāi)《少數派》這本書(shū),在頁(yè)面上找到“發(fā)布”,選擇發(fā)送到Kindle。大約 10-30 分鐘,Doocer 將完成圖書(shū)制作并將圖書(shū)推送到 Kindle。
還有一些問(wèn)題需要注意
Doocer目前處于Beta測試階段,還存在一些bug,尤其是中文網(wǎng)站經(jīng)常出現問(wèn)題。好在Doocer官網(wǎng)有開(kāi)發(fā)者對話(huà)頻道,你可以直接聯(lián)系他幫忙解決。
實(shí)現所有操作的自動(dòng)化流程是我認為Doocer最需要努力的方向。Doocer可以像RSS工具一樣抓取網(wǎng)頁(yè)中更新后的文章,但是文章的新抓取以及生成電子書(shū)和推送仍然需要手動(dòng)完成。如果整個(gè)過(guò)程都可以自動(dòng)化,RSS-MOBI-Kindle就可以一口氣搞定,相信實(shí)用性會(huì )更高。 查看全部
抓取網(wǎng)頁(yè)生成電子書(shū)(如何將網(wǎng)頁(yè)文章批量抓取、生成電子書(shū)、直接推送到Kindle)
很長(cháng)一段時(shí)間,我一直在研究如何將我關(guān)注的網(wǎng)頁(yè)或文章安裝到Kindle中進(jìn)行認真閱讀,但很長(cháng)一段時(shí)間都沒(méi)有真正的進(jìn)展。手動(dòng)格式化書(shū)籍制作電子書(shū)的方法雖然簡(jiǎn)單易行,但對于短小且更新頻繁的網(wǎng)頁(yè)文章來(lái)說(shuō)效率低下。如果有工具可以批量抓取網(wǎng)頁(yè)文章,生成電子書(shū),直接推送到Kindle上就好了。Doocer 是一個(gè)非常有用的工具。
Doocer 是由@lepture 開(kāi)發(fā)的在線(xiàn)服務(wù)。它允許用戶(hù)在 Pocket 帳戶(hù)中提交 URL、RSS 提要地址和 文章 供以后閱讀,然后將它們一一或批量制作成 ePub、MOBI 電子書(shū)。您可以直接在 Doocer 中閱讀所有 文章,或者將它們推送到 Kindle 和 Apple Books 閱讀。

閱讀體驗真的很好
Doocer 生成的電子書(shū)格式良好且引人注目。應該收錄的內容很多,不應該收錄的內容并不多。本書(shū)不僅封面有圖文,還收錄文章目錄、網(wǎng)站出處、文章原作者等信息。Doocer生成的MOBI電子書(shū)支持KF8標準,因此支持Kindle原生替換自定義字體。
由于網(wǎng)站文章通常都有標準和通用的排版規范,所以Doocer生成的電子書(shū)文章中的大小、標題和列表圖例與原創(chuàng )網(wǎng)頁(yè)高度一致文章。原文章中的超鏈接也全部保留,評論信息、廣告等內容全部丟棄。全書(shū)的閱讀體驗非常友好。(當然,如果原網(wǎng)頁(yè)文章的布局亂了,得到的電子書(shū)也可能完全不一樣。)

將網(wǎng)頁(yè)文章制作成電子書(shū)
Doocer完成注冊和登錄后,我們就可以開(kāi)始將文章網(wǎng)頁(yè)制作成電子書(shū)了。首先,我們點(diǎn)擊“NEW BOOK”按鈕新建電子書(shū),輸入電子書(shū)書(shū)名。然后在右上角選擇“添加”,添加文章 URL或RSS提要地址。

以小眾網(wǎng)頁(yè)的文章為例,我們選擇“FEED”,在輸入框中粘貼RSS地址,然后點(diǎn)擊“PARSE”,就會(huì )出現小眾文章的近期列表顯示給我們添加到。我們可以根據需要選擇,也可以點(diǎn)擊“全選”來(lái)全選文章。最后,下拉到頁(yè)面底部,選擇“SAVE”,這些文章就會(huì )被添加到書(shū)中。

實(shí)際上,Doocer 網(wǎng)頁(yè)與 RSS 工具非常相似。實(shí)現了從網(wǎng)站批量抓取文章并集中展示的功能。

要將這些文章轉換成電子書(shū)并推送到Kindle,我們需要進(jìn)行一些簡(jiǎn)單的操作。
首先,根據Doocer個(gè)人設置頁(yè)面的提示,我們打開(kāi)Amazon Kindle的個(gè)人文檔設置,在個(gè)人文檔接收地址中添加Doocer電子書(shū)的發(fā)送地址。完成后,我們再在輸入框中填寫(xiě)Kindle的個(gè)人文檔接收地址,點(diǎn)擊保存。

最后,我們在Doocer中打開(kāi)《少數派》這本書(shū),在頁(yè)面上找到“發(fā)布”,選擇發(fā)送到Kindle。大約 10-30 分鐘,Doocer 將完成圖書(shū)制作并將圖書(shū)推送到 Kindle。

還有一些問(wèn)題需要注意
Doocer目前處于Beta測試階段,還存在一些bug,尤其是中文網(wǎng)站經(jīng)常出現問(wèn)題。好在Doocer官網(wǎng)有開(kāi)發(fā)者對話(huà)頻道,你可以直接聯(lián)系他幫忙解決。
實(shí)現所有操作的自動(dòng)化流程是我認為Doocer最需要努力的方向。Doocer可以像RSS工具一樣抓取網(wǎng)頁(yè)中更新后的文章,但是文章的新抓取以及生成電子書(shū)和推送仍然需要手動(dòng)完成。如果整個(gè)過(guò)程都可以自動(dòng)化,RSS-MOBI-Kindle就可以一口氣搞定,相信實(shí)用性會(huì )更高。
抓取網(wǎng)頁(yè)生成電子書(shū)(小說(shuō)爬蟲(chóng)下載器(小說(shuō)批量下載神器)能去為你帶來(lái))
網(wǎng)站優(yōu)化 ? 優(yōu)采云 發(fā)表了文章 ? 0 個(gè)評論 ? 1787 次瀏覽 ? 2021-10-08 21:04
小說(shuō)爬蟲(chóng)下載器(小說(shuō)批量下載神器)可以給你帶來(lái)更好的專(zhuān)業(yè)智能小說(shuō)采集工具,各種不同的小說(shuō)內容都可以很方便的找到。
批量下載小說(shuō)爬蟲(chóng)是一款免費的小說(shuō)下載閱讀器,可以幫助用戶(hù)將自己喜歡的小說(shuō)批量下載到本地,支持自己選擇下載源。有需要的用戶(hù)不要錯過(guò)。歡迎下載使用!
IbookBox小說(shuō)批量下載閱讀器是一款功能強大的小說(shuō)批量下載器。本軟件可以抓取任何小說(shuō)網(wǎng)站書(shū)籍到本地,并能自動(dòng)合并成txt電子書(shū)手機閱讀,無(wú)廣告無(wú)插件,進(jìn)任何網(wǎng)。
在IbookBox網(wǎng)絡(luò )小說(shuō)批量下載閱讀器中輸入任意網(wǎng)頁(yè)地址,即可批量抓取下載網(wǎng)絡(luò )上的所有電子書(shū)。1、支持所有小說(shuō)網(wǎng)站抓取。2、支持將抓取的電子書(shū)生成txt發(fā)送到手機。3、 支持。
如果您在使用《IbookBox網(wǎng)站小說(shuō)批量抓取下載專(zhuān)家》過(guò)程中遇到問(wèn)題,請聯(lián)系軟件開(kāi)發(fā)商武漢伊文科技有限公司,軟銀世界只負責支付注冊費和注冊。正在發(fā)送信息。
本劇本僅針對“玄書(shū)網(wǎng)”小說(shuō)網(wǎng)“奇幻奇幻”類(lèi)小說(shuō)進(jìn)行拍攝。供網(wǎng)友參考,可自行修改。文筆粗糙,請勿噴……原文鏈接。
小說(shuō)批量下載器聚合閱讀合集,主要提供小說(shuō)批量下載器相關(guān)的最新資源下載。訂閱小說(shuō)批量下載器標簽主題,您可以第一時(shí)間了解小說(shuō)批量下載器的最新下載資源和主題和包。
輸入任意網(wǎng)頁(yè)地址,批量抓取下載網(wǎng)絡(luò )上的所有電子書(shū)。1、支持所有小說(shuō)網(wǎng)站抓取2、支持抓取的電子書(shū)生成txt發(fā)送到手機。3、 支持將電子書(shū)自動(dòng)存放在您自己的郵箱中。 查看全部
抓取網(wǎng)頁(yè)生成電子書(shū)(小說(shuō)爬蟲(chóng)下載器(小說(shuō)批量下載神器)能去為你帶來(lái))
小說(shuō)爬蟲(chóng)下載器(小說(shuō)批量下載神器)可以給你帶來(lái)更好的專(zhuān)業(yè)智能小說(shuō)采集工具,各種不同的小說(shuō)內容都可以很方便的找到。
批量下載小說(shuō)爬蟲(chóng)是一款免費的小說(shuō)下載閱讀器,可以幫助用戶(hù)將自己喜歡的小說(shuō)批量下載到本地,支持自己選擇下載源。有需要的用戶(hù)不要錯過(guò)。歡迎下載使用!
IbookBox小說(shuō)批量下載閱讀器是一款功能強大的小說(shuō)批量下載器。本軟件可以抓取任何小說(shuō)網(wǎng)站書(shū)籍到本地,并能自動(dòng)合并成txt電子書(shū)手機閱讀,無(wú)廣告無(wú)插件,進(jìn)任何網(wǎng)。
在IbookBox網(wǎng)絡(luò )小說(shuō)批量下載閱讀器中輸入任意網(wǎng)頁(yè)地址,即可批量抓取下載網(wǎng)絡(luò )上的所有電子書(shū)。1、支持所有小說(shuō)網(wǎng)站抓取。2、支持將抓取的電子書(shū)生成txt發(fā)送到手機。3、 支持。
如果您在使用《IbookBox網(wǎng)站小說(shuō)批量抓取下載專(zhuān)家》過(guò)程中遇到問(wèn)題,請聯(lián)系軟件開(kāi)發(fā)商武漢伊文科技有限公司,軟銀世界只負責支付注冊費和注冊。正在發(fā)送信息。

本劇本僅針對“玄書(shū)網(wǎng)”小說(shuō)網(wǎng)“奇幻奇幻”類(lèi)小說(shuō)進(jìn)行拍攝。供網(wǎng)友參考,可自行修改。文筆粗糙,請勿噴……原文鏈接。
小說(shuō)批量下載器聚合閱讀合集,主要提供小說(shuō)批量下載器相關(guān)的最新資源下載。訂閱小說(shuō)批量下載器標簽主題,您可以第一時(shí)間了解小說(shuō)批量下載器的最新下載資源和主題和包。

輸入任意網(wǎng)頁(yè)地址,批量抓取下載網(wǎng)絡(luò )上的所有電子書(shū)。1、支持所有小說(shuō)網(wǎng)站抓取2、支持抓取的電子書(shū)生成txt發(fā)送到手機。3、 支持將電子書(shū)自動(dòng)存放在您自己的郵箱中。
抓取網(wǎng)頁(yè)生成電子書(shū)(用urllib2的Request類(lèi)構建一個(gè)request接下來(lái)獲取響應頁(yè)面內容)
網(wǎng)站優(yōu)化 ? 優(yōu)采云 發(fā)表了文章 ? 0 個(gè)評論 ? 107 次瀏覽 ? 2021-10-08 19:31
使用 urllib2 的 Request 類(lèi)構造請求
url = "https://www.qiushibaike.com/"
request = urllib2.Request(url)
接下來(lái)使用urllib2的urlopen方法請求頁(yè)面并獲取響應(即頁(yè)面內容)
response = urllib2.urlopen(request)
打印得到的內容
print response.read()
運行我們的腳本,結果是一個(gè)錯誤:
Traceback (most recent call last):
File "00_get_a_page.py", line 19, in
response = urllib2.urlopen(request)
File "D:\Python27\lib\urllib2.py", line 154, in urlopen
return opener.open(url, data, timeout)
File "D:\Python27\lib\urllib2.py", line 429, in open
response = self._open(req, data)
File "D:\Python27\lib\urllib2.py", line 447, in _open
'_open', req)
File "D:\Python27\lib\urllib2.py", line 407, in _call_chain
result = func(*args)
File "D:\Python27\lib\urllib2.py", line 1241, in https_open
context=self._context)
File "D:\Python27\lib\urllib2.py", line 1201, in do_open
r = h.getresponse(buffering=True)
File "D:\Python27\lib\httplib.py", line 1121, in getresponse
response.begin()
File "D:\Python27\lib\httplib.py", line 438, in begin
version, status, reason = self._read_status()
File "D:\Python27\lib\httplib.py", line 402, in _read_status
raise BadStatusLine(line)
httplib.BadStatusLine: ''
這是因為尷尬百科對爬蟲(chóng)做了一些反爬蟲(chóng)優(yōu)化,你必須是瀏覽器才能訪(fǎng)問(wèn)頁(yè)面。
不過(guò)沒(méi)關(guān)系,瀏覽器的信息是通過(guò)headers實(shí)現的。我們可以使用 urllib2 設置瀏覽器信息頭,將我們的程序偽裝成瀏覽器。
設置頭驗證信息
user_agent = "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/49.0.2623.75 Safari/537.36 LBBROWSER"
headers = {"User-Agent":user_agent}
可以看到我們設置了 User-Agent 字段,并將其封裝為字典 headers,后面會(huì )用到。
user_agent 的內容為 Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/49.0.2623.75 Safari/537.36 LBBROWSER,這是我用的獵豹瀏覽器的頭信息,可以通過(guò)F12開(kāi)發(fā)者工具查看。
重構請求并打印得到的響應頁(yè)面的內容
request = urllib2.Request(url,headers=headers)
可以發(fā)現,在構造請求的時(shí)候,除了url參數,我們還把封裝好的帶有瀏覽器信息的headers傳遞給了urllib2.Request的headers參數。
[!] headers=headers 必須指定,否則headers會(huì )默認傳給urllib2.Request的第二個(gè)參數,但是第二個(gè)參數不是headers,如下:
>>> help("urllib2.Request")
Help on class Request in urllib2:
urllib2.Request = class Request
| Methods defined here:
| __getattr__(self, attr)
| __init__(self, url, data=None, headers={}, origin_req_host=None, unverifiable=False)
用同樣的方式重新請求頁(yè)面,得到響應并打印出來(lái)
成功獲得!但是我們的漢字沒(méi)有出現。
這是因為我們獲取的response.read()的編碼方式是UTF-8字節流數據,而我們python2.7默認的編解碼方式是ASCII,導致出現亂碼。
我們打印的時(shí)候,指定解碼方式為UTF-8,試試看。
print response.read().decode('utf-8')
成功!
至此我們已經(jīng)獲得了整個(gè)頁(yè)面的完整信息。 查看全部
抓取網(wǎng)頁(yè)生成電子書(shū)(用urllib2的Request類(lèi)構建一個(gè)request接下來(lái)獲取響應頁(yè)面內容)
使用 urllib2 的 Request 類(lèi)構造請求
url = "https://www.qiushibaike.com/"
request = urllib2.Request(url)
接下來(lái)使用urllib2的urlopen方法請求頁(yè)面并獲取響應(即頁(yè)面內容)
response = urllib2.urlopen(request)
打印得到的內容
print response.read()
運行我們的腳本,結果是一個(gè)錯誤:
Traceback (most recent call last):
File "00_get_a_page.py", line 19, in
response = urllib2.urlopen(request)
File "D:\Python27\lib\urllib2.py", line 154, in urlopen
return opener.open(url, data, timeout)
File "D:\Python27\lib\urllib2.py", line 429, in open
response = self._open(req, data)
File "D:\Python27\lib\urllib2.py", line 447, in _open
'_open', req)
File "D:\Python27\lib\urllib2.py", line 407, in _call_chain
result = func(*args)
File "D:\Python27\lib\urllib2.py", line 1241, in https_open
context=self._context)
File "D:\Python27\lib\urllib2.py", line 1201, in do_open
r = h.getresponse(buffering=True)
File "D:\Python27\lib\httplib.py", line 1121, in getresponse
response.begin()
File "D:\Python27\lib\httplib.py", line 438, in begin
version, status, reason = self._read_status()
File "D:\Python27\lib\httplib.py", line 402, in _read_status
raise BadStatusLine(line)
httplib.BadStatusLine: ''
這是因為尷尬百科對爬蟲(chóng)做了一些反爬蟲(chóng)優(yōu)化,你必須是瀏覽器才能訪(fǎng)問(wèn)頁(yè)面。
不過(guò)沒(méi)關(guān)系,瀏覽器的信息是通過(guò)headers實(shí)現的。我們可以使用 urllib2 設置瀏覽器信息頭,將我們的程序偽裝成瀏覽器。
設置頭驗證信息
user_agent = "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/49.0.2623.75 Safari/537.36 LBBROWSER"
headers = {"User-Agent":user_agent}
可以看到我們設置了 User-Agent 字段,并將其封裝為字典 headers,后面會(huì )用到。
user_agent 的內容為 Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/49.0.2623.75 Safari/537.36 LBBROWSER,這是我用的獵豹瀏覽器的頭信息,可以通過(guò)F12開(kāi)發(fā)者工具查看。
重構請求并打印得到的響應頁(yè)面的內容
request = urllib2.Request(url,headers=headers)
可以發(fā)現,在構造請求的時(shí)候,除了url參數,我們還把封裝好的帶有瀏覽器信息的headers傳遞給了urllib2.Request的headers參數。
[!] headers=headers 必須指定,否則headers會(huì )默認傳給urllib2.Request的第二個(gè)參數,但是第二個(gè)參數不是headers,如下:
>>> help("urllib2.Request")
Help on class Request in urllib2:
urllib2.Request = class Request
| Methods defined here:
| __getattr__(self, attr)
| __init__(self, url, data=None, headers={}, origin_req_host=None, unverifiable=False)
用同樣的方式重新請求頁(yè)面,得到響應并打印出來(lái)
成功獲得!但是我們的漢字沒(méi)有出現。
這是因為我們獲取的response.read()的編碼方式是UTF-8字節流數據,而我們python2.7默認的編解碼方式是ASCII,導致出現亂碼。
我們打印的時(shí)候,指定解碼方式為UTF-8,試試看。
print response.read().decode('utf-8')
成功!
至此我們已經(jīng)獲得了整個(gè)頁(yè)面的完整信息。
抓取網(wǎng)頁(yè)生成電子書(shū)(廖雪峰:Python教程爬下來(lái)做成PDF電子書(shū)方便離線(xiàn)閱讀)
網(wǎng)站優(yōu)化 ? 優(yōu)采云 發(fā)表了文章 ? 0 個(gè)評論 ? 113 次瀏覽 ? 2021-10-08 19:27
免責聲明:本文僅供學(xué)習參考,不得用于其他用途。爬取過(guò)程中注意控制請求速度,以免給服務(wù)器造成太大壓力
寫(xiě)爬蟲(chóng)好像不比用Python好。Python社區提供的爬蟲(chóng)工具之多,看得你眼花繚亂。你可以用各種可以直接使用的庫在幾分鐘內編寫(xiě)一個(gè)爬蟲(chóng)。今天,我將嘗試寫(xiě)一個(gè)爬蟲(chóng)。廖雪峰老師的Python教程爬下來(lái)制作了PDF電子書(shū)供離線(xiàn)閱讀。
在開(kāi)始寫(xiě)爬蟲(chóng)之前,我們先來(lái)分析一下網(wǎng)站的頁(yè)面結構。頁(yè)面左側為教程目錄大綱。每個(gè)URL對應右邊文章的一篇文章,右上角是文章的標題,中間是文章的正文部分。正文內容是我們關(guān)注的重點(diǎn)。我們要抓取的數據是所有網(wǎng)頁(yè)的正文部分。下面是用戶(hù)的評論區。評論區對我們沒(méi)有用。,所以可以忽略。
工具準備
搞清楚網(wǎng)站的基本結構后,就可以開(kāi)始準備爬蟲(chóng)依賴(lài)的工具包了。requests和beautifulsoup是爬蟲(chóng)的兩大神器,reuqests用于網(wǎng)絡(luò )請求,beautifulsoup用于操作html數據。有了這兩個(gè)班車(chē),我們就可以順利工作了。我們不需要像scrapy這樣的爬蟲(chóng)框架。小程序有點(diǎn)像大錘。另外,既然是把html文件轉換成pdf,就得有相應的庫支持。wkhtmltopdf 是一個(gè)非常好的工具。它可用于從 html 到 pdf 的多平臺轉換。pdfkit 是 wkhtmltopdf 的 Python 包。先安裝以下依賴(lài)包,然后安裝wkhtmltopdf
pip install requests
pip install beautifulsoup4
pip install pdfkit
安裝 wkhtmltopdf
Windows平臺下,直接從wkhtmltopdf官網(wǎng)下載穩定版進(jìn)行安裝。安裝完成后,將程序的執行路徑添加到系統環(huán)境$PATH變量中,否則pdfkit將找不到wkhtmltopdf并出現“No wkhtmltopdf executable found”的錯誤提示。Ubuntu 和 CentOS 可以直接從命令行安裝
$ sudo apt-get install wkhtmltopdf # ubuntu
$ sudo yum intsall wkhtmltopdf # centos
爬蟲(chóng)實(shí)現
一切準備就緒后,就可以開(kāi)始編寫(xiě)代碼了,但是在編寫(xiě)代碼之前,應該先整理一下思路。該程序的目的是將所有URL對應的html body部分保存在本地,然后使用pdfkit將這些文件轉換為pdf文件。讓我們拆分任務(wù)。首先將某個(gè)URL對應的html body保存到本地,然后找到所有的URL進(jìn)行同樣的操作。
使用Chrome瀏覽器找到頁(yè)面body部分的標簽,按F12找到body對應的div標簽:
,div是網(wǎng)頁(yè)的body內容。使用requests在本地加載整個(gè)頁(yè)面后,可以使用beautifulsoup操作HTML的dom元素來(lái)提取body內容。
具體實(shí)現代碼如下: 使用soup.find_all函數查找body標簽,然后將body部分的內容保存到a.html文件中。
def parse_url_to_html(url):
response = requests.get(url)
soup = BeautifulSoup(response.content, "html.parser")
body = soup.find_all(class_="x-wiki-content")[0]
html = str(body)
with open("a.html", 'wb') as f:
f.write(html)
第二步是解析出頁(yè)面左側的所有URL。同樣的方法,找到左邊的菜單標簽
社會(huì )的
鏈接
? foofish 2016 查看全部
抓取網(wǎng)頁(yè)生成電子書(shū)(廖雪峰:Python教程爬下來(lái)做成PDF電子書(shū)方便離線(xiàn)閱讀)
免責聲明:本文僅供學(xué)習參考,不得用于其他用途。爬取過(guò)程中注意控制請求速度,以免給服務(wù)器造成太大壓力
寫(xiě)爬蟲(chóng)好像不比用Python好。Python社區提供的爬蟲(chóng)工具之多,看得你眼花繚亂。你可以用各種可以直接使用的庫在幾分鐘內編寫(xiě)一個(gè)爬蟲(chóng)。今天,我將嘗試寫(xiě)一個(gè)爬蟲(chóng)。廖雪峰老師的Python教程爬下來(lái)制作了PDF電子書(shū)供離線(xiàn)閱讀。
在開(kāi)始寫(xiě)爬蟲(chóng)之前,我們先來(lái)分析一下網(wǎng)站的頁(yè)面結構。頁(yè)面左側為教程目錄大綱。每個(gè)URL對應右邊文章的一篇文章,右上角是文章的標題,中間是文章的正文部分。正文內容是我們關(guān)注的重點(diǎn)。我們要抓取的數據是所有網(wǎng)頁(yè)的正文部分。下面是用戶(hù)的評論區。評論區對我們沒(méi)有用。,所以可以忽略。

工具準備
搞清楚網(wǎng)站的基本結構后,就可以開(kāi)始準備爬蟲(chóng)依賴(lài)的工具包了。requests和beautifulsoup是爬蟲(chóng)的兩大神器,reuqests用于網(wǎng)絡(luò )請求,beautifulsoup用于操作html數據。有了這兩個(gè)班車(chē),我們就可以順利工作了。我們不需要像scrapy這樣的爬蟲(chóng)框架。小程序有點(diǎn)像大錘。另外,既然是把html文件轉換成pdf,就得有相應的庫支持。wkhtmltopdf 是一個(gè)非常好的工具。它可用于從 html 到 pdf 的多平臺轉換。pdfkit 是 wkhtmltopdf 的 Python 包。先安裝以下依賴(lài)包,然后安裝wkhtmltopdf
pip install requests
pip install beautifulsoup4
pip install pdfkit
安裝 wkhtmltopdf
Windows平臺下,直接從wkhtmltopdf官網(wǎng)下載穩定版進(jìn)行安裝。安裝完成后,將程序的執行路徑添加到系統環(huán)境$PATH變量中,否則pdfkit將找不到wkhtmltopdf并出現“No wkhtmltopdf executable found”的錯誤提示。Ubuntu 和 CentOS 可以直接從命令行安裝
$ sudo apt-get install wkhtmltopdf # ubuntu
$ sudo yum intsall wkhtmltopdf # centos
爬蟲(chóng)實(shí)現
一切準備就緒后,就可以開(kāi)始編寫(xiě)代碼了,但是在編寫(xiě)代碼之前,應該先整理一下思路。該程序的目的是將所有URL對應的html body部分保存在本地,然后使用pdfkit將這些文件轉換為pdf文件。讓我們拆分任務(wù)。首先將某個(gè)URL對應的html body保存到本地,然后找到所有的URL進(jìn)行同樣的操作。
使用Chrome瀏覽器找到頁(yè)面body部分的標簽,按F12找到body對應的div標簽:
,div是網(wǎng)頁(yè)的body內容。使用requests在本地加載整個(gè)頁(yè)面后,可以使用beautifulsoup操作HTML的dom元素來(lái)提取body內容。

具體實(shí)現代碼如下: 使用soup.find_all函數查找body標簽,然后將body部分的內容保存到a.html文件中。
def parse_url_to_html(url):
response = requests.get(url)
soup = BeautifulSoup(response.content, "html.parser")
body = soup.find_all(class_="x-wiki-content")[0]
html = str(body)
with open("a.html", 'wb') as f:
f.write(html)
第二步是解析出頁(yè)面左側的所有URL。同樣的方法,找到左邊的菜單標簽
社會(huì )的
鏈接
? foofish 2016
抓取網(wǎng)頁(yè)生成電子書(shū)(如何快速上手,做出自己的網(wǎng)頁(yè)不是技術(shù)要點(diǎn)?)
網(wǎng)站優(yōu)化 ? 優(yōu)采云 發(fā)表了文章 ? 0 個(gè)評論 ? 246 次瀏覽 ? 2021-10-08 12:18
上一篇簡(jiǎn)單展示了我們將網(wǎng)頁(yè)轉成PDF的結果,特別適用于序列化的網(wǎng)頁(yè)文章,組織成一本書(shū)。
本文也為大家簡(jiǎn)單講解了技術(shù)要點(diǎn),讓大家快速上手,制作屬于自己的電子書(shū)。
技術(shù)要點(diǎn)
一、 抓取網(wǎng)頁(yè)并保存到本地
因為大部分網(wǎng)頁(yè)都收錄圖片,所以很多網(wǎng)頁(yè)都不是普通的靜態(tài)網(wǎng)頁(yè)。相應的內容是在瀏覽器加載過(guò)程中隨著(zhù)瀏覽器滾動(dòng)條的滾動(dòng)而加載的。
所以如果你只想簡(jiǎn)單地發(fā)送一個(gè) URL 并返回一個(gè) PDF 文件,它通常會(huì )失敗。
使用代碼控制瀏覽器,模擬瀏覽器的瀏覽操作。這是一個(gè)工具:selenium,我相信通常關(guān)注網(wǎng)絡(luò )抓取的人對它很熟悉。
作者嘗試搜索selenium+C#感興趣的詞,沒(méi)想到selenium竟然是一個(gè)支持多語(yǔ)言的工具。百度自查的具體介紹,以下是百度百科介紹的簡(jiǎn)單截取。
Selenium [1] 是一種用于 Web 應用程序測試的工具。Selenium 測試直接在瀏覽器中運行,就像真正的用戶(hù)在操作一樣。支持的瀏覽器包括IE(7, 8, 9, 10, 11), Mozilla Firefox, Safari, Google Chrome, Opera等。本工具的主要功能包括:測試與瀏覽器的兼容性-測試您的應用程序可以在不同的瀏覽器和操作系統上運行良好測試系統功能-創(chuàng )建回歸測試以驗證軟件功能和用戶(hù)需求支持自動(dòng)記錄動(dòng)作和自動(dòng)生成.Net、Java、Perl等多種語(yǔ)言的測試腳本。
所以,不要犯錯,犯一般錯誤,認為python很容易用于網(wǎng)頁(yè)抓取,你可以使用C#中的常用工具。當前的工具不僅限于實(shí)現一種語(yǔ)言。我相信 dotNET 會(huì )變得更加開(kāi)源。當生態(tài)越來(lái)越好時(shí),會(huì )出現更多方便的工具。
在 C# 代碼中,Seenium 用于控制瀏覽器行為,在瀏覽器上打開(kāi)不同的 URL,然后下載相應的文件。
因為我們想要圖形版本的數據,而不僅僅是一些結構化的數據,最簡(jiǎn)單的方法是將類(lèi)似瀏覽器行為的CTRL+S作為網(wǎng)頁(yè)保存到本地。也用代碼來(lái)模擬發(fā)送鍵和擊鍵的方式。有興趣的讀者可以參考以下代碼。
網(wǎng)上同樣的就是python的實(shí)現,作者簡(jiǎn)單的修改成了dotNET版本。
[DllImport("user32.dll", EntryPoint = "keybd_event", SetLastError = true)]
public static extern void keybd_event(System.Windows.Forms.Keys bVk, byte bScan, uint dwFlags, uint dwExtraInfo);
private static void SaveHtml(ChromeDriver driver)
{
uint KEYEVENTF_KEYUP = 2;
keybd_event(Keys.ControlKey, 0, 0, 0);
keybd_event(Keys.S, 0, 0, 0);
keybd_event(Keys.ControlKey, 0, KEYEVENTF_KEYUP, 0);
Thread.Sleep(3000);
keybd_event(Keys.Enter, 0, 0, 0);
keybd_event(Keys.Enter, 0, KEYEVENTF_KEYUP, 0);
Thread.Sleep(5000);
driver.Close();
driver.Quit();
}
二、將多個(gè)網(wǎng)頁(yè)保存為PDF
雖然WORD也可以用來(lái)打開(kāi)網(wǎng)頁(yè),但估計WORD是用IE技術(shù)渲染網(wǎng)頁(yè)的,很多功能無(wú)法恢復。所以直接轉PDF更科學(xué)。
PDF 的另一個(gè)好處是幾乎所有的 PDF 閱讀器都可以隨意打開(kāi)和顯示原創(chuàng )效果。雖然 PDF 的編輯能力非常有限,但我們的目的主要是為了閱讀,所以將 HTML 轉換為 PDF 是非常理想的。
它可以將多個(gè)網(wǎng)頁(yè)轉換為一個(gè)PDF文件,閱讀時(shí)更加連貫。
網(wǎng)頁(yè)轉PDF的工具是wkhtmltopdf,也是一個(gè)命令行工具,可以多種語(yǔ)言調用。當然,dotNET 調用是沒(méi)有問(wèn)題的,但是為了更好的體驗,還是應該在 PowerShell 上使用。
wkhtmltopdf的安裝方法,自行搜索資料學(xué)習,都在下一步完成,最后記得設置環(huán)境變量,讓CMD和PowerShell識別。
平時(shí)可以看到的python的html to pdf功能,其實(shí)底層也是用wkhtmltopdf完成的。
要將多個(gè)網(wǎng)頁(yè)轉換為PDF,需要考慮排序問(wèn)題。這時(shí)候使用Excel催化劑可以輕松實(shí)現HTML排版順序問(wèn)題。
一般來(lái)說(shuō),我們是按順序下載網(wǎng)頁(yè)的,所以簡(jiǎn)單的使用Excel Catalyst的遍歷文件功能來(lái)遍歷文件信息,在Excel上做一個(gè)排序處理,手動(dòng)調整一些特殊文件的順序。
另一個(gè)自定義函數stringjoin可以快速將多個(gè)文件合并成一個(gè)字符串組合,用空格隔開(kāi),每條記錄都要用雙引號括起來(lái)。
打開(kāi)我們的 PowerShell ISE 軟件,它是 win10 自帶的。其他系統也有,可以自行搜索相關(guān)教程打開(kāi)。
相信很多讀者也和作者有同感。他們覺(jué)得命令行很可怕。它是一系列代碼,尤其是幫助文件。
事實(shí)上,它確實(shí)突破了心理恐懼。命令行工具和我們在Excel上寫(xiě)函數的原理都是一個(gè)函數名和各種參數,但是命令行可以有很多參數。
以下是我們如何在 PowerShell 上使用單個(gè)命令將多個(gè) html 文件合并為一個(gè) PDF 文件。
筆者還費了一番功夫閱讀幫助文檔,寫(xiě)出了更多命令的功能,比如添加頁(yè)眉和頁(yè)腳的功能。
開(kāi)頭的參數是全局參數。具體說(shuō)明請參考官方文檔。
全局參數寫(xiě)好后,攤開(kāi)多個(gè)html文件,最后加上pdf文件的名字,弄的太多了。該文件使用相對路徑。您需要將PowerShell的當前路徑切換到html存儲文件夾。切換命令是 CD。
終于,激動(dòng)人心的時(shí)刻到了,可以順利生成pdf文件了。
包括頁(yè)眉和頁(yè)腳信息,一個(gè)總共400多頁(yè)的PDF電子書(shū)誕生了。
有興趣的讀者不妨將自己喜歡的網(wǎng)頁(yè)相冊制作成PDF文件,方便查閱。之前的錯誤是追求PDF閱讀器的精簡(jiǎn),現在我重新使用【福昕閱讀器】(感謝上一篇文章后讀者朋友的推薦),舊的免費PDF閱讀軟件可以進(jìn)行基于文本的PDF文件注釋并記筆記。這里推薦大家使用。
同樣,搜索關(guān)鍵詞后,會(huì )出現一個(gè)關(guān)鍵詞的列表。比如在學(xué)習DAX的過(guò)程中,如果想像參考書(shū)一樣查找ALLSELECT函數的用法,可以搜索全文。這比使用搜索引擎查找要好得多。學(xué)習后,您還可以突出顯示并做筆記。
結束語(yǔ)
在研究本文功能實(shí)現的過(guò)程中,我重新發(fā)現了dotNET的強大。不用太羨慕python的網(wǎng)絡(luò )爬蟲(chóng)。它在 dotNET 中仍然非常有用。
同時(shí),在 Windows 環(huán)境中,沒(méi)有什么比 dotNET 開(kāi)發(fā)更高效的了。再好的python,共享和交互也是一件頭疼的事,但dotNET桌面開(kāi)發(fā)自然是最大的優(yōu)勢。
在OFFICE環(huán)境下開(kāi)發(fā)的優(yōu)勢就更詳細了。其實(shí)本文的功能也可以移到Excel環(huán)境中無(wú)痛執行。以后有空再慢慢優(yōu)化整個(gè)流程。
將 html 轉換為 PDF 帶來(lái)了極大的方便。該內容在互聯(lián)網(wǎng)上,而不是您自己的數據,并且可能隨時(shí)被刪除和無(wú)法訪(fǎng)問(wèn)。壓力下,肯定撐不了多久,所以我提前計劃,先下載到本地,哈哈)。 查看全部
抓取網(wǎng)頁(yè)生成電子書(shū)(如何快速上手,做出自己的網(wǎng)頁(yè)不是技術(shù)要點(diǎn)?)
上一篇簡(jiǎn)單展示了我們將網(wǎng)頁(yè)轉成PDF的結果,特別適用于序列化的網(wǎng)頁(yè)文章,組織成一本書(shū)。
本文也為大家簡(jiǎn)單講解了技術(shù)要點(diǎn),讓大家快速上手,制作屬于自己的電子書(shū)。
技術(shù)要點(diǎn)
一、 抓取網(wǎng)頁(yè)并保存到本地
因為大部分網(wǎng)頁(yè)都收錄圖片,所以很多網(wǎng)頁(yè)都不是普通的靜態(tài)網(wǎng)頁(yè)。相應的內容是在瀏覽器加載過(guò)程中隨著(zhù)瀏覽器滾動(dòng)條的滾動(dòng)而加載的。
所以如果你只想簡(jiǎn)單地發(fā)送一個(gè) URL 并返回一個(gè) PDF 文件,它通常會(huì )失敗。
使用代碼控制瀏覽器,模擬瀏覽器的瀏覽操作。這是一個(gè)工具:selenium,我相信通常關(guān)注網(wǎng)絡(luò )抓取的人對它很熟悉。
作者嘗試搜索selenium+C#感興趣的詞,沒(méi)想到selenium竟然是一個(gè)支持多語(yǔ)言的工具。百度自查的具體介紹,以下是百度百科介紹的簡(jiǎn)單截取。
Selenium [1] 是一種用于 Web 應用程序測試的工具。Selenium 測試直接在瀏覽器中運行,就像真正的用戶(hù)在操作一樣。支持的瀏覽器包括IE(7, 8, 9, 10, 11), Mozilla Firefox, Safari, Google Chrome, Opera等。本工具的主要功能包括:測試與瀏覽器的兼容性-測試您的應用程序可以在不同的瀏覽器和操作系統上運行良好測試系統功能-創(chuàng )建回歸測試以驗證軟件功能和用戶(hù)需求支持自動(dòng)記錄動(dòng)作和自動(dòng)生成.Net、Java、Perl等多種語(yǔ)言的測試腳本。
所以,不要犯錯,犯一般錯誤,認為python很容易用于網(wǎng)頁(yè)抓取,你可以使用C#中的常用工具。當前的工具不僅限于實(shí)現一種語(yǔ)言。我相信 dotNET 會(huì )變得更加開(kāi)源。當生態(tài)越來(lái)越好時(shí),會(huì )出現更多方便的工具。
在 C# 代碼中,Seenium 用于控制瀏覽器行為,在瀏覽器上打開(kāi)不同的 URL,然后下載相應的文件。
因為我們想要圖形版本的數據,而不僅僅是一些結構化的數據,最簡(jiǎn)單的方法是將類(lèi)似瀏覽器行為的CTRL+S作為網(wǎng)頁(yè)保存到本地。也用代碼來(lái)模擬發(fā)送鍵和擊鍵的方式。有興趣的讀者可以參考以下代碼。
網(wǎng)上同樣的就是python的實(shí)現,作者簡(jiǎn)單的修改成了dotNET版本。
[DllImport("user32.dll", EntryPoint = "keybd_event", SetLastError = true)]
public static extern void keybd_event(System.Windows.Forms.Keys bVk, byte bScan, uint dwFlags, uint dwExtraInfo);
private static void SaveHtml(ChromeDriver driver)
{
uint KEYEVENTF_KEYUP = 2;
keybd_event(Keys.ControlKey, 0, 0, 0);
keybd_event(Keys.S, 0, 0, 0);
keybd_event(Keys.ControlKey, 0, KEYEVENTF_KEYUP, 0);
Thread.Sleep(3000);
keybd_event(Keys.Enter, 0, 0, 0);
keybd_event(Keys.Enter, 0, KEYEVENTF_KEYUP, 0);
Thread.Sleep(5000);
driver.Close();
driver.Quit();
}
二、將多個(gè)網(wǎng)頁(yè)保存為PDF
雖然WORD也可以用來(lái)打開(kāi)網(wǎng)頁(yè),但估計WORD是用IE技術(shù)渲染網(wǎng)頁(yè)的,很多功能無(wú)法恢復。所以直接轉PDF更科學(xué)。
PDF 的另一個(gè)好處是幾乎所有的 PDF 閱讀器都可以隨意打開(kāi)和顯示原創(chuàng )效果。雖然 PDF 的編輯能力非常有限,但我們的目的主要是為了閱讀,所以將 HTML 轉換為 PDF 是非常理想的。
它可以將多個(gè)網(wǎng)頁(yè)轉換為一個(gè)PDF文件,閱讀時(shí)更加連貫。
網(wǎng)頁(yè)轉PDF的工具是wkhtmltopdf,也是一個(gè)命令行工具,可以多種語(yǔ)言調用。當然,dotNET 調用是沒(méi)有問(wèn)題的,但是為了更好的體驗,還是應該在 PowerShell 上使用。
wkhtmltopdf的安裝方法,自行搜索資料學(xué)習,都在下一步完成,最后記得設置環(huán)境變量,讓CMD和PowerShell識別。
平時(shí)可以看到的python的html to pdf功能,其實(shí)底層也是用wkhtmltopdf完成的。
要將多個(gè)網(wǎng)頁(yè)轉換為PDF,需要考慮排序問(wèn)題。這時(shí)候使用Excel催化劑可以輕松實(shí)現HTML排版順序問(wèn)題。
一般來(lái)說(shuō),我們是按順序下載網(wǎng)頁(yè)的,所以簡(jiǎn)單的使用Excel Catalyst的遍歷文件功能來(lái)遍歷文件信息,在Excel上做一個(gè)排序處理,手動(dòng)調整一些特殊文件的順序。
另一個(gè)自定義函數stringjoin可以快速將多個(gè)文件合并成一個(gè)字符串組合,用空格隔開(kāi),每條記錄都要用雙引號括起來(lái)。
打開(kāi)我們的 PowerShell ISE 軟件,它是 win10 自帶的。其他系統也有,可以自行搜索相關(guān)教程打開(kāi)。
相信很多讀者也和作者有同感。他們覺(jué)得命令行很可怕。它是一系列代碼,尤其是幫助文件。
事實(shí)上,它確實(shí)突破了心理恐懼。命令行工具和我們在Excel上寫(xiě)函數的原理都是一個(gè)函數名和各種參數,但是命令行可以有很多參數。
以下是我們如何在 PowerShell 上使用單個(gè)命令將多個(gè) html 文件合并為一個(gè) PDF 文件。
筆者還費了一番功夫閱讀幫助文檔,寫(xiě)出了更多命令的功能,比如添加頁(yè)眉和頁(yè)腳的功能。
開(kāi)頭的參數是全局參數。具體說(shuō)明請參考官方文檔。
全局參數寫(xiě)好后,攤開(kāi)多個(gè)html文件,最后加上pdf文件的名字,弄的太多了。該文件使用相對路徑。您需要將PowerShell的當前路徑切換到html存儲文件夾。切換命令是 CD。
終于,激動(dòng)人心的時(shí)刻到了,可以順利生成pdf文件了。
包括頁(yè)眉和頁(yè)腳信息,一個(gè)總共400多頁(yè)的PDF電子書(shū)誕生了。
有興趣的讀者不妨將自己喜歡的網(wǎng)頁(yè)相冊制作成PDF文件,方便查閱。之前的錯誤是追求PDF閱讀器的精簡(jiǎn),現在我重新使用【福昕閱讀器】(感謝上一篇文章后讀者朋友的推薦),舊的免費PDF閱讀軟件可以進(jìn)行基于文本的PDF文件注釋并記筆記。這里推薦大家使用。
同樣,搜索關(guān)鍵詞后,會(huì )出現一個(gè)關(guān)鍵詞的列表。比如在學(xué)習DAX的過(guò)程中,如果想像參考書(shū)一樣查找ALLSELECT函數的用法,可以搜索全文。這比使用搜索引擎查找要好得多。學(xué)習后,您還可以突出顯示并做筆記。
結束語(yǔ)
在研究本文功能實(shí)現的過(guò)程中,我重新發(fā)現了dotNET的強大。不用太羨慕python的網(wǎng)絡(luò )爬蟲(chóng)。它在 dotNET 中仍然非常有用。
同時(shí),在 Windows 環(huán)境中,沒(méi)有什么比 dotNET 開(kāi)發(fā)更高效的了。再好的python,共享和交互也是一件頭疼的事,但dotNET桌面開(kāi)發(fā)自然是最大的優(yōu)勢。
在OFFICE環(huán)境下開(kāi)發(fā)的優(yōu)勢就更詳細了。其實(shí)本文的功能也可以移到Excel環(huán)境中無(wú)痛執行。以后有空再慢慢優(yōu)化整個(gè)流程。
將 html 轉換為 PDF 帶來(lái)了極大的方便。該內容在互聯(lián)網(wǎng)上,而不是您自己的數據,并且可能隨時(shí)被刪除和無(wú)法訪(fǎng)問(wèn)。壓力下,肯定撐不了多久,所以我提前計劃,先下載到本地,哈哈)。
抓取網(wǎng)頁(yè)生成電子書(shū)(如何使用PDFsamBasic來(lái)從PDF文件中的簡(jiǎn)短指南 )
網(wǎng)站優(yōu)化 ? 優(yōu)采云 發(fā)表了文章 ? 0 個(gè)評論 ? 161 次瀏覽 ? 2021-10-08 00:06
)
從 PDF 文件中提取頁(yè)面。通過(guò)生成只收錄您需要的頁(yè)面的文件,您可以批量從單個(gè)或多個(gè)文件中提取頁(yè)面。PDFsam Basic 是一款適用于 Windows、Mac 和 Linux 的免費開(kāi)源軟件。
下載 PDFsam Basic
確保您的 PDF 文件安全且私密。通過(guò)我們的應用程序,您無(wú)需將 PDF 文件上傳到任何第三方服務(wù),所有處理都在您的計算機本地進(jìn)行,您的文件將保持安全和私密
關(guān)于如何使用 PDFsam Basic 從 PDF 文件中提取頁(yè)面的簡(jiǎn)短指南
選擇PDF文件
拖放要從中提取頁(yè)面的 PDF 文件,或單擊添加以添加文件。加密的 PDF 文件將在其左側顯示一個(gè)圖標。單擊鎖定圖標并填寫(xiě)解鎖密碼。
設置
設置要從所選 PDF 文件中提取的頁(yè)面。您可以將它們設置為逗號分隔的數字或頁(yè)面范圍,例如:2,5,6-13,25.
目標文件夾
選擇生成 PDF 文件的位置。
自定義文件的名稱(chēng)
輸出文件的名稱(chēng)可以使用特殊關(guān)鍵字作為占位符,并在執行過(guò)程中使用動(dòng)態(tài)值進(jìn)行替換。例如,可以是 [File Number] 為文件名添加遞增計數器值,或 [Time Stamp] 將當前時(shí)間戳添加到文件名。右鍵單擊該字段以查找所有可用關(guān)鍵字。
如何自定義文件名
提取頁(yè)面
正確設置所有選項后,單擊運行開(kāi)始執行。如果沒(méi)有錯誤發(fā)生,進(jìn)度條會(huì )一直增長(cháng)直到完全著(zhù)色,然后友好的叮當聲會(huì )告訴你你的PDF文件已經(jīng)準備好了。
查看全部
抓取網(wǎng)頁(yè)生成電子書(shū)(如何使用PDFsamBasic來(lái)從PDF文件中的簡(jiǎn)短指南
)
從 PDF 文件中提取頁(yè)面。通過(guò)生成只收錄您需要的頁(yè)面的文件,您可以批量從單個(gè)或多個(gè)文件中提取頁(yè)面。PDFsam Basic 是一款適用于 Windows、Mac 和 Linux 的免費開(kāi)源軟件。
下載 PDFsam Basic
確保您的 PDF 文件安全且私密。通過(guò)我們的應用程序,您無(wú)需將 PDF 文件上傳到任何第三方服務(wù),所有處理都在您的計算機本地進(jìn)行,您的文件將保持安全和私密
關(guān)于如何使用 PDFsam Basic 從 PDF 文件中提取頁(yè)面的簡(jiǎn)短指南
選擇PDF文件
拖放要從中提取頁(yè)面的 PDF 文件,或單擊添加以添加文件。加密的 PDF 文件將在其左側顯示一個(gè)圖標。單擊鎖定圖標并填寫(xiě)解鎖密碼。

設置
設置要從所選 PDF 文件中提取的頁(yè)面。您可以將它們設置為逗號分隔的數字或頁(yè)面范圍,例如:2,5,6-13,25.

目標文件夾
選擇生成 PDF 文件的位置。

自定義文件的名稱(chēng)
輸出文件的名稱(chēng)可以使用特殊關(guān)鍵字作為占位符,并在執行過(guò)程中使用動(dòng)態(tài)值進(jìn)行替換。例如,可以是 [File Number] 為文件名添加遞增計數器值,或 [Time Stamp] 將當前時(shí)間戳添加到文件名。右鍵單擊該字段以查找所有可用關(guān)鍵字。
如何自定義文件名

提取頁(yè)面
正確設置所有選項后,單擊運行開(kāi)始執行。如果沒(méi)有錯誤發(fā)生,進(jìn)度條會(huì )一直增長(cháng)直到完全著(zhù)色,然后友好的叮當聲會(huì )告訴你你的PDF文件已經(jīng)準備好了。
抓取網(wǎng)頁(yè)生成電子書(shū)(使用python爬蟲(chóng)實(shí)現把《廖雪峰的Python教程》轉換成PDF的方法和代碼)
網(wǎng)站優(yōu)化 ? 優(yōu)采云 發(fā)表了文章 ? 0 個(gè)評論 ? 124 次瀏覽 ? 2021-10-07 03:27
本文與您分享使用Python crawler將廖雪峰的Python教程轉換為PDF的方法和代碼。如果你需要它,你可以參考它
似乎沒(méi)有比使用python更好的方法來(lái)編寫(xiě)爬蟲(chóng)程序。python社區提供了許多讓您眼花繚亂的爬蟲(chóng)工具??梢灾苯邮褂玫母鞣N庫可以在幾分鐘內編寫(xiě)一個(gè)爬蟲(chóng)程序。今天,我想寫(xiě)一個(gè)爬蟲(chóng)程序,把廖雪峰的Python程序下載到PDF電子書(shū)中,供離線(xiàn)閱讀
在編寫(xiě)爬蟲(chóng)程序之前,讓我們首先分析網(wǎng)站1的頁(yè)面結構。頁(yè)面左側是教程的目錄大綱。每一個(gè)URL對應于右邊的“@ K7@”,“@ K7@”的標題位于右上方,“@ K7@”的主體部分位于中間。正文內容是我們關(guān)注的焦點(diǎn)。我們想要爬升的數據是所有網(wǎng)頁(yè)的主體部分,下面是用戶(hù)的評論區。評論區對我們來(lái)說(shuō)是無(wú)用的,所以我們可以忽略它
工具準備
一旦理解了網(wǎng)站的基本結構,就可以開(kāi)始準備爬蟲(chóng)程序所依賴(lài)的工具包。請求和漂亮的湯是爬蟲(chóng)的兩個(gè)工件。Reuqests用于網(wǎng)絡(luò )請求,Beauty soup用于操作HTML數據。有了這兩架航天飛機,我們可以快速工作。我們不需要像scratch這樣的爬行動(dòng)物框架。這有點(diǎn)像在小程序中用牛刀殺雞。此外,由于它是將HTML文件轉換為PDF,因此還需要相應的庫支持。Wkhtmltopdf是一個(gè)非常好的工具。它可以將HTML轉換為適合多平臺的PDF。Pdfkit是wkhtmltopdf的python包。首先,安裝以下依賴(lài)項包
接下來(lái),安裝wkhtmltopdfip安裝請求
pip安裝美化組
pip安裝pdfkit
安裝wkhtmltopdf
windows平臺直接從wkhtmltopdf官方網(wǎng)站2下載穩定版本進(jìn)行安裝。安裝完成后,將程序的執行路徑添加到系統環(huán)境的$path變量中。否則,如果pdfkit找不到wkhtmltopdf,則會(huì )出現錯誤“找不到wkhtmltopdf可執行文件”。Ubuntu和CentOS可以直接從命令行$sudo apt get install wkhtmltopdf#Ubuntu安裝
$sudo yum intsall wkhtmltopdf#centos
爬蟲(chóng)實(shí)現
當一切準備就緒時(shí),您可以編寫(xiě)代碼,但在編寫(xiě)代碼之前,您應該先清理頭腦。該程序的目的是在本地保存與所有URL對應的HTML正文,然后使用pdfkit將這些文件轉換為PDF文件。讓我們把任務(wù)分成兩部分。首先,在本地保存與URL對應的HTML正文,然后查找所有URL以執行相同的操作
使用Chrome瀏覽器查找頁(yè)面主體部分的標簽,然后按F12查找與主體對應的p標簽:
,這是網(wǎng)頁(yè)的正文內容。在本地加載整個(gè)頁(yè)面的請求后,可以使用Beauty soup操作HTML的DOM元素來(lái)提取正文內容
具體實(shí)現代碼如下:use soup.find uuAll函數查找body標記并將body部分的內容保存到a.html文件中。def解析url到html(url):
response=requests.get(url)
soup=BeautifulSoup(response.content,“html5lib”)
body=soup.find uAll(class=“x-wiki-content”)[0]
html=str(正文)
以open(“a.html”,“wb”)作為f:
f、 編寫(xiě)(html)
第二步是解析頁(yè)面左側的所有URL。同樣,找到左側的菜單選項卡
具體代碼實(shí)現了邏輯:頁(yè)面上有兩個(gè)類(lèi)屬性UK NAV UK NAV side,第二個(gè)是真實(shí)目錄列表。所有URL都被獲取,并且在第一步中還編寫(xiě)了URL到HTML的函數。def get_uuURL_uuu列表():
“”“
獲取所有URL目錄的列表
“”“
response=requests.get(“”)
soup=BeautifulSoup(response.content,“html5lib”)
menu_uTag=soup.find_uuAll(class=“uk nav uk nav side”)[1]
URL=[]
對于菜單中的li uTag.find uuAll(“l(fā)i”): 查看全部
抓取網(wǎng)頁(yè)生成電子書(shū)(使用python爬蟲(chóng)實(shí)現把《廖雪峰的Python教程》轉換成PDF的方法和代碼)
本文與您分享使用Python crawler將廖雪峰的Python教程轉換為PDF的方法和代碼。如果你需要它,你可以參考它
似乎沒(méi)有比使用python更好的方法來(lái)編寫(xiě)爬蟲(chóng)程序。python社區提供了許多讓您眼花繚亂的爬蟲(chóng)工具??梢灾苯邮褂玫母鞣N庫可以在幾分鐘內編寫(xiě)一個(gè)爬蟲(chóng)程序。今天,我想寫(xiě)一個(gè)爬蟲(chóng)程序,把廖雪峰的Python程序下載到PDF電子書(shū)中,供離線(xiàn)閱讀
在編寫(xiě)爬蟲(chóng)程序之前,讓我們首先分析網(wǎng)站1的頁(yè)面結構。頁(yè)面左側是教程的目錄大綱。每一個(gè)URL對應于右邊的“@ K7@”,“@ K7@”的標題位于右上方,“@ K7@”的主體部分位于中間。正文內容是我們關(guān)注的焦點(diǎn)。我們想要爬升的數據是所有網(wǎng)頁(yè)的主體部分,下面是用戶(hù)的評論區。評論區對我們來(lái)說(shuō)是無(wú)用的,所以我們可以忽略它
工具準備
一旦理解了網(wǎng)站的基本結構,就可以開(kāi)始準備爬蟲(chóng)程序所依賴(lài)的工具包。請求和漂亮的湯是爬蟲(chóng)的兩個(gè)工件。Reuqests用于網(wǎng)絡(luò )請求,Beauty soup用于操作HTML數據。有了這兩架航天飛機,我們可以快速工作。我們不需要像scratch這樣的爬行動(dòng)物框架。這有點(diǎn)像在小程序中用牛刀殺雞。此外,由于它是將HTML文件轉換為PDF,因此還需要相應的庫支持。Wkhtmltopdf是一個(gè)非常好的工具。它可以將HTML轉換為適合多平臺的PDF。Pdfkit是wkhtmltopdf的python包。首先,安裝以下依賴(lài)項包
接下來(lái),安裝wkhtmltopdfip安裝請求
pip安裝美化組
pip安裝pdfkit
安裝wkhtmltopdf
windows平臺直接從wkhtmltopdf官方網(wǎng)站2下載穩定版本進(jìn)行安裝。安裝完成后,將程序的執行路徑添加到系統環(huán)境的$path變量中。否則,如果pdfkit找不到wkhtmltopdf,則會(huì )出現錯誤“找不到wkhtmltopdf可執行文件”。Ubuntu和CentOS可以直接從命令行$sudo apt get install wkhtmltopdf#Ubuntu安裝
$sudo yum intsall wkhtmltopdf#centos
爬蟲(chóng)實(shí)現
當一切準備就緒時(shí),您可以編寫(xiě)代碼,但在編寫(xiě)代碼之前,您應該先清理頭腦。該程序的目的是在本地保存與所有URL對應的HTML正文,然后使用pdfkit將這些文件轉換為PDF文件。讓我們把任務(wù)分成兩部分。首先,在本地保存與URL對應的HTML正文,然后查找所有URL以執行相同的操作
使用Chrome瀏覽器查找頁(yè)面主體部分的標簽,然后按F12查找與主體對應的p標簽:
,這是網(wǎng)頁(yè)的正文內容。在本地加載整個(gè)頁(yè)面的請求后,可以使用Beauty soup操作HTML的DOM元素來(lái)提取正文內容
具體實(shí)現代碼如下:use soup.find uuAll函數查找body標記并將body部分的內容保存到a.html文件中。def解析url到html(url):
response=requests.get(url)
soup=BeautifulSoup(response.content,“html5lib”)
body=soup.find uAll(class=“x-wiki-content”)[0]
html=str(正文)
以open(“a.html”,“wb”)作為f:
f、 編寫(xiě)(html)
第二步是解析頁(yè)面左側的所有URL。同樣,找到左側的菜單選項卡
具體代碼實(shí)現了邏輯:頁(yè)面上有兩個(gè)類(lèi)屬性UK NAV UK NAV side,第二個(gè)是真實(shí)目錄列表。所有URL都被獲取,并且在第一步中還編寫(xiě)了URL到HTML的函數。def get_uuURL_uuu列表():
“”“
獲取所有URL目錄的列表
“”“
response=requests.get(“”)
soup=BeautifulSoup(response.content,“html5lib”)
menu_uTag=soup.find_uuAll(class=“uk nav uk nav side”)[1]
URL=[]
對于菜單中的li uTag.find uuAll(“l(fā)i”):
抓取網(wǎng)頁(yè)生成電子書(shū)(如何將網(wǎng)頁(yè)上顯示的內容導出為pdf文件?)
網(wǎng)站優(yōu)化 ? 優(yōu)采云 發(fā)表了文章 ? 0 個(gè)評論 ? 240 次瀏覽 ? 2021-10-06 20:01
我們都知道一個(gè)普通的網(wǎng)頁(yè)是由html+css+js組成的,它的本質(zhì)是由一段代碼編譯而成的。圖片是由一堆二進(jìn)制數據組成的,我們如何將網(wǎng)頁(yè)顯示的內容導出為我們想要的圖片或者pdf呢?博主很無(wú)聊,在github上閑逛,發(fā)現了一個(gè)有趣的庫pyppeteer,滿(mǎn)足了我需要的導出需求。接下來(lái),我們來(lái)看看它是如何運作的:
安裝所需的庫
pip install pillow
pip install reportlab
pip install pyppeteer
導出為圖片
import os
import asyncio
from pyppeteer import launch
async def save_image(url, img_path):
"""
導出圖片
:param url: 在線(xiàn)網(wǎng)頁(yè)的url
:param img_path: 圖片存放位置
:return:
"""
browser = await launch()
page = await browser.newPage()
# 加載指定的網(wǎng)頁(yè)url
await page.goto(url)
# 設置網(wǎng)頁(yè)顯示尺寸
await page.setViewport({'width': 1920, 'height': 1080})
'''
path: 圖片存放位置
clip: 位置與圖片尺寸信息
x: 網(wǎng)頁(yè)截圖的x坐標
y: 網(wǎng)頁(yè)截圖的y坐標
width: 圖片寬度
height: 圖片高度
'''
await page.screenshot({'path': img_path, 'clip': {'x': 457, 'y': 70, 'width': 730, 'height': 2600}})
await browser.close()
if __name__ == '__main__':
url = "https://www.jianshu.com/p/13dadc463f40"
img_path = os.path.join(os.getcwd(), "example.png")
loop = asyncio.get_event_loop()
loop.run_until_complete(save_image(url, img_path))
執行完成后,不出意外的話(huà),在當前目錄下會(huì )生成一個(gè)名為example.png的文件,就是我們導出的圖片文件!
將整個(gè)頁(yè)面導出為pdf
import os
import asyncio
from pyppeteer import launch
async def save_pdf(url, pdf_path):
"""
導出pdf
:param url: 在線(xiàn)網(wǎng)頁(yè)的url
:param pdf_path: pdf存放位置
:return:
"""
browser = await launch()
page = await browser.newPage()
# 加載指定的網(wǎng)頁(yè)url
await page.goto(url)
# 設置網(wǎng)頁(yè)顯示尺寸
await page.setViewport({'width': 1920, 'height': 1080})
'''
path: 圖片存放位置
width: 紙張寬度,帶單位的字符串
height: 紙張高度,帶單位的字符串
'''
await page.pdf({'path': pdf_path, 'width': '730px', 'height': '2600px'})
await browser.close()
if __name__ == '__main__':
url = "https://www.jianshu.com/p/13dadc463f40"
pdf_path = os.path.join(os.getcwd(), "example.pdf")
loop = asyncio.get_event_loop()
loop.run_until_complete(save_pdf(url, pdf_path))
執行完成后,不出意外的話(huà),在當前目錄下會(huì )生成一個(gè)名為example.pdf的文件,就是我們導出的pdf文件!但是,這種出口有一個(gè)缺點(diǎn)。它將整個(gè)網(wǎng)頁(yè)導出為 pdf。不支持圖片等位置參數??梢越厝〔糠謪^域進(jìn)行導出!因此,我稍微修改了代碼,請參閱下面的“將區域導出為pdf”!
將區域導出為 pdf
import os
import asyncio
from io import BytesIO
from PIL import Image
from pyppeteer import launch
from reportlab.pdfgen.canvas import Canvas
from reportlab.lib.utils import ImageReader
async def save_pdf(url, pdf_path):
"""
導出pdf
:param url: 在線(xiàn)網(wǎng)頁(yè)的url
:param pdf_path: pdf存放位置
:return:
"""
browser = await launch()
page = await browser.newPage()
# 加載指定的網(wǎng)頁(yè)url
await page.goto(url)
# 設置網(wǎng)頁(yè)顯示尺寸
await page.setViewport({'width': 1920, 'height': 1080})
'''
clip: 位置與圖片尺寸信息
x: 網(wǎng)頁(yè)截圖的x坐標
y: 網(wǎng)頁(yè)截圖的y坐標
width: 圖片寬度
height: 圖片高度
'''
img_data = await page.screenshot({'clip': {'x': 457, 'y': 70, 'width': 730, 'height': 2600}})
im = Image.open(BytesIO(img_data))
page_width, page_height = im.size
c = Canvas(pdf_path, pagesize=(page_width, page_height))
c.drawImage(ImageReader(im), 0, 0)
c.save()
if __name__ == '__main__':
url = "https://www.jianshu.com/p/13dadc463f40"
pdf_path = os.path.join(os.getcwd(), "example.pdf")
loop = asyncio.get_event_loop()
loop.run_until_complete(save_pdf(url, pdf_path))
這樣我們就可以進(jìn)行區域截取,導出pdf文件了!
值得注意的是,由于網(wǎng)絡(luò )、配置以及各種不可控因素,上述方法都會(huì )有一定程度的導出錯誤,所以建議添加重試機制!
更多pyppeteer操作請看:
從此,結束了~~~ 查看全部
抓取網(wǎng)頁(yè)生成電子書(shū)(如何將網(wǎng)頁(yè)上顯示的內容導出為pdf文件?)
我們都知道一個(gè)普通的網(wǎng)頁(yè)是由html+css+js組成的,它的本質(zhì)是由一段代碼編譯而成的。圖片是由一堆二進(jìn)制數據組成的,我們如何將網(wǎng)頁(yè)顯示的內容導出為我們想要的圖片或者pdf呢?博主很無(wú)聊,在github上閑逛,發(fā)現了一個(gè)有趣的庫pyppeteer,滿(mǎn)足了我需要的導出需求。接下來(lái),我們來(lái)看看它是如何運作的:
安裝所需的庫
pip install pillow
pip install reportlab
pip install pyppeteer
導出為圖片
import os
import asyncio
from pyppeteer import launch
async def save_image(url, img_path):
"""
導出圖片
:param url: 在線(xiàn)網(wǎng)頁(yè)的url
:param img_path: 圖片存放位置
:return:
"""
browser = await launch()
page = await browser.newPage()
# 加載指定的網(wǎng)頁(yè)url
await page.goto(url)
# 設置網(wǎng)頁(yè)顯示尺寸
await page.setViewport({'width': 1920, 'height': 1080})
'''
path: 圖片存放位置
clip: 位置與圖片尺寸信息
x: 網(wǎng)頁(yè)截圖的x坐標
y: 網(wǎng)頁(yè)截圖的y坐標
width: 圖片寬度
height: 圖片高度
'''
await page.screenshot({'path': img_path, 'clip': {'x': 457, 'y': 70, 'width': 730, 'height': 2600}})
await browser.close()
if __name__ == '__main__':
url = "https://www.jianshu.com/p/13dadc463f40"
img_path = os.path.join(os.getcwd(), "example.png")
loop = asyncio.get_event_loop()
loop.run_until_complete(save_image(url, img_path))
執行完成后,不出意外的話(huà),在當前目錄下會(huì )生成一個(gè)名為example.png的文件,就是我們導出的圖片文件!
將整個(gè)頁(yè)面導出為pdf
import os
import asyncio
from pyppeteer import launch
async def save_pdf(url, pdf_path):
"""
導出pdf
:param url: 在線(xiàn)網(wǎng)頁(yè)的url
:param pdf_path: pdf存放位置
:return:
"""
browser = await launch()
page = await browser.newPage()
# 加載指定的網(wǎng)頁(yè)url
await page.goto(url)
# 設置網(wǎng)頁(yè)顯示尺寸
await page.setViewport({'width': 1920, 'height': 1080})
'''
path: 圖片存放位置
width: 紙張寬度,帶單位的字符串
height: 紙張高度,帶單位的字符串
'''
await page.pdf({'path': pdf_path, 'width': '730px', 'height': '2600px'})
await browser.close()
if __name__ == '__main__':
url = "https://www.jianshu.com/p/13dadc463f40"
pdf_path = os.path.join(os.getcwd(), "example.pdf")
loop = asyncio.get_event_loop()
loop.run_until_complete(save_pdf(url, pdf_path))
執行完成后,不出意外的話(huà),在當前目錄下會(huì )生成一個(gè)名為example.pdf的文件,就是我們導出的pdf文件!但是,這種出口有一個(gè)缺點(diǎn)。它將整個(gè)網(wǎng)頁(yè)導出為 pdf。不支持圖片等位置參數??梢越厝〔糠謪^域進(jìn)行導出!因此,我稍微修改了代碼,請參閱下面的“將區域導出為pdf”!
將區域導出為 pdf
import os
import asyncio
from io import BytesIO
from PIL import Image
from pyppeteer import launch
from reportlab.pdfgen.canvas import Canvas
from reportlab.lib.utils import ImageReader
async def save_pdf(url, pdf_path):
"""
導出pdf
:param url: 在線(xiàn)網(wǎng)頁(yè)的url
:param pdf_path: pdf存放位置
:return:
"""
browser = await launch()
page = await browser.newPage()
# 加載指定的網(wǎng)頁(yè)url
await page.goto(url)
# 設置網(wǎng)頁(yè)顯示尺寸
await page.setViewport({'width': 1920, 'height': 1080})
'''
clip: 位置與圖片尺寸信息
x: 網(wǎng)頁(yè)截圖的x坐標
y: 網(wǎng)頁(yè)截圖的y坐標
width: 圖片寬度
height: 圖片高度
'''
img_data = await page.screenshot({'clip': {'x': 457, 'y': 70, 'width': 730, 'height': 2600}})
im = Image.open(BytesIO(img_data))
page_width, page_height = im.size
c = Canvas(pdf_path, pagesize=(page_width, page_height))
c.drawImage(ImageReader(im), 0, 0)
c.save()
if __name__ == '__main__':
url = "https://www.jianshu.com/p/13dadc463f40"
pdf_path = os.path.join(os.getcwd(), "example.pdf")
loop = asyncio.get_event_loop()
loop.run_until_complete(save_pdf(url, pdf_path))
這樣我們就可以進(jìn)行區域截取,導出pdf文件了!
值得注意的是,由于網(wǎng)絡(luò )、配置以及各種不可控因素,上述方法都會(huì )有一定程度的導出錯誤,所以建議添加重試機制!
更多pyppeteer操作請看:
從此,結束了~~~
抓取網(wǎng)頁(yè)生成電子書(shū)( 之前配置生成器:強大!Nginx配置在線(xiàn)一鍵生成“神器” )
網(wǎng)站優(yōu)化 ? 優(yōu)采云 發(fā)表了文章 ? 0 個(gè)評論 ? 90 次瀏覽 ? 2021-10-06 19:34
之前配置生成器:強大!Nginx配置在線(xiàn)一鍵生成“神器”
)
之前農民工也給大家介紹過(guò)一個(gè)Nginx配置生成器:強大!Nginx配置在線(xiàn)一鍵生成“神器”,不太了解的可以去看看。
最近農民工發(fā)現了一個(gè)好用的網(wǎng)頁(yè)版開(kāi)源工具,它的功能也是Nginx配置生成器,非常強大,方便實(shí)用。它是:NginxWebUI。
NginxWebUI 介紹
NginxWebUI 是一個(gè)方便實(shí)用的 nginx web 配置工具??梢允褂肳ebUI配置Nginx的各種功能,包括端口轉發(fā)、反向代理、ssl證書(shū)配置、負載均衡等,最后生成“nginx.conf”配置文件并覆蓋目標配置文件,完成Nginx的功能配置nginx。
項目地址:
官方 網(wǎng)站:
<p>NginxWebUI 功能說(shuō)明 NginxWebUI 有兩種安裝方式安裝: 查看全部
抓取網(wǎng)頁(yè)生成電子書(shū)(
之前配置生成器:強大!Nginx配置在線(xiàn)一鍵生成“神器”
)

之前農民工也給大家介紹過(guò)一個(gè)Nginx配置生成器:強大!Nginx配置在線(xiàn)一鍵生成“神器”,不太了解的可以去看看。
最近農民工發(fā)現了一個(gè)好用的網(wǎng)頁(yè)版開(kāi)源工具,它的功能也是Nginx配置生成器,非常強大,方便實(shí)用。它是:NginxWebUI。
NginxWebUI 介紹
NginxWebUI 是一個(gè)方便實(shí)用的 nginx web 配置工具??梢允褂肳ebUI配置Nginx的各種功能,包括端口轉發(fā)、反向代理、ssl證書(shū)配置、負載均衡等,最后生成“nginx.conf”配置文件并覆蓋目標配置文件,完成Nginx的功能配置nginx。
項目地址:
官方 網(wǎng)站:
<p>NginxWebUI 功能說(shuō)明 NginxWebUI 有兩種安裝方式安裝:
抓取網(wǎng)頁(yè)生成電子書(shū)(之前備份專(zhuān)家配合Firefox+插件Firebug批量下載博客文章豆約翰博客專(zhuān)家)
網(wǎng)站優(yōu)化 ? 優(yōu)采云 發(fā)表了文章 ? 0 個(gè)評論 ? 127 次瀏覽 ? 2021-10-05 10:09
博客批量下載制作電子書(shū)方法1 前言
相信很多朋友都知道“左岸閱讀”這個(gè)博客,作者采集了很多優(yōu)秀的文章。大概在年初接觸到這個(gè)網(wǎng)站,非常非常喜歡。文章 非常符合我的口味。因為不喜歡在網(wǎng)絡(luò )上瀏覽文章,所以一般做成電子書(shū)后在kindle或手機上閱讀。這樣記筆記非常方便,便于復習和采集。以前用kindle的push和calibre的新聞抓取功能制作電子書(shū)非常方便。唯一的缺點(diǎn)就是只能抓取最新發(fā)布的文章,之前的老文章無(wú)法抓取。. 于是,我充分發(fā)揮了愛(ài)折騰的本能,經(jīng)過(guò)多日的摸索,總結,并參考了很多以前的經(jīng)驗,我終于成功了。方法比較復雜,折騰起來(lái)很累,在這里,分享給有需要的朋友。
2 需要準備的軟件
1)doujohn博客備份專(zhuān)家V2.6
2)Firefox+插件Firebug
3)epubBuilder 綠色版
需要說(shuō)明的是,epubBuilder 不是免費軟件,但是綠色版可以在網(wǎng)上下載,完全可以使用。
3 具體步驟3.1 使用豆約翰博客備份專(zhuān)家配合火狐+插件Firebug批量下載博客文章
Doujohn博客備份專(zhuān)家是一款完全免費、功能強大的博客備份工具、博客電子書(shū)(PDF、CHM和TXT)生成工具、博客文章離線(xiàn)瀏覽工具、漂亮的軟件界面、支持多個(gè)主流博客網(wǎng)站(Qzone ,百度空間,新浪博客,網(wǎng)易博客,豆瓣日記,天涯博客,19樓,博客園,和訊博客,CSDN博客,搜狐博客,51CTO博客)。
但最重要的是該軟件支持從獨立站點(diǎn)爬取博客?!蹲蟀堕喿x》是一個(gè)獨立站點(diǎn),但是配置起來(lái)確實(shí)有點(diǎn)麻煩。這個(gè)配置過(guò)程花了我很多時(shí)間,我什至想放棄。
關(guān)于獨立站點(diǎn)的配置,官網(wǎng)上有詳細的介紹,這里不再贅述,直接貼出網(wǎng)址:
《左岸閱讀》文章數量龐大,每月可排序。我以2013年1月的文章下載為例,貼出配置,如圖。
配置完成后,點(diǎn)擊“開(kāi)始下載”即可批量下載博客。理論上,根據軟件說(shuō)明,需要評估推廣軟件下載所有頁(yè)面(本例中為起始頁(yè)1到結束頁(yè)3),但經(jīng)過(guò)筆者的實(shí)驗發(fā)現,即使是評測不能批量下載,第一次只能在一個(gè)頁(yè)面下載所有文章,上圖配置下,只能下載第1頁(yè)文章,不過(guò)沒(méi)關(guān)系。反正只有3頁(yè),反正一頁(yè)一頁(yè)下載就完了可以下載文章的第二頁(yè),然后修改為3,
3.2 將下載的文章制作成chm文件
Doujohn的博客備份專(zhuān)家可以將下載的文章制作成文件,格式可以是pdf、chm、txt等。作者最初使用的是pdf格式,但發(fā)現在轉換的過(guò)程中會(huì )出現換行到電子書(shū)。嘗試了各種方法后都沒(méi)有解決,只能以chm格式保存。
3.3 將保存的chm文件制作成epub電子書(shū)
epubBuilder是口袋書(shū)園開(kāi)發(fā)的一款epub電子書(shū)制作神器,支持導入Txt、epub、html、chm、snb等源文件。
<p>打開(kāi)軟件,導入上面制作的chm??赐昴銜?huì )發(fā)現下面的文章會(huì )少了一個(gè)標題,沒(méi)關(guān)系,工具選項卡里有個(gè)“使用第一行作為目錄名”,在左邊選擇邊目錄欄批量丟失目錄(shift+左鍵點(diǎn)擊),點(diǎn)擊“使用第一行作為目錄名”,軟件會(huì )自動(dòng)將每個(gè)文章的第一行作為 查看全部
抓取網(wǎng)頁(yè)生成電子書(shū)(之前備份專(zhuān)家配合Firefox+插件Firebug批量下載博客文章豆約翰博客專(zhuān)家)
博客批量下載制作電子書(shū)方法1 前言
相信很多朋友都知道“左岸閱讀”這個(gè)博客,作者采集了很多優(yōu)秀的文章。大概在年初接觸到這個(gè)網(wǎng)站,非常非常喜歡。文章 非常符合我的口味。因為不喜歡在網(wǎng)絡(luò )上瀏覽文章,所以一般做成電子書(shū)后在kindle或手機上閱讀。這樣記筆記非常方便,便于復習和采集。以前用kindle的push和calibre的新聞抓取功能制作電子書(shū)非常方便。唯一的缺點(diǎn)就是只能抓取最新發(fā)布的文章,之前的老文章無(wú)法抓取。. 于是,我充分發(fā)揮了愛(ài)折騰的本能,經(jīng)過(guò)多日的摸索,總結,并參考了很多以前的經(jīng)驗,我終于成功了。方法比較復雜,折騰起來(lái)很累,在這里,分享給有需要的朋友。
2 需要準備的軟件
1)doujohn博客備份專(zhuān)家V2.6
2)Firefox+插件Firebug
3)epubBuilder 綠色版
需要說(shuō)明的是,epubBuilder 不是免費軟件,但是綠色版可以在網(wǎng)上下載,完全可以使用。
3 具體步驟3.1 使用豆約翰博客備份專(zhuān)家配合火狐+插件Firebug批量下載博客文章
Doujohn博客備份專(zhuān)家是一款完全免費、功能強大的博客備份工具、博客電子書(shū)(PDF、CHM和TXT)生成工具、博客文章離線(xiàn)瀏覽工具、漂亮的軟件界面、支持多個(gè)主流博客網(wǎng)站(Qzone ,百度空間,新浪博客,網(wǎng)易博客,豆瓣日記,天涯博客,19樓,博客園,和訊博客,CSDN博客,搜狐博客,51CTO博客)。
但最重要的是該軟件支持從獨立站點(diǎn)爬取博客?!蹲蟀堕喿x》是一個(gè)獨立站點(diǎn),但是配置起來(lái)確實(shí)有點(diǎn)麻煩。這個(gè)配置過(guò)程花了我很多時(shí)間,我什至想放棄。
關(guān)于獨立站點(diǎn)的配置,官網(wǎng)上有詳細的介紹,這里不再贅述,直接貼出網(wǎng)址:
《左岸閱讀》文章數量龐大,每月可排序。我以2013年1月的文章下載為例,貼出配置,如圖。
配置完成后,點(diǎn)擊“開(kāi)始下載”即可批量下載博客。理論上,根據軟件說(shuō)明,需要評估推廣軟件下載所有頁(yè)面(本例中為起始頁(yè)1到結束頁(yè)3),但經(jīng)過(guò)筆者的實(shí)驗發(fā)現,即使是評測不能批量下載,第一次只能在一個(gè)頁(yè)面下載所有文章,上圖配置下,只能下載第1頁(yè)文章,不過(guò)沒(méi)關(guān)系。反正只有3頁(yè),反正一頁(yè)一頁(yè)下載就完了可以下載文章的第二頁(yè),然后修改為3,
3.2 將下載的文章制作成chm文件
Doujohn的博客備份專(zhuān)家可以將下載的文章制作成文件,格式可以是pdf、chm、txt等。作者最初使用的是pdf格式,但發(fā)現在轉換的過(guò)程中會(huì )出現換行到電子書(shū)。嘗試了各種方法后都沒(méi)有解決,只能以chm格式保存。
3.3 將保存的chm文件制作成epub電子書(shū)
epubBuilder是口袋書(shū)園開(kāi)發(fā)的一款epub電子書(shū)制作神器,支持導入Txt、epub、html、chm、snb等源文件。
<p>打開(kāi)軟件,導入上面制作的chm??赐昴銜?huì )發(fā)現下面的文章會(huì )少了一個(gè)標題,沒(méi)關(guān)系,工具選項卡里有個(gè)“使用第一行作為目錄名”,在左邊選擇邊目錄欄批量丟失目錄(shift+左鍵點(diǎn)擊),點(diǎn)擊“使用第一行作為目錄名”,軟件會(huì )自動(dòng)將每個(gè)文章的第一行作為
抓取網(wǎng)頁(yè)生成電子書(shū)(通過(guò)Python和爬蟲(chóng),可以完成怎樣的小工具?|知乎)
網(wǎng)站優(yōu)化 ? 優(yōu)采云 發(fā)表了文章 ? 0 個(gè)評論 ? 193 次瀏覽 ? 2021-10-05 10:05
總有同學(xué)問(wèn),學(xué)了Python基礎之后,不知道自己可以做些什么來(lái)提高。今天我就用一個(gè)小例子來(lái)告訴大家通過(guò)Python和爬蟲(chóng)可以完成什么樣的小工具。
在知乎上,你一定關(guān)注過(guò)一些不錯的專(zhuān)欄(比如Crossin的編程課堂)。但如果有一天,你最喜歡的受訪(fǎng)者在網(wǎng)上被噴,你一怒之下刪帖停止更新,你就看不到好內容了。雖然這是小概率事件(沒(méi)有發(fā)生過(guò)),但你可以通過(guò)將關(guān)注的專(zhuān)欄導出到電子書(shū)來(lái)準備下雨天,這樣你就可以離線(xiàn)閱讀,而不必擔心不小心刪除帖子。
只需要工具和源碼的可以拉到文章底部獲取代碼。
【最終效果】
運行程序,輸入列的id,即網(wǎng)頁(yè)地址上的路徑:
之后程序會(huì )自動(dòng)抓取列中的文章,并根據發(fā)布時(shí)間合并導出為pdf文件。
【實(shí)現思路】
本方案主要分為三部分:
搶列文章地址列表
抓取每篇文章的詳細內容文章
導出 PDF
1. 獲取列表
在之前的文章
爬蟲(chóng)必備工具,掌握它就解決一半問(wèn)題
如何分析一個(gè)網(wǎng)頁(yè)上的請求在里面有描述。 根據方法,我們可以使用開(kāi)發(fā)者工具的Network功能找出欄目頁(yè)面的請求來(lái)獲取詳細列表:
觀(guān)察返回的結果,我們發(fā)現通過(guò)sum的值,可以獲取到下一個(gè)列表請求的地址(相當于頁(yè)面向下滾動(dòng)的觸發(fā)效果),判斷是否已經(jīng)獲取到所有的文章。
而中間就是我們需要的數據。因為可以拼寫(xiě),所以沒(méi)有保存在我們的代碼中。
使用 while 循環(huán)直到 文章 的所有總和都被捕獲并保存在一個(gè)文件中。
2. 搶 文章
有了文章的所有/,后面的爬取就很簡(jiǎn)單了。文章主要內容在標簽中。
需要花點(diǎn)功夫的是一些文字處理,比如原頁(yè)面的圖片效果,會(huì )添加標簽和屬性之類(lèi)的,我們要去掉才能正常顯示。
至此,所有的內容都已經(jīng)抓取完畢,可以在本地讀取了。
3. 導出 PDF
為了方便閱讀,我們使用 wkhtmltopdf+pdfkit 將這些 HTML 文件打包成 PDF。
wkhtmltopdf是一個(gè)將HTML轉PDF的工具,需要單獨安裝。詳情請參閱其官方網(wǎng)站。
pdfkit 是為此工具打包的 Python 庫,可以從 pip 安裝:
使用非常簡(jiǎn)單:
這樣就完成了整列的導出。
不僅是知乎的欄目,幾乎大部分的信息類(lèi)型都是網(wǎng)站,通過(guò)1.抓取列表2.抓取詳細內容采集數據兩步。所以這段代碼只要稍加修改就可以用于許多其他的網(wǎng)站。只是有些網(wǎng)站需要登錄后訪(fǎng)問(wèn),所以需要在headers中設置cookie信息。另外,不同網(wǎng)站的請求接口、參數、限制都不一樣,具體問(wèn)題還是要具體問(wèn)題具體分析。
這些爬蟲(chóng)的開(kāi)發(fā)技巧可以在我們的爬蟲(chóng)實(shí)戰課中學(xué)習。需要的請回復公眾號中的實(shí)際爬蟲(chóng)
【源碼下載】
獲取知乎的專(zhuān)欄下載器源碼,請在公眾號(Crossin的編程課堂)回復關(guān)鍵字知乎
除了代碼,還有本專(zhuān)欄打包好的PDF,歡迎閱讀分享。
更多視頻課程、問(wèn)答群等服務(wù),請按號碼內回復碼操作 查看全部
抓取網(wǎng)頁(yè)生成電子書(shū)(通過(guò)Python和爬蟲(chóng),可以完成怎樣的小工具?|知乎)
總有同學(xué)問(wèn),學(xué)了Python基礎之后,不知道自己可以做些什么來(lái)提高。今天我就用一個(gè)小例子來(lái)告訴大家通過(guò)Python和爬蟲(chóng)可以完成什么樣的小工具。
在知乎上,你一定關(guān)注過(guò)一些不錯的專(zhuān)欄(比如Crossin的編程課堂)。但如果有一天,你最喜歡的受訪(fǎng)者在網(wǎng)上被噴,你一怒之下刪帖停止更新,你就看不到好內容了。雖然這是小概率事件(沒(méi)有發(fā)生過(guò)),但你可以通過(guò)將關(guān)注的專(zhuān)欄導出到電子書(shū)來(lái)準備下雨天,這樣你就可以離線(xiàn)閱讀,而不必擔心不小心刪除帖子。
只需要工具和源碼的可以拉到文章底部獲取代碼。
【最終效果】
運行程序,輸入列的id,即網(wǎng)頁(yè)地址上的路徑:
之后程序會(huì )自動(dòng)抓取列中的文章,并根據發(fā)布時(shí)間合并導出為pdf文件。
【實(shí)現思路】
本方案主要分為三部分:
搶列文章地址列表
抓取每篇文章的詳細內容文章
導出 PDF
1. 獲取列表
在之前的文章
爬蟲(chóng)必備工具,掌握它就解決一半問(wèn)題
如何分析一個(gè)網(wǎng)頁(yè)上的請求在里面有描述。 根據方法,我們可以使用開(kāi)發(fā)者工具的Network功能找出欄目頁(yè)面的請求來(lái)獲取詳細列表:
觀(guān)察返回的結果,我們發(fā)現通過(guò)sum的值,可以獲取到下一個(gè)列表請求的地址(相當于頁(yè)面向下滾動(dòng)的觸發(fā)效果),判斷是否已經(jīng)獲取到所有的文章。
而中間就是我們需要的數據。因為可以拼寫(xiě),所以沒(méi)有保存在我們的代碼中。
使用 while 循環(huán)直到 文章 的所有總和都被捕獲并保存在一個(gè)文件中。
2. 搶 文章
有了文章的所有/,后面的爬取就很簡(jiǎn)單了。文章主要內容在標簽中。
需要花點(diǎn)功夫的是一些文字處理,比如原頁(yè)面的圖片效果,會(huì )添加標簽和屬性之類(lèi)的,我們要去掉才能正常顯示。
至此,所有的內容都已經(jīng)抓取完畢,可以在本地讀取了。
3. 導出 PDF
為了方便閱讀,我們使用 wkhtmltopdf+pdfkit 將這些 HTML 文件打包成 PDF。
wkhtmltopdf是一個(gè)將HTML轉PDF的工具,需要單獨安裝。詳情請參閱其官方網(wǎng)站。
pdfkit 是為此工具打包的 Python 庫,可以從 pip 安裝:
使用非常簡(jiǎn)單:
這樣就完成了整列的導出。
不僅是知乎的欄目,幾乎大部分的信息類(lèi)型都是網(wǎng)站,通過(guò)1.抓取列表2.抓取詳細內容采集數據兩步。所以這段代碼只要稍加修改就可以用于許多其他的網(wǎng)站。只是有些網(wǎng)站需要登錄后訪(fǎng)問(wèn),所以需要在headers中設置cookie信息。另外,不同網(wǎng)站的請求接口、參數、限制都不一樣,具體問(wèn)題還是要具體問(wèn)題具體分析。
這些爬蟲(chóng)的開(kāi)發(fā)技巧可以在我們的爬蟲(chóng)實(shí)戰課中學(xué)習。需要的請回復公眾號中的實(shí)際爬蟲(chóng)
【源碼下載】
獲取知乎的專(zhuān)欄下載器源碼,請在公眾號(Crossin的編程課堂)回復關(guān)鍵字知乎
除了代碼,還有本專(zhuān)欄打包好的PDF,歡迎閱讀分享。
更多視頻課程、問(wèn)答群等服務(wù),請按號碼內回復碼操作
抓取網(wǎng)頁(yè)生成電子書(shū)( 《修真小主播》使用Scrapy抓取電子書(shū)爬蟲(chóng)思路怎么抓取數據 )
網(wǎng)站優(yōu)化 ? 優(yōu)采云 發(fā)表了文章 ? 0 個(gè)評論 ? 130 次瀏覽 ? 2021-10-04 17:20
《修真小主播》使用Scrapy抓取電子書(shū)爬蟲(chóng)思路怎么抓取數據
)
使用 Scrapy 抓取電子書(shū)
爬蟲(chóng)的想法
如何抓取數據,首先我們要看看從哪里獲取,打開(kāi)“修真小主播”頁(yè)面,如下:
有一個(gè)目錄選項卡。單擊此選項卡可查看目錄。使用瀏覽器的元素查看工具,我們可以定位到各章節的目錄和相關(guān)信息。根據這些信息,我們可以抓取到特定頁(yè)面:
獲取章節地址
現在我們打開(kāi)xzxzb.py文件,就是我們剛剛創(chuàng )建的爬蟲(chóng):
# -*- coding: utf-8 -*-import scrapyclass XzxzbSpider(scrapy.Spider): name = 'xzxzb' allowed_domains = ['qidian.com'] start_urls = ['http://qidian.com/'] def parse(self, response): pass
start_urls 是目錄地址,爬蟲(chóng)會(huì )自動(dòng)爬取這個(gè)地址,然后在后面的解析中處理結果?,F在我們來(lái)編寫(xiě)代碼處理目錄數據,首先爬取小說(shuō)首頁(yè)獲取目錄列表:
def parse(self, response): pages = response.xpath('//div[@id="j-catalogWrap"]//ul[@]/li') for page in pages: url = page.xpath('./child::a/attribute::href').extract() print url pass
獲取網(wǎng)頁(yè)中的 DOM 數據有兩種方式,一種是使用 CSS 選擇器,另一種是使用 XML xPath 查詢(xún)。
這里我們使用 xPath。請自行研究相關(guān)知識??瓷厦娴拇a。首先我們通過(guò)ID獲取目錄框,獲取類(lèi)cf來(lái)獲取目錄列表:
pages = response.xpath('//div[@id="j-catalogWrap"]//ul[@]/li')
接下來(lái)遍歷子節點(diǎn),查詢(xún)li標簽中a子節點(diǎn)的href屬性,最后打印出來(lái):
for page in pages:<br /> url = page.xpath('./child::a/attribute::href').extract()<br /> print url
這樣,可以說(shuō)是爬取章節路徑的小爬蟲(chóng)寫(xiě)好了。使用以下命令運行xzxzb爬蟲(chóng)查看結果:
scrapy crawl xzxzb
這時(shí)候,我們的程序可能會(huì )出現以下錯誤:
…<br />ImportError: No module named win32api<br />…
只需運行以下語(yǔ)句:
pip install pypiwin32
屏幕輸出如下:
> ...> [u'//read.qidian.com/chapter/MuRzJqCY6MyoLoerY3WDhg2/wrrduN6auIlOBDFlr9quQA2'][u'//read.qidian.com/chapter/MuRzJqCY6MyoLoerY3WDhg2/Jh-J5usgyW62uJcMpdsVgA2'][u'//read.qidian.com/chapter/MuRzJqCY6MyoLoerY3WDhg2/5YXHdBvg1ImaGfXRMrUjdw2'][u'//read.qidian.com/chapter/MuRzJqCY6MyoLoerY3WDhg2/fw5EBeKat-76ItTi_ILQ7A2'][u'//read.qidian.com/chapter/MuRzJqCY6MyoLoerY3WDhg2/KsFh5VutI6PwrjbX3WA1AA2'][u'//read.qidian.com/chapter/MuRzJqCY6MyoLoerY3WDhg2/-mpKJ01gPp1p4rPq4Fd4KQ2'][u'//read.qidian.com/chapter/MuRzJqCY6MyoLoerY3WDhg2/MlZSeYOQxSPM5j8_3RRvhw2'][u'//read.qidian.com/chapter/MuRzJqCY6MyoLoerY3WDhg2/5TXZqGvLi-3M5j8_3RRvhw2'][u'//read.qidian.com/chapter/MuRzJqCY6MyoLoerY3WDhg2/sysD-JPiugv4p8iEw--PPw2'][u'//read.qidian.com/chapter/MuRzJqCY6MyoLoerY3WDhg2/xGckZ01j64-aGfXRMrUjdw2'][u'//read.qidian.com/chapter/MuRzJqCY6MyoLoerY3WDhg2/72lHOJcgmedOBDFlr9quQA2'][u'//read.qidian.com/chapter/MuRzJqCY6MyoLoerY3WDhg2/cZkHZEYnPl22uJcMpdsVgA2'][u'//read.qidian.com/chapter/MuRzJqCY6MyoLoerY3WDhg2/vkNh45O3JsRMs5iq0oQwLQ2'][u'//read.qidian.com/chapter/MuRzJqCY6MyoLoerY3WDhg2/ge4m8RjJyPH6ItTi_ILQ7A2'][u'//read.qidian.com/chapter/MuRzJqCY6MyoLoerY3WDhg2/Y33PuxrKT4dp4rPq4Fd4KQ2'][u'//read.qidian.com/chapter/MuRzJqCY6MyoLoerY3WDhg2/MDQznkrkiyXwrjbX3WA1AA2'][u'//read.qidian.com/chapter/MuRzJqCY6MyoLoerY3WDhg2/A2r-YTzWCYj6ItTi_ILQ7A2'][u'//read.qidian.com/chapter/MuRzJqCY6MyoLoerY3WDhg2/Ng9CuONRKei2uJcMpdsVgA2'][u'//read.qidian.com/chapter/MuRzJqCY6MyoLoerY3WDhg2/Q_AxWAge14pMs5iq0oQwLQ2'][u'//read.qidian.com/chapter/MuRzJqCY6MyoLoerY3WDhg2/ZJshvAu8TVVp4rPq4Fd4KQ2'][u'//read.qidian.com/chapter/MuRzJqCY6MyoLoerY3WDhg2/hYD2P4c5UB2aGfXRMrUjdw2'][u'//read.qidian.com/chapter/MuRzJqCY6MyoLoerY3WDhg2/muxiWf_jpqTgn4SMoDUcDQ2'][u'//read.qidian.com/chapter/MuRzJqCY6MyoLoerY3WDhg2/OQQ5jbADJjVp4rPq4Fd4KQ2']> ...
爬取章節路徑的小爬蟲(chóng)是寫(xiě)出來(lái)的,但是我們的目的不止這些,我們會(huì )用這些地址來(lái)爬取內容:
章節頁(yè)面分析
接下來(lái)我們分析章節頁(yè)面。從章節頁(yè)面我們需要獲取標題和內容。
如果解析器方法用于章節信息爬取,那么我們可以寫(xiě)一個(gè)爬取每個(gè)章節內容的方法,比如:parser_chapter,先看章節頁(yè)面的具體情況:
可以看到,章節的全部?jì)热菰陬?lèi)名main-text-wrap的div標簽中,標題是類(lèi)名j_chapterName的h3標簽,具體內容是類(lèi)名的div標簽讀取內容 j_readContent。
嘗試打印出這些內容:
# -*- coding: utf-8 -*-import scrapyclass XzxzbSpider(scrapy.Spider): name = 'xzxzb' allowed_domains = ['qidian.com'] start_urls = ['https://book.qidian.com/info/1010780117/'] def parse(self, response): pages = response.xpath('//div[@id="j-catalogWrap"]//ul[@]/li') for page in pages: url = page.xpath('./child::a/attribute::href').extract_first() # yield scrapy.Request('https:' + url, callback=self.parse_chapter) yield response.follow(url, callback=self.parse_chapter) pass def parse_chapter(self, response): title = response.xpath('//div[@]//h3[@]/text()').extract_first().strip() content = response.xpath('//div[@]//div[@]').extract_first().strip() print title # print content pass
上一步我們得到了一個(gè)章節地址,它是輸出內容的相對路徑,所以我們使用yield response.follow(url, callback=self.parse_chapter),第二個(gè)參數是處理章節的回調函數頁(yè)面,爬到章節頁(yè)面后,我們解析頁(yè)面并將標題保存到文件中。
next_page = response.urljoin(url)<br />yield scrapy.Request(next_page, callback=self.parse_chapter)
與使用 response.follow 不同,scrapy.Request 需要通過(guò)相對路徑構造絕對路徑。Response.follow 可以直接使用相對路徑,所以不需要調用 urljoin 方法。
注意 response.follow 直接返回一個(gè)Request實(shí)例,可以通過(guò)yield直接返回。
獲取數據后,進(jìn)行存儲。由于我們想要的是一個(gè)html頁(yè)面,我們可以通過(guò)標題來(lái)存儲它。代碼如下:
def parse_chapter(self, response): title = response.xpath('//div[@]//h3[@]/text()').extract_first().strip() content = response.xpath('//div[@]//div[@]').extract_first().strip() # print title # print content filename = './down/%s.html' % (title) with open(filename, 'wb') as f: f.write(content.encode('utf-8')) pass
至此,我們已經(jīng)成功抓取了我們的數據,但是還不能直接使用,需要進(jìn)行排序和優(yōu)化。
數據整理
首先,我們爬下來(lái)的章節頁(yè)面的排序不是很好。如果人工分揀花費太多時(shí)間和精力;另外,章節內容收錄很多額外的東西,閱讀體驗不好,需要優(yōu)化內容布局和可讀性。
我們先對章節進(jìn)行排序,因為目錄中的章節列表是按順序排列的,所以我們只需要在下載頁(yè)面名稱(chēng)中加上一個(gè)序號即可。
但是保存網(wǎng)頁(yè)的代碼是回調函數,只有在處理目錄時(shí)才能確定順序?;卣{函數如何知道訂單?因此,我們需要告訴回調函數處理章節的序號,并且需要向回調函數傳遞參數。修改后的代碼如下所示:
def parse(self, response): pages = response.xpath('//div[@id="j-catalogWrap"]//ul[@]/li') for page in pages: url = page.xpath('./child::a/attribute::href').extract_first() idx = page.xpath('./attribute::data-rid').extract_first() # yield scrapy.Request('https:' + url, callback=self.parse_chapter) req = response.follow(url, callback=self.parse_chapter) req.meta['idx'] = idx yield req pass def parse_chapter(self, response): idx = response.meta['idx'] title = response.xpath('//div[@]//h3[@]/text()').extract_first().strip() content = response.xpath('//div[@]//div[@]').extract_first().strip() # print title # print content filename = './down/%s_%s.html' % (idx, title) cnt = '
%s %s'% (title, content) with open(filename,'wb') as f: f.write(cnt.encode('utf-8')) pass
使用 Sigil 制作電子書(shū)
加載 html 文件
要制作ePub電子書(shū),我們首先通過(guò)Sigil將我們抓取到的文件加載到程序中,在添加文件對話(huà)框中,我們選擇所有文件:
制作目錄
當文件中存在HTML的h標簽時(shí),點(diǎn)擊Generate Catalog按鈕自動(dòng)生成目錄。我們已經(jīng)在之前的數據捕獲中自動(dòng)添加了 h1 標簽:
做封面
封面本質(zhì)上是HTML,可以從頁(yè)面中編輯或抓取,所以就交給你自己實(shí)現吧。
*免責聲明:本文整理于網(wǎng)絡(luò ),版權歸原作者所有。如來(lái)源信息有誤或侵權,請聯(lián)系我們進(jìn)行刪除或授權。
我覺(jué)得不錯,點(diǎn)擊“我在看”轉發(fā)
查看全部
抓取網(wǎng)頁(yè)生成電子書(shū)(
《修真小主播》使用Scrapy抓取電子書(shū)爬蟲(chóng)思路怎么抓取數據
)

使用 Scrapy 抓取電子書(shū)
爬蟲(chóng)的想法
如何抓取數據,首先我們要看看從哪里獲取,打開(kāi)“修真小主播”頁(yè)面,如下:

有一個(gè)目錄選項卡。單擊此選項卡可查看目錄。使用瀏覽器的元素查看工具,我們可以定位到各章節的目錄和相關(guān)信息。根據這些信息,我們可以抓取到特定頁(yè)面:

獲取章節地址
現在我們打開(kāi)xzxzb.py文件,就是我們剛剛創(chuàng )建的爬蟲(chóng):
# -*- coding: utf-8 -*-import scrapyclass XzxzbSpider(scrapy.Spider): name = 'xzxzb' allowed_domains = ['qidian.com'] start_urls = ['http://qidian.com/'] def parse(self, response): pass
start_urls 是目錄地址,爬蟲(chóng)會(huì )自動(dòng)爬取這個(gè)地址,然后在后面的解析中處理結果?,F在我們來(lái)編寫(xiě)代碼處理目錄數據,首先爬取小說(shuō)首頁(yè)獲取目錄列表:
def parse(self, response): pages = response.xpath('//div[@id="j-catalogWrap"]//ul[@]/li') for page in pages: url = page.xpath('./child::a/attribute::href').extract() print url pass
獲取網(wǎng)頁(yè)中的 DOM 數據有兩種方式,一種是使用 CSS 選擇器,另一種是使用 XML xPath 查詢(xún)。
這里我們使用 xPath。請自行研究相關(guān)知識??瓷厦娴拇a。首先我們通過(guò)ID獲取目錄框,獲取類(lèi)cf來(lái)獲取目錄列表:
pages = response.xpath('//div[@id="j-catalogWrap"]//ul[@]/li')
接下來(lái)遍歷子節點(diǎn),查詢(xún)li標簽中a子節點(diǎn)的href屬性,最后打印出來(lái):
for page in pages:<br /> url = page.xpath('./child::a/attribute::href').extract()<br /> print url
這樣,可以說(shuō)是爬取章節路徑的小爬蟲(chóng)寫(xiě)好了。使用以下命令運行xzxzb爬蟲(chóng)查看結果:
scrapy crawl xzxzb
這時(shí)候,我們的程序可能會(huì )出現以下錯誤:
…<br />ImportError: No module named win32api<br />…
只需運行以下語(yǔ)句:
pip install pypiwin32
屏幕輸出如下:
> ...> [u'//read.qidian.com/chapter/MuRzJqCY6MyoLoerY3WDhg2/wrrduN6auIlOBDFlr9quQA2'][u'//read.qidian.com/chapter/MuRzJqCY6MyoLoerY3WDhg2/Jh-J5usgyW62uJcMpdsVgA2'][u'//read.qidian.com/chapter/MuRzJqCY6MyoLoerY3WDhg2/5YXHdBvg1ImaGfXRMrUjdw2'][u'//read.qidian.com/chapter/MuRzJqCY6MyoLoerY3WDhg2/fw5EBeKat-76ItTi_ILQ7A2'][u'//read.qidian.com/chapter/MuRzJqCY6MyoLoerY3WDhg2/KsFh5VutI6PwrjbX3WA1AA2'][u'//read.qidian.com/chapter/MuRzJqCY6MyoLoerY3WDhg2/-mpKJ01gPp1p4rPq4Fd4KQ2'][u'//read.qidian.com/chapter/MuRzJqCY6MyoLoerY3WDhg2/MlZSeYOQxSPM5j8_3RRvhw2'][u'//read.qidian.com/chapter/MuRzJqCY6MyoLoerY3WDhg2/5TXZqGvLi-3M5j8_3RRvhw2'][u'//read.qidian.com/chapter/MuRzJqCY6MyoLoerY3WDhg2/sysD-JPiugv4p8iEw--PPw2'][u'//read.qidian.com/chapter/MuRzJqCY6MyoLoerY3WDhg2/xGckZ01j64-aGfXRMrUjdw2'][u'//read.qidian.com/chapter/MuRzJqCY6MyoLoerY3WDhg2/72lHOJcgmedOBDFlr9quQA2'][u'//read.qidian.com/chapter/MuRzJqCY6MyoLoerY3WDhg2/cZkHZEYnPl22uJcMpdsVgA2'][u'//read.qidian.com/chapter/MuRzJqCY6MyoLoerY3WDhg2/vkNh45O3JsRMs5iq0oQwLQ2'][u'//read.qidian.com/chapter/MuRzJqCY6MyoLoerY3WDhg2/ge4m8RjJyPH6ItTi_ILQ7A2'][u'//read.qidian.com/chapter/MuRzJqCY6MyoLoerY3WDhg2/Y33PuxrKT4dp4rPq4Fd4KQ2'][u'//read.qidian.com/chapter/MuRzJqCY6MyoLoerY3WDhg2/MDQznkrkiyXwrjbX3WA1AA2'][u'//read.qidian.com/chapter/MuRzJqCY6MyoLoerY3WDhg2/A2r-YTzWCYj6ItTi_ILQ7A2'][u'//read.qidian.com/chapter/MuRzJqCY6MyoLoerY3WDhg2/Ng9CuONRKei2uJcMpdsVgA2'][u'//read.qidian.com/chapter/MuRzJqCY6MyoLoerY3WDhg2/Q_AxWAge14pMs5iq0oQwLQ2'][u'//read.qidian.com/chapter/MuRzJqCY6MyoLoerY3WDhg2/ZJshvAu8TVVp4rPq4Fd4KQ2'][u'//read.qidian.com/chapter/MuRzJqCY6MyoLoerY3WDhg2/hYD2P4c5UB2aGfXRMrUjdw2'][u'//read.qidian.com/chapter/MuRzJqCY6MyoLoerY3WDhg2/muxiWf_jpqTgn4SMoDUcDQ2'][u'//read.qidian.com/chapter/MuRzJqCY6MyoLoerY3WDhg2/OQQ5jbADJjVp4rPq4Fd4KQ2']> ...
爬取章節路徑的小爬蟲(chóng)是寫(xiě)出來(lái)的,但是我們的目的不止這些,我們會(huì )用這些地址來(lái)爬取內容:
章節頁(yè)面分析
接下來(lái)我們分析章節頁(yè)面。從章節頁(yè)面我們需要獲取標題和內容。
如果解析器方法用于章節信息爬取,那么我們可以寫(xiě)一個(gè)爬取每個(gè)章節內容的方法,比如:parser_chapter,先看章節頁(yè)面的具體情況:

可以看到,章節的全部?jì)热菰陬?lèi)名main-text-wrap的div標簽中,標題是類(lèi)名j_chapterName的h3標簽,具體內容是類(lèi)名的div標簽讀取內容 j_readContent。
嘗試打印出這些內容:
# -*- coding: utf-8 -*-import scrapyclass XzxzbSpider(scrapy.Spider): name = 'xzxzb' allowed_domains = ['qidian.com'] start_urls = ['https://book.qidian.com/info/1010780117/'] def parse(self, response): pages = response.xpath('//div[@id="j-catalogWrap"]//ul[@]/li') for page in pages: url = page.xpath('./child::a/attribute::href').extract_first() # yield scrapy.Request('https:' + url, callback=self.parse_chapter) yield response.follow(url, callback=self.parse_chapter) pass def parse_chapter(self, response): title = response.xpath('//div[@]//h3[@]/text()').extract_first().strip() content = response.xpath('//div[@]//div[@]').extract_first().strip() print title # print content pass
上一步我們得到了一個(gè)章節地址,它是輸出內容的相對路徑,所以我們使用yield response.follow(url, callback=self.parse_chapter),第二個(gè)參數是處理章節的回調函數頁(yè)面,爬到章節頁(yè)面后,我們解析頁(yè)面并將標題保存到文件中。
next_page = response.urljoin(url)<br />yield scrapy.Request(next_page, callback=self.parse_chapter)
與使用 response.follow 不同,scrapy.Request 需要通過(guò)相對路徑構造絕對路徑。Response.follow 可以直接使用相對路徑,所以不需要調用 urljoin 方法。
注意 response.follow 直接返回一個(gè)Request實(shí)例,可以通過(guò)yield直接返回。
獲取數據后,進(jìn)行存儲。由于我們想要的是一個(gè)html頁(yè)面,我們可以通過(guò)標題來(lái)存儲它。代碼如下:
def parse_chapter(self, response): title = response.xpath('//div[@]//h3[@]/text()').extract_first().strip() content = response.xpath('//div[@]//div[@]').extract_first().strip() # print title # print content filename = './down/%s.html' % (title) with open(filename, 'wb') as f: f.write(content.encode('utf-8')) pass
至此,我們已經(jīng)成功抓取了我們的數據,但是還不能直接使用,需要進(jìn)行排序和優(yōu)化。
數據整理
首先,我們爬下來(lái)的章節頁(yè)面的排序不是很好。如果人工分揀花費太多時(shí)間和精力;另外,章節內容收錄很多額外的東西,閱讀體驗不好,需要優(yōu)化內容布局和可讀性。
我們先對章節進(jìn)行排序,因為目錄中的章節列表是按順序排列的,所以我們只需要在下載頁(yè)面名稱(chēng)中加上一個(gè)序號即可。
但是保存網(wǎng)頁(yè)的代碼是回調函數,只有在處理目錄時(shí)才能確定順序?;卣{函數如何知道訂單?因此,我們需要告訴回調函數處理章節的序號,并且需要向回調函數傳遞參數。修改后的代碼如下所示:
def parse(self, response): pages = response.xpath('//div[@id="j-catalogWrap"]//ul[@]/li') for page in pages: url = page.xpath('./child::a/attribute::href').extract_first() idx = page.xpath('./attribute::data-rid').extract_first() # yield scrapy.Request('https:' + url, callback=self.parse_chapter) req = response.follow(url, callback=self.parse_chapter) req.meta['idx'] = idx yield req pass def parse_chapter(self, response): idx = response.meta['idx'] title = response.xpath('//div[@]//h3[@]/text()').extract_first().strip() content = response.xpath('//div[@]//div[@]').extract_first().strip() # print title # print content filename = './down/%s_%s.html' % (idx, title) cnt = '
%s %s'% (title, content) with open(filename,'wb') as f: f.write(cnt.encode('utf-8')) pass
使用 Sigil 制作電子書(shū)
加載 html 文件
要制作ePub電子書(shū),我們首先通過(guò)Sigil將我們抓取到的文件加載到程序中,在添加文件對話(huà)框中,我們選擇所有文件:

制作目錄
當文件中存在HTML的h標簽時(shí),點(diǎn)擊Generate Catalog按鈕自動(dòng)生成目錄。我們已經(jīng)在之前的數據捕獲中自動(dòng)添加了 h1 標簽:

做封面

封面本質(zhì)上是HTML,可以從頁(yè)面中編輯或抓取,所以就交給你自己實(shí)現吧。

*免責聲明:本文整理于網(wǎng)絡(luò ),版權歸原作者所有。如來(lái)源信息有誤或侵權,請聯(lián)系我們進(jìn)行刪除或授權。

我覺(jué)得不錯,點(diǎn)擊“我在看”轉發(fā)
抓取網(wǎng)頁(yè)生成電子書(shū)(Windows,OSX及Linux操作系統格式的在線(xiàn)資料格式)
網(wǎng)站優(yōu)化 ? 優(yōu)采云 發(fā)表了文章 ? 0 個(gè)評論 ? 132 次瀏覽 ? 2021-10-16 13:30
自從我買(mǎi)了kindle,我就一直在想如何最大限度地發(fā)揮它的功效。雖然可供購買(mǎi)的書(shū)籍很多,網(wǎng)上也有很多免費的電子書(shū),但還是有很多有趣的內容以網(wǎng)頁(yè)的形式出現。例如,O'Reilly Atlas 提供了很多電子書(shū),但只提供免費在線(xiàn)閱讀;此外,許多材料或文件只是網(wǎng)絡(luò )形式。所以我希望將這些網(wǎng)上資料以某種方式轉換成epub或者mobi格式,以便在kindle上閱讀。本文文章介紹了如何使用calibre并編寫(xiě)少量代碼來(lái)實(shí)現這一目標。
Calibre 簡(jiǎn)介
Calibre 是一款免費的電子書(shū)管理工具,兼容 Windows、OS X 和 Linux。令人欣慰的是,除了GUI,calibre 還提供了很多命令行工具。ebook-convert 命令可以基于用戶(hù)編寫(xiě)的食譜。該文件(實(shí)際上是python代碼)抓取指定頁(yè)面的內容,生成mobi等格式的電子書(shū)。爬取行為可以通過(guò)編寫(xiě)recipe來(lái)定制,以適應不同的網(wǎng)頁(yè)結構。
安裝口徑
Calibre的下載地址是,您可以根據自己的操作系統下載相應的安裝程序。
如果是Linux操作系統,也可以通過(guò)軟件倉庫安裝:
Archlinux:
pacman -S calibre<br />
Debian/Ubuntu:
apt-get install calibre<br />
紅帽/Fedora/CentOS:
yum -y install calibre<br />
請注意,如果您使用 OSX,則需要單獨安裝命令行工具。
抓取網(wǎng)頁(yè)以生成電子書(shū)
下面以Git Pocket Guide為例,說(shuō)明如何通過(guò)calibre從網(wǎng)頁(yè)生成電子書(shū)。
找到索引頁(yè)
要爬取整本書(shū),首先要找到索引頁(yè)。這個(gè)頁(yè)面一般是目錄,也就是目錄頁(yè)面,其中每個(gè)目錄鏈接都連接到相應的內容頁(yè)面。在生成電子書(shū)時(shí),索引頁(yè)會(huì )指導抓取哪些頁(yè)面以及內容組織的順序。在這個(gè)例子中,索引頁(yè)是。
寫(xiě)食譜
食譜是一個(gè)帶有食譜擴展名的腳本。內容其實(shí)是一段python代碼,定義了calibre爬取頁(yè)面的范圍和行為。以下是爬取 Git Pocket Guide 的秘籍:
from calibre.web.feeds.recipes import BasicNewsRecipe<br /><br />class Git_Pocket_Guide(BasicNewsRecipe):<br /><br /> title = 'Git Pocket Guide'<br /> description = ''<br /> cover_url = 'http://akamaicovers.oreilly.co ... %3Bbr /><br /> url_prefix = 'http://chimera.labs.oreilly.co ... %3Bbr /> no_stylesheets = True<br /> keep_only_tags = [{ 'class': 'chapter' }]<br /><br /> def get_title(self, link):<br /> return link.contents[0].strip()<br /><br /> def parse_index(self):<br /> soup = self.index_to_soup(self.url_prefix + 'index.html')<br /><br /> div = soup.find('div', { 'class': 'toc' })<br /><br /> articles = []<br /> for link in div.findAll('a'):<br /> if '#' in link['href']:<br /> continue<br /><br /> if not 'ch' in link['href']:<br /> continue<br /><br /> til = self.get_title(link)<br /> url = self.url_prefix + link['href']<br /> a = { 'title': til, 'url': url }<br /><br /> articles.append(a)<br /><br /> ans = [('Git_Pocket_Guide', articles)]<br /><br /> return ans<br />
下面解釋了代碼的不同部分。
整體結構
一般來(lái)說(shuō),一個(gè)recipe是一個(gè)python類(lèi),但是這個(gè)類(lèi)必須繼承calibre.web.feeds.recipes.BasicNewsRecipe。
解析索引
整個(gè)recipe的核心方法是parse_index,這也是recipes必須實(shí)現的唯一方法。該方法的目標是通過(guò)分析索引頁(yè)的內容,返回一個(gè)稍微復雜一些的數據結構(稍后介紹)。這個(gè)數據結構定義了整個(gè)電子書(shū)的內容和內容組織順序。
整體屬性設置
在類(lèi)的開(kāi)頭,定義了一些全局屬性:
title = 'Git Pocket Guide'<br />description = ''<br />cover_url = 'http://akamaicovers.oreilly.co ... %3Bbr /><br />url_prefix = 'http://chimera.labs.oreilly.co ... %3Bbr />no_stylesheets = True<br />keep_only_tags = [{ 'class': 'chapter' }]<br />
parse_index 返回值
下面通過(guò)分析索引頁(yè)來(lái)描述parse_index需要返回的數據結構。
整體的返回數據結構是一個(gè)列表,其中每個(gè)元素是一個(gè)元組,一個(gè)元組代表一個(gè)卷。在這個(gè)例子中,只有一個(gè)卷,所以列表中只有一個(gè)元組。
每個(gè)元組有兩個(gè)元素,第一個(gè)元素是卷名,第二個(gè)元素是一個(gè)列表,列表中的每個(gè)元素都是一個(gè)映射,表示一個(gè)章節(chapter),映射中有兩個(gè)元素: title 和 url , Title是章節的標題,url是章節所在的內容頁(yè)面的url。
Calibre 會(huì )根據parse_index 返回的結果對整本書(shū)進(jìn)行爬取和組織,并會(huì )自行爬取處理內容內外的圖片。
整個(gè)parse_index使用soup解析索引頁(yè),生成上述數據結構。
更多的
以上是最基本的食譜。如果想詳細了解如何使用,可以參考API文檔。
生成手機
寫(xiě)好菜譜后,可以在命令行中使用以下命令生成電子書(shū):
ebook-convert Git_Pocket_Guide.recipe Git_Pocket_Guide.mobi<br />
您可以生成mobi 格式的電子書(shū)。ebook-convert 會(huì )爬取相關(guān)內容,根據配方代碼自行組織結構。
最終效果
下面是在kindle上看到的效果。
內容
內容一
內容二
帶圖片的頁(yè)面
實(shí)際效果
我的食譜倉庫
我在github上做了一個(gè)kindle-open-books,里面有一些菜譜,是我自己寫(xiě)的,其他同學(xué)貢獻的。歡迎任何人提供食譜。 查看全部
抓取網(wǎng)頁(yè)生成電子書(shū)(Windows,OSX及Linux操作系統格式的在線(xiàn)資料格式)
自從我買(mǎi)了kindle,我就一直在想如何最大限度地發(fā)揮它的功效。雖然可供購買(mǎi)的書(shū)籍很多,網(wǎng)上也有很多免費的電子書(shū),但還是有很多有趣的內容以網(wǎng)頁(yè)的形式出現。例如,O'Reilly Atlas 提供了很多電子書(shū),但只提供免費在線(xiàn)閱讀;此外,許多材料或文件只是網(wǎng)絡(luò )形式。所以我希望將這些網(wǎng)上資料以某種方式轉換成epub或者mobi格式,以便在kindle上閱讀。本文文章介紹了如何使用calibre并編寫(xiě)少量代碼來(lái)實(shí)現這一目標。
Calibre 簡(jiǎn)介
Calibre 是一款免費的電子書(shū)管理工具,兼容 Windows、OS X 和 Linux。令人欣慰的是,除了GUI,calibre 還提供了很多命令行工具。ebook-convert 命令可以基于用戶(hù)編寫(xiě)的食譜。該文件(實(shí)際上是python代碼)抓取指定頁(yè)面的內容,生成mobi等格式的電子書(shū)。爬取行為可以通過(guò)編寫(xiě)recipe來(lái)定制,以適應不同的網(wǎng)頁(yè)結構。
安裝口徑
Calibre的下載地址是,您可以根據自己的操作系統下載相應的安裝程序。
如果是Linux操作系統,也可以通過(guò)軟件倉庫安裝:
Archlinux:
pacman -S calibre<br />
Debian/Ubuntu:
apt-get install calibre<br />
紅帽/Fedora/CentOS:
yum -y install calibre<br />
請注意,如果您使用 OSX,則需要單獨安裝命令行工具。
抓取網(wǎng)頁(yè)以生成電子書(shū)
下面以Git Pocket Guide為例,說(shuō)明如何通過(guò)calibre從網(wǎng)頁(yè)生成電子書(shū)。
找到索引頁(yè)
要爬取整本書(shū),首先要找到索引頁(yè)。這個(gè)頁(yè)面一般是目錄,也就是目錄頁(yè)面,其中每個(gè)目錄鏈接都連接到相應的內容頁(yè)面。在生成電子書(shū)時(shí),索引頁(yè)會(huì )指導抓取哪些頁(yè)面以及內容組織的順序。在這個(gè)例子中,索引頁(yè)是。
寫(xiě)食譜
食譜是一個(gè)帶有食譜擴展名的腳本。內容其實(shí)是一段python代碼,定義了calibre爬取頁(yè)面的范圍和行為。以下是爬取 Git Pocket Guide 的秘籍:
from calibre.web.feeds.recipes import BasicNewsRecipe<br /><br />class Git_Pocket_Guide(BasicNewsRecipe):<br /><br /> title = 'Git Pocket Guide'<br /> description = ''<br /> cover_url = 'http://akamaicovers.oreilly.co ... %3Bbr /><br /> url_prefix = 'http://chimera.labs.oreilly.co ... %3Bbr /> no_stylesheets = True<br /> keep_only_tags = [{ 'class': 'chapter' }]<br /><br /> def get_title(self, link):<br /> return link.contents[0].strip()<br /><br /> def parse_index(self):<br /> soup = self.index_to_soup(self.url_prefix + 'index.html')<br /><br /> div = soup.find('div', { 'class': 'toc' })<br /><br /> articles = []<br /> for link in div.findAll('a'):<br /> if '#' in link['href']:<br /> continue<br /><br /> if not 'ch' in link['href']:<br /> continue<br /><br /> til = self.get_title(link)<br /> url = self.url_prefix + link['href']<br /> a = { 'title': til, 'url': url }<br /><br /> articles.append(a)<br /><br /> ans = [('Git_Pocket_Guide', articles)]<br /><br /> return ans<br />
下面解釋了代碼的不同部分。
整體結構
一般來(lái)說(shuō),一個(gè)recipe是一個(gè)python類(lèi),但是這個(gè)類(lèi)必須繼承calibre.web.feeds.recipes.BasicNewsRecipe。
解析索引
整個(gè)recipe的核心方法是parse_index,這也是recipes必須實(shí)現的唯一方法。該方法的目標是通過(guò)分析索引頁(yè)的內容,返回一個(gè)稍微復雜一些的數據結構(稍后介紹)。這個(gè)數據結構定義了整個(gè)電子書(shū)的內容和內容組織順序。
整體屬性設置
在類(lèi)的開(kāi)頭,定義了一些全局屬性:
title = 'Git Pocket Guide'<br />description = ''<br />cover_url = 'http://akamaicovers.oreilly.co ... %3Bbr /><br />url_prefix = 'http://chimera.labs.oreilly.co ... %3Bbr />no_stylesheets = True<br />keep_only_tags = [{ 'class': 'chapter' }]<br />
parse_index 返回值
下面通過(guò)分析索引頁(yè)來(lái)描述parse_index需要返回的數據結構。
整體的返回數據結構是一個(gè)列表,其中每個(gè)元素是一個(gè)元組,一個(gè)元組代表一個(gè)卷。在這個(gè)例子中,只有一個(gè)卷,所以列表中只有一個(gè)元組。
每個(gè)元組有兩個(gè)元素,第一個(gè)元素是卷名,第二個(gè)元素是一個(gè)列表,列表中的每個(gè)元素都是一個(gè)映射,表示一個(gè)章節(chapter),映射中有兩個(gè)元素: title 和 url , Title是章節的標題,url是章節所在的內容頁(yè)面的url。
Calibre 會(huì )根據parse_index 返回的結果對整本書(shū)進(jìn)行爬取和組織,并會(huì )自行爬取處理內容內外的圖片。
整個(gè)parse_index使用soup解析索引頁(yè),生成上述數據結構。
更多的
以上是最基本的食譜。如果想詳細了解如何使用,可以參考API文檔。
生成手機
寫(xiě)好菜譜后,可以在命令行中使用以下命令生成電子書(shū):
ebook-convert Git_Pocket_Guide.recipe Git_Pocket_Guide.mobi<br />
您可以生成mobi 格式的電子書(shū)。ebook-convert 會(huì )爬取相關(guān)內容,根據配方代碼自行組織結構。
最終效果
下面是在kindle上看到的效果。
內容
內容一
內容二
帶圖片的頁(yè)面
實(shí)際效果
我的食譜倉庫
我在github上做了一個(gè)kindle-open-books,里面有一些菜譜,是我自己寫(xiě)的,其他同學(xué)貢獻的。歡迎任何人提供食譜。
抓取網(wǎng)頁(yè)生成電子書(shū)(只要能顯示在網(wǎng)頁(yè)上的東西都可以抓下來(lái)。。 )
網(wǎng)站優(yōu)化 ? 優(yōu)采云 發(fā)表了文章 ? 0 個(gè)評論 ? 143 次瀏覽 ? 2021-10-15 11:08
)
最近,我迷上了德州撲克。我的同學(xué)H是這次活動(dòng)的領(lǐng)隊(tuifei)。我們同學(xué)不僅PK了,還給我發(fā)了截圖,WC,你也買(mǎi)了書(shū),你也進(jìn)了群,你快上天堂了。. .
晚上11點(diǎn)30分,我用我的房門(mén)打開(kāi)他房間的門(mén),他果然在床上。
H,有資源嗎?
不是,X寶上貼的和我下載的一樣,只有44頁(yè),前十頁(yè)是廣告。
哎,無(wú)良商家,退款?
不,只有1.00元,她又給了我一本書(shū)。
來(lái)看看澳門(mén)賭場(chǎng)上線(xiàn)的感覺(jué)吧。
回去jd上找,電子版18元,紙質(zhì)版什么的。沒(méi)有微信閱讀。
第二天,我在實(shí)驗室遇到了H。還有其他資源嗎?
恩,網(wǎng)易閱讀上有,我付費了。
第一次聽(tīng)說(shuō)網(wǎng)易讀書(shū),周末在他的實(shí)驗室度過(guò)。
神奇的是網(wǎng)易云閱讀器可以在網(wǎng)頁(yè)上打開(kāi)查看。
有這樣的操作嗎??
我發(fā)現了一些東西,
WC,網(wǎng)易太甜了!
太甜了,我也想為此把文字記下來(lái)。
換句話(huà)說(shuō),只要能在網(wǎng)頁(yè)上顯示,就可以被捕獲。
一、創(chuàng )意的產(chǎn)生
要么使用現成的工具,比如優(yōu)采云,來(lái)抓取網(wǎng)絡(luò )上的數據,但使用這個(gè)工具顯然是一個(gè)失學(xué)的人。要么使用開(kāi)源框架,然后在知乎上有一個(gè)非常流行的“爬蟲(chóng)”。玩爬蟲(chóng)的人很多,請自己知乎。用的比較多的框架有scrapy、pyspider等,前者比較低級,搞這個(gè)工作的人玩這個(gè)比較專(zhuān)業(yè)。后者非常適合新手玩,帶有WEUI,網(wǎng)頁(yè)上的可視化操作,非常方便。這篇文章懶得用pyspider。
二、設置環(huán)境
這部分我其實(shí)是一年前做的,不過(guò)當時(shí)我用的是windows平臺?,F在再看pyspider的官網(wǎng),發(fā)現windows的缺點(diǎn)很多,而且pyspider的開(kāi)發(fā)也是在linux平臺上進(jìn)行的。所以即使我是新手,也得在linux上使用環(huán)境。(pyspider 文檔在這里)
對于Linux發(fā)行版的選擇,官網(wǎng)列出了幾個(gè),centos(我的VPS上用的那個(gè)),ubuntu等??紤]到用瀏覽器,可能需要帶桌面的linux系統。于是我在我的windows10上的vbox上安裝了centos,后來(lái)發(fā)現安裝桌面環(huán)境真的太慢了??。突然發(fā)現自己太傻了。真的,我安裝了一個(gè)Kali系統(我前段時(shí)間學(xué)會(huì )了安裝)。Kali是基于Debian的發(fā)行版,ubuntu也是基于Debian的,所以使用kali應該沒(méi)有問(wèn)題。
參考pyspider幫助,pyspider中文網(wǎng)站
首先安裝pyspider
apt-get 安裝 pyspider
然后安裝phantomjs
apt-get 安裝 phantomjs
是不是很簡(jiǎn)單。Phantomjs 是一個(gè)無(wú)界面瀏覽器,用于完全模擬用戶(hù)在瀏覽器上的操作,用于處理比較麻煩的問(wèn)題,比如運行js、異步加載網(wǎng)頁(yè)、響應網(wǎng)站反爬策略。另外,這款瀏覽器比IE、Chrome、Firefox等界面瀏覽器要快很多,詳情請參考/。
安裝成功后,在終端輸入pyspider
提示phantomjs fetcher運行在25555端口,這個(gè)其實(shí)是pyspider用phantomjs運行的,所以在加載AJAX頁(yè)面的時(shí)候很有用。
三、分析頁(yè)面
打開(kāi)某章的閱讀頁(yè)面,如《副王:秋雨傳》-老秋-電子書(shū)-在線(xiàn)閱讀-網(wǎng)易云閱讀,打開(kāi)調試工具Firebug。
選擇net標簽,這樣在打開(kāi)網(wǎng)頁(yè)的時(shí)候就可以看到頁(yè)面加載的過(guò)程。
一個(gè)閱讀頁(yè)面需要這么多資源!其實(shí)還有很多東西是不需要關(guān)心的,把tab切換成HTML,
其實(shí)請求只有兩個(gè),第一個(gè)在域名下,第二個(gè)在下??梢约僭O第二個(gè)與此頁(yè)面的內容幾乎沒(méi)有相關(guān)性,可以用于統計目的。查看第一個(gè)請求
具體不說(shuō)了,反正回復里沒(méi)有章節內容。
那么章節內容在哪里呢?
將選項卡切換到 XHR,
收錄 4 個(gè)異步請求。從 URL 和接收數據的時(shí)間(時(shí)間軸上的綠色部分),可以猜測最后一個(gè)是獲取章節內容的請求。其實(shí)就是一一點(diǎn)擊查看接收到的數據??梢钥吹缴洗握埱蠓祷氐臄祿且粋€(gè)json數據。
很明顯,json的一個(gè)字段就是content,這很可能就是我們想要的。但是這個(gè)字符串要編碼,常規套路是base64編碼,因為不是敏感數據。試試看,打開(kāi)瀏覽器的hack欄,把內容復制進(jìn)去,在Encoding里面選擇Base64Decode
結果是
你看到了什么?亂七八糟的胡言亂語(yǔ)。
不完全是,有
人物。這說(shuō)明content的內容確實(shí)是base64編碼的,但是漢字的解碼有問(wèn)題。
這時(shí)候使用pyspider的返回數據的json方法提取json數據,然后嘗試解碼收錄中文的內容:
得到了答案
本來(lái)以為和中文打交道要花點(diǎn)時(shí)間,沒(méi)想到一次就成功了。
四、登錄問(wèn)題
其實(shí)最難的不是找到文章的內容,而是以注冊人的身份訪(fǎng)問(wèn)網(wǎng)站。這個(gè)問(wèn)題從周末的兩天,到周一的一整天的戰斗,到周二的放棄,再到周三的重新審視這個(gè)問(wèn)題,我真的學(xué)到了很多。我遇到的問(wèn)題不是因為問(wèn)題本身的難度,而是因為我對它的理解深度。了解的越深,把握的就越準確。一個(gè)人摸索的時(shí)候,一開(kāi)始很興奮,漸漸地我懷疑自己,這個(gè)問(wèn)題有沒(méi)有辦法解決?還是自己的能力差距很大?
周三,我冷靜下來(lái),重新組織了登錄流程、cookie 交付流程,并將每次 cookie 更改記錄在草稿紙上。最終在不斷的嘗試和推理中找到了正確的應用方法,作為登錄者成功獲取了數據。其實(shí)核心就是cookie的交付,但是摸索的過(guò)程太長(cháng)了,我也是菜鳥(niǎo)。
五、數據的后處理
后處理其實(shí)很簡(jiǎn)單,上面已經(jīng)正確解碼了,下面只是將其寫(xiě)入文件。
def detail_page(self, response):
results=response.json
content=base64.b64decode(results['content'])
fo = open('/root/Documents/davidchiu2.txt','a')
fo.write(content)
fo.close()
return {
# "content": content,
"content_cn": content,
}
將結果保存到txt文件中,如下
因為有html的段落格式,還有圖片的鏈接,加個(gè)html header和end,把擴展名改成html,這樣用瀏覽器打開(kāi)就可以看到圖片了。
然后將頁(yè)面上的文字和圖片全部復制到word,排版后導出PDF,完美。
查看全部
抓取網(wǎng)頁(yè)生成電子書(shū)(只要能顯示在網(wǎng)頁(yè)上的東西都可以抓下來(lái)。。
)
最近,我迷上了德州撲克。我的同學(xué)H是這次活動(dòng)的領(lǐng)隊(tuifei)。我們同學(xué)不僅PK了,還給我發(fā)了截圖,WC,你也買(mǎi)了書(shū),你也進(jìn)了群,你快上天堂了。. .
晚上11點(diǎn)30分,我用我的房門(mén)打開(kāi)他房間的門(mén),他果然在床上。
H,有資源嗎?
不是,X寶上貼的和我下載的一樣,只有44頁(yè),前十頁(yè)是廣告。
哎,無(wú)良商家,退款?
不,只有1.00元,她又給了我一本書(shū)。
來(lái)看看澳門(mén)賭場(chǎng)上線(xiàn)的感覺(jué)吧。
回去jd上找,電子版18元,紙質(zhì)版什么的。沒(méi)有微信閱讀。
第二天,我在實(shí)驗室遇到了H。還有其他資源嗎?
恩,網(wǎng)易閱讀上有,我付費了。
第一次聽(tīng)說(shuō)網(wǎng)易讀書(shū),周末在他的實(shí)驗室度過(guò)。
神奇的是網(wǎng)易云閱讀器可以在網(wǎng)頁(yè)上打開(kāi)查看。

有這樣的操作嗎??
我發(fā)現了一些東西,

WC,網(wǎng)易太甜了!
太甜了,我也想為此把文字記下來(lái)。
換句話(huà)說(shuō),只要能在網(wǎng)頁(yè)上顯示,就可以被捕獲。
一、創(chuàng )意的產(chǎn)生
要么使用現成的工具,比如優(yōu)采云,來(lái)抓取網(wǎng)絡(luò )上的數據,但使用這個(gè)工具顯然是一個(gè)失學(xué)的人。要么使用開(kāi)源框架,然后在知乎上有一個(gè)非常流行的“爬蟲(chóng)”。玩爬蟲(chóng)的人很多,請自己知乎。用的比較多的框架有scrapy、pyspider等,前者比較低級,搞這個(gè)工作的人玩這個(gè)比較專(zhuān)業(yè)。后者非常適合新手玩,帶有WEUI,網(wǎng)頁(yè)上的可視化操作,非常方便。這篇文章懶得用pyspider。
二、設置環(huán)境
這部分我其實(shí)是一年前做的,不過(guò)當時(shí)我用的是windows平臺?,F在再看pyspider的官網(wǎng),發(fā)現windows的缺點(diǎn)很多,而且pyspider的開(kāi)發(fā)也是在linux平臺上進(jìn)行的。所以即使我是新手,也得在linux上使用環(huán)境。(pyspider 文檔在這里)
對于Linux發(fā)行版的選擇,官網(wǎng)列出了幾個(gè),centos(我的VPS上用的那個(gè)),ubuntu等??紤]到用瀏覽器,可能需要帶桌面的linux系統。于是我在我的windows10上的vbox上安裝了centos,后來(lái)發(fā)現安裝桌面環(huán)境真的太慢了??。突然發(fā)現自己太傻了。真的,我安裝了一個(gè)Kali系統(我前段時(shí)間學(xué)會(huì )了安裝)。Kali是基于Debian的發(fā)行版,ubuntu也是基于Debian的,所以使用kali應該沒(méi)有問(wèn)題。
參考pyspider幫助,pyspider中文網(wǎng)站
首先安裝pyspider
apt-get 安裝 pyspider
然后安裝phantomjs
apt-get 安裝 phantomjs
是不是很簡(jiǎn)單。Phantomjs 是一個(gè)無(wú)界面瀏覽器,用于完全模擬用戶(hù)在瀏覽器上的操作,用于處理比較麻煩的問(wèn)題,比如運行js、異步加載網(wǎng)頁(yè)、響應網(wǎng)站反爬策略。另外,這款瀏覽器比IE、Chrome、Firefox等界面瀏覽器要快很多,詳情請參考/。
安裝成功后,在終端輸入pyspider

提示phantomjs fetcher運行在25555端口,這個(gè)其實(shí)是pyspider用phantomjs運行的,所以在加載AJAX頁(yè)面的時(shí)候很有用。
三、分析頁(yè)面
打開(kāi)某章的閱讀頁(yè)面,如《副王:秋雨傳》-老秋-電子書(shū)-在線(xiàn)閱讀-網(wǎng)易云閱讀,打開(kāi)調試工具Firebug。

選擇net標簽,這樣在打開(kāi)網(wǎng)頁(yè)的時(shí)候就可以看到頁(yè)面加載的過(guò)程。

一個(gè)閱讀頁(yè)面需要這么多資源!其實(shí)還有很多東西是不需要關(guān)心的,把tab切換成HTML,

其實(shí)請求只有兩個(gè),第一個(gè)在域名下,第二個(gè)在下??梢约僭O第二個(gè)與此頁(yè)面的內容幾乎沒(méi)有相關(guān)性,可以用于統計目的。查看第一個(gè)請求

具體不說(shuō)了,反正回復里沒(méi)有章節內容。
那么章節內容在哪里呢?
將選項卡切換到 XHR,

收錄 4 個(gè)異步請求。從 URL 和接收數據的時(shí)間(時(shí)間軸上的綠色部分),可以猜測最后一個(gè)是獲取章節內容的請求。其實(shí)就是一一點(diǎn)擊查看接收到的數據??梢钥吹缴洗握埱蠓祷氐臄祿且粋€(gè)json數據。

很明顯,json的一個(gè)字段就是content,這很可能就是我們想要的。但是這個(gè)字符串要編碼,常規套路是base64編碼,因為不是敏感數據。試試看,打開(kāi)瀏覽器的hack欄,把內容復制進(jìn)去,在Encoding里面選擇Base64Decode

結果是

你看到了什么?亂七八糟的胡言亂語(yǔ)。
不完全是,有
人物。這說(shuō)明content的內容確實(shí)是base64編碼的,但是漢字的解碼有問(wèn)題。
這時(shí)候使用pyspider的返回數據的json方法提取json數據,然后嘗試解碼收錄中文的內容:

得到了答案

本來(lái)以為和中文打交道要花點(diǎn)時(shí)間,沒(méi)想到一次就成功了。
四、登錄問(wèn)題
其實(shí)最難的不是找到文章的內容,而是以注冊人的身份訪(fǎng)問(wèn)網(wǎng)站。這個(gè)問(wèn)題從周末的兩天,到周一的一整天的戰斗,到周二的放棄,再到周三的重新審視這個(gè)問(wèn)題,我真的學(xué)到了很多。我遇到的問(wèn)題不是因為問(wèn)題本身的難度,而是因為我對它的理解深度。了解的越深,把握的就越準確。一個(gè)人摸索的時(shí)候,一開(kāi)始很興奮,漸漸地我懷疑自己,這個(gè)問(wèn)題有沒(méi)有辦法解決?還是自己的能力差距很大?
周三,我冷靜下來(lái),重新組織了登錄流程、cookie 交付流程,并將每次 cookie 更改記錄在草稿紙上。最終在不斷的嘗試和推理中找到了正確的應用方法,作為登錄者成功獲取了數據。其實(shí)核心就是cookie的交付,但是摸索的過(guò)程太長(cháng)了,我也是菜鳥(niǎo)。
五、數據的后處理
后處理其實(shí)很簡(jiǎn)單,上面已經(jīng)正確解碼了,下面只是將其寫(xiě)入文件。
def detail_page(self, response):
results=response.json
content=base64.b64decode(results['content'])
fo = open('/root/Documents/davidchiu2.txt','a')
fo.write(content)
fo.close()
return {
# "content": content,
"content_cn": content,
}
將結果保存到txt文件中,如下

因為有html的段落格式,還有圖片的鏈接,加個(gè)html header和end,把擴展名改成html,這樣用瀏覽器打開(kāi)就可以看到圖片了。

然后將頁(yè)面上的文字和圖片全部復制到word,排版后導出PDF,完美。
抓取網(wǎng)頁(yè)生成電子書(shū)(快速指南發(fā)送一個(gè)請求:Requests-html的方便(圖))
網(wǎng)站優(yōu)化 ? 優(yōu)采云 發(fā)表了文章 ? 0 個(gè)評論 ? 119 次瀏覽 ? 2021-10-15 11:05
無(wú)意中發(fā)現了一個(gè)可以免費下載電子書(shū)的網(wǎng)站。它立刻勾起了我采集電子書(shū)的愛(ài)好,我很想下載這些書(shū)。
就在最近,requests 的作者 kennethreitz 發(fā)布了一個(gè)新的庫 requests-html。
它不僅可以請求網(wǎng)頁(yè),還可以解析 HTML 文檔。讓我們開(kāi)始吧。
安裝。
安裝很簡(jiǎn)單,直接執行:
pip install requests-html
就是這樣。
分析頁(yè)面結構
通過(guò)瀏覽器查看元素,可以發(fā)現這本電子書(shū)網(wǎng)站是用WordPress搭建的。主頁(yè)上的列表元素非常簡(jiǎn)單和規則。
所以我們可以搜索 .entry-title> a 得到所有書(shū)籍詳情頁(yè)的鏈接,然后我們進(jìn)入詳情頁(yè)找到下載鏈接。
從下圖。
可以發(fā)現download-links>a中的鏈接是該書(shū)的下載鏈接。
回到列表頁(yè)面,可以發(fā)現該站點(diǎn)有700多個(gè)頁(yè)面,因此我們可以遍歷列表以獲取所有下載鏈接。
請求-html 快速指南
發(fā)送 GET 請求:
from requests_html import HTMLSession
session = HTMLSession()
r = session.get('https://python.org/')
Requests-html 的方便之處在于它解析 html 的方式就像使用 jQuery 一樣簡(jiǎn)單,比如:
# 獲取頁(yè)面的所有鏈接可以這樣寫(xiě):
r.html.links
# 會(huì )返回 {'//docs.python.org/3/tutorial/', '/about/apps/'}
# 獲取頁(yè)面的所有的絕對鏈接:
r.html.absolute_links
# 會(huì )返回 {'https://github.com/python/pyth ... 39%3B, 'https://docs.python.org/3/tutorial/'}
# 通過(guò) CSS 選擇器選擇元素:
about = r.find('.about', first=True)
# 參數 first 表示只獲取找到的第一元素
about.text # 獲取 .about 下的所有文本
about.attrs # 獲取 .about 下所有屬性像 id, src, href 等等
about.html # 獲取 .about 的 HTML
about.find('a') # 獲取 .about 下的所有 a 標簽
構建代碼。
from requests_html import HTMLSession
import requests
import time
import json
import random
import sys
session = HTMLSession()
list_url = 'http://www.allitebooks.com/page/'
USER_AGENTS = [
"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_7_3) AppleWebKit/535.20 (KHTML, like Gecko) Chrome/19.0.1036.7 Safari/535.20",
"Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.1 (KHTML, like Gecko) Chrome/21.0.1180.71 Safari/537.1 LBBROWSER",
"Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/535.11 (KHTML, like Gecko) Chrome/17.0.963.84 Safari/535.11 LBBROWSER",
"Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.1; WOW64; Trident/5.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; .NET4.0C; .NET4.0E)",
"Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; QQDownload 732; .NET4.0C; .NET4.0E)",
"Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; Trident/4.0; SV1; QQDownload 732; .NET4.0C; .NET4.0E; 360SE)",
"Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; QQDownload 732; .NET4.0C; .NET4.0E)",
"Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.1 (KHTML, like Gecko) Chrome/21.0.1180.89 Safari/537.1",
"Mozilla/5.0 (iPad; U; CPU OS 4_2_1 like Mac OS X; zh-cn) AppleWebKit/533.17.9 (KHTML, like Gecko) Version/5.0.2 Mobile/8C148 Safari/6533.18.5",
"Mozilla/5.0 (Windows NT 6.1; Win64; x64; rv:2.0b13pre) Gecko/20110307 Firefox/4.0b13pre",
"Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:16.0) Gecko/20100101 Firefox/16.0",
"Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.11 (KHTML, like Gecko) Chrome/23.0.1271.64 Safari/537.11",
"Mozilla/5.0 (X11; U; Linux x86_64; zh-CN; rv:1.9.2.10) Gecko/20100922 Ubuntu/10.10 (maverick) Firefox/3.6.10"
]
# 獲取當前列表頁(yè)所有圖書(shū)鏈接
def get_list(url):
response = session.get(url)
all_link = response.html.find('.entry-title a') # 獲取頁(yè)面所有圖書(shū)詳情鏈接
for link in all_link:
getBookUrl(link.attrs['href'])
# 獲取圖書(shū)下載鏈接
def getBookUrl(url):
response = session.get(url)
l = response.html.find('.download-links a', first=True)
if l is not None: # 運行后發(fā)現有的個(gè)別頁(yè)面沒(méi)有下載鏈接,這里加個(gè)判斷
link = l.attrs['href'];
download(link)
#下載圖書(shū)
def download(url):
# 隨機瀏覽器 User-Agent
headers={ "User-Agent":random.choice(USER_AGENTS) }
# 獲取文件名
filename = url.split('/')[-1]
# 如果 url 里包含 .pdf
if ".pdf" in url:
file = 'book/'+filename # 文件路徑寫(xiě)死了,運行時(shí)當前目錄必須有名 book 的文件夾
with open(file, 'wb') as f:
print("正在下載 %s" % filename)
response = requests.get(url, stream=True, headers=headers)
# 獲取文件大小
total_length = response.headers.get('content-length')
# 如果文件大小不存在,則直接寫(xiě)入返回的文本
if total_length is None:
f.write(response.content)
else:
# 下載進(jìn)度條
dl = 0
total_length = int(total_length) # 文件大小
for data in response.iter_content(chunk_size=4096): # 每次響應獲取 4096 字節
dl += len(data)
f.write(data)
done = int(50 * dl / total_length)
sys.stdout.write("\r[%s%s]" % ('=' * done, ' ' * (50-done)) ) # 打印進(jìn)度條
sys.stdout.flush()
print(filename + '下載完成!')
if __name__ == '__main__':
#從這運行,應為知道列表總數,所以偷個(gè)懶直接開(kāi)始循環(huán)
for x in range(1,756):
print('當前頁(yè)面: '+ str(x))
get_list(list_url+str(x))
運行結果:
讀者福利,點(diǎn)擊鏈接領(lǐng)取相關(guān)學(xué)習福利包:
是安全的網(wǎng)站不用擔心,繼續訪(fǎng)問(wèn)后即可收到
就業(yè)系列:
有方向和目標的學(xué)習可以節省時(shí)間,而沒(méi)有方向和目標的學(xué)習純粹是浪費時(shí)間。
部分視頻展示:
電子書(shū)系列:
視頻通俗易懂,電子書(shū)作為輔助。有時(shí)看視頻不方便。您可以使用電子書(shū)作為輔助
Python人工智能系列:
學(xué)習是一個(gè)人最大的成就。通過(guò)學(xué)習,不僅可以提升自己的境界,還可以豐富自己的知識,為以后的就業(yè)打下基礎。
如果看到最后的小伙伴們,如果覺(jué)得這個(gè)文章對你有好處,請給我點(diǎn)個(gè)贊,關(guān)注我們,支持你?。。?! 查看全部
抓取網(wǎng)頁(yè)生成電子書(shū)(快速指南發(fā)送一個(gè)請求:Requests-html的方便(圖))
無(wú)意中發(fā)現了一個(gè)可以免費下載電子書(shū)的網(wǎng)站。它立刻勾起了我采集電子書(shū)的愛(ài)好,我很想下載這些書(shū)。

就在最近,requests 的作者 kennethreitz 發(fā)布了一個(gè)新的庫 requests-html。
它不僅可以請求網(wǎng)頁(yè),還可以解析 HTML 文檔。讓我們開(kāi)始吧。
安裝。
安裝很簡(jiǎn)單,直接執行:
pip install requests-html
就是這樣。
分析頁(yè)面結構
通過(guò)瀏覽器查看元素,可以發(fā)現這本電子書(shū)網(wǎng)站是用WordPress搭建的。主頁(yè)上的列表元素非常簡(jiǎn)單和規則。

所以我們可以搜索 .entry-title> a 得到所有書(shū)籍詳情頁(yè)的鏈接,然后我們進(jìn)入詳情頁(yè)找到下載鏈接。
從下圖。

可以發(fā)現download-links>a中的鏈接是該書(shū)的下載鏈接。
回到列表頁(yè)面,可以發(fā)現該站點(diǎn)有700多個(gè)頁(yè)面,因此我們可以遍歷列表以獲取所有下載鏈接。

請求-html 快速指南
發(fā)送 GET 請求:
from requests_html import HTMLSession
session = HTMLSession()
r = session.get('https://python.org/')
Requests-html 的方便之處在于它解析 html 的方式就像使用 jQuery 一樣簡(jiǎn)單,比如:
# 獲取頁(yè)面的所有鏈接可以這樣寫(xiě):
r.html.links
# 會(huì )返回 {'//docs.python.org/3/tutorial/', '/about/apps/'}
# 獲取頁(yè)面的所有的絕對鏈接:
r.html.absolute_links
# 會(huì )返回 {'https://github.com/python/pyth ... 39%3B, 'https://docs.python.org/3/tutorial/'}
# 通過(guò) CSS 選擇器選擇元素:
about = r.find('.about', first=True)
# 參數 first 表示只獲取找到的第一元素
about.text # 獲取 .about 下的所有文本
about.attrs # 獲取 .about 下所有屬性像 id, src, href 等等
about.html # 獲取 .about 的 HTML
about.find('a') # 獲取 .about 下的所有 a 標簽
構建代碼。
from requests_html import HTMLSession
import requests
import time
import json
import random
import sys
session = HTMLSession()
list_url = 'http://www.allitebooks.com/page/'
USER_AGENTS = [
"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_7_3) AppleWebKit/535.20 (KHTML, like Gecko) Chrome/19.0.1036.7 Safari/535.20",
"Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.1 (KHTML, like Gecko) Chrome/21.0.1180.71 Safari/537.1 LBBROWSER",
"Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/535.11 (KHTML, like Gecko) Chrome/17.0.963.84 Safari/535.11 LBBROWSER",
"Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.1; WOW64; Trident/5.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; .NET4.0C; .NET4.0E)",
"Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; QQDownload 732; .NET4.0C; .NET4.0E)",
"Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; Trident/4.0; SV1; QQDownload 732; .NET4.0C; .NET4.0E; 360SE)",
"Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; QQDownload 732; .NET4.0C; .NET4.0E)",
"Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.1 (KHTML, like Gecko) Chrome/21.0.1180.89 Safari/537.1",
"Mozilla/5.0 (iPad; U; CPU OS 4_2_1 like Mac OS X; zh-cn) AppleWebKit/533.17.9 (KHTML, like Gecko) Version/5.0.2 Mobile/8C148 Safari/6533.18.5",
"Mozilla/5.0 (Windows NT 6.1; Win64; x64; rv:2.0b13pre) Gecko/20110307 Firefox/4.0b13pre",
"Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:16.0) Gecko/20100101 Firefox/16.0",
"Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.11 (KHTML, like Gecko) Chrome/23.0.1271.64 Safari/537.11",
"Mozilla/5.0 (X11; U; Linux x86_64; zh-CN; rv:1.9.2.10) Gecko/20100922 Ubuntu/10.10 (maverick) Firefox/3.6.10"
]
# 獲取當前列表頁(yè)所有圖書(shū)鏈接
def get_list(url):
response = session.get(url)
all_link = response.html.find('.entry-title a') # 獲取頁(yè)面所有圖書(shū)詳情鏈接
for link in all_link:
getBookUrl(link.attrs['href'])
# 獲取圖書(shū)下載鏈接
def getBookUrl(url):
response = session.get(url)
l = response.html.find('.download-links a', first=True)
if l is not None: # 運行后發(fā)現有的個(gè)別頁(yè)面沒(méi)有下載鏈接,這里加個(gè)判斷
link = l.attrs['href'];
download(link)
#下載圖書(shū)
def download(url):
# 隨機瀏覽器 User-Agent
headers={ "User-Agent":random.choice(USER_AGENTS) }
# 獲取文件名
filename = url.split('/')[-1]
# 如果 url 里包含 .pdf
if ".pdf" in url:
file = 'book/'+filename # 文件路徑寫(xiě)死了,運行時(shí)當前目錄必須有名 book 的文件夾
with open(file, 'wb') as f:
print("正在下載 %s" % filename)
response = requests.get(url, stream=True, headers=headers)
# 獲取文件大小
total_length = response.headers.get('content-length')
# 如果文件大小不存在,則直接寫(xiě)入返回的文本
if total_length is None:
f.write(response.content)
else:
# 下載進(jìn)度條
dl = 0
total_length = int(total_length) # 文件大小
for data in response.iter_content(chunk_size=4096): # 每次響應獲取 4096 字節
dl += len(data)
f.write(data)
done = int(50 * dl / total_length)
sys.stdout.write("\r[%s%s]" % ('=' * done, ' ' * (50-done)) ) # 打印進(jìn)度條
sys.stdout.flush()
print(filename + '下載完成!')
if __name__ == '__main__':
#從這運行,應為知道列表總數,所以偷個(gè)懶直接開(kāi)始循環(huán)
for x in range(1,756):
print('當前頁(yè)面: '+ str(x))
get_list(list_url+str(x))
運行結果:

讀者福利,點(diǎn)擊鏈接領(lǐng)取相關(guān)學(xué)習福利包:
是安全的網(wǎng)站不用擔心,繼續訪(fǎng)問(wèn)后即可收到

就業(yè)系列:
有方向和目標的學(xué)習可以節省時(shí)間,而沒(méi)有方向和目標的學(xué)習純粹是浪費時(shí)間。

部分視頻展示:


電子書(shū)系列:
視頻通俗易懂,電子書(shū)作為輔助。有時(shí)看視頻不方便。您可以使用電子書(shū)作為輔助

Python人工智能系列:

學(xué)習是一個(gè)人最大的成就。通過(guò)學(xué)習,不僅可以提升自己的境界,還可以豐富自己的知識,為以后的就業(yè)打下基礎。
如果看到最后的小伙伴們,如果覺(jué)得這個(gè)文章對你有好處,請給我點(diǎn)個(gè)贊,關(guān)注我們,支持你?。。?!
抓取網(wǎng)頁(yè)生成電子書(shū)(requests-html快速指南發(fā)送一個(gè)get(請求:requests))
網(wǎng)站優(yōu)化 ? 優(yōu)采云 發(fā)表了文章 ? 0 個(gè)評論 ? 89 次瀏覽 ? 2021-10-14 11:13
安裝
安裝很簡(jiǎn)單,直接執行:
pip install requests-html
就是這樣。
分析頁(yè)面結構
通過(guò)瀏覽器查看元素,可以發(fā)現這本電子書(shū)網(wǎng)站是用wordpress構建的。主頁(yè)上的列表元素非常簡(jiǎn)單和規則。
所以我們可以搜索 .entry-title> a 得到所有書(shū)籍詳情頁(yè)的鏈接,然后我們進(jìn)入詳情頁(yè)找到下載鏈接,如下圖
可以發(fā)現 .download-links>a 中的鏈接是該書(shū)的下載鏈接?;氐搅斜眄?yè)面,可以發(fā)現該站點(diǎn)有700多個(gè)頁(yè)面,因此我們可以遍歷列表以獲取所有下載鏈接。
requests-html 快速指南
發(fā)送獲取請求:
from requests_html import htmlsession
session = htmlsession()
r = session.get('https://python.org/')
requests-html的方便之處在于它解析html的方式就像使用jquery一樣簡(jiǎn)單,例如:
# 獲取頁(yè)面的所有鏈接可以這樣寫(xiě):
r.html.links
# 會(huì )返回 {'//docs.python.org/3/tutorial/', '/about/apps/'}
# 獲取頁(yè)面的所有的絕對鏈接:
r.html.absolute_links
# 會(huì )返回 {'https://github.com/python/pythondotorg/issues', 'https://docs.python.org/3/tutorial/'}
# 通過(guò) css 選擇器選擇元素:
about = r.find('.about', first=true)
# 參數 first 表示只獲取找到的第一元素
about.text # 獲取 .about 下的所有文本
about.attrs # 獲取 .about 下所有屬性像 id, src, href 等等
about.html # 獲取 .about 的 html
about.find('a') # 獲取 .about 下的所有 a 標簽
構建代碼
from requests_html import htmlsession
import requests
import time
import json
import random
import sys
'''
想要學(xué)習python?python學(xué)習交流群:984632579滿(mǎn)足你的需求,資料都已經(jīng)上傳群文件,可以自行下載!
'''
session = htmlsession()
list_url = 'http://www.allitebooks.com/page/'
user_agents = [
"mozilla/5.0 (macintosh; intel mac os x 10_7_3) applewebkit/535.20 (khtml, like gecko) chrome/19.0.1036.7 safari/535.20",
"mozilla/5.0 (windows nt 6.1; wow64) applewebkit/537.1 (khtml, like gecko) chrome/21.0.1180.71 safari/537.1 lbbrowser",
"mozilla/5.0 (windows nt 6.1; wow64) applewebkit/535.11 (khtml, like gecko) chrome/17.0.963.84 safari/535.11 lbbrowser",
"mozilla/4.0 (compatible; msie 7.0; windows nt 6.1; wow64; trident/5.0; slcc2; .net clr 2.0.50727; .net clr 3.5.30729; .net clr 3.0.30729; media center pc 6.0; .net4.0c; .net4.0e)",
"mozilla/4.0 (compatible; msie 6.0; windows nt 5.1; sv1; qqdownload 732; .net4.0c; .net4.0e)",
"mozilla/4.0 (compatible; msie 7.0; windows nt 5.1; trident/4.0; sv1; qqdownload 732; .net4.0c; .net4.0e; 360se)",
"mozilla/4.0 (compatible; msie 6.0; windows nt 5.1; sv1; qqdownload 732; .net4.0c; .net4.0e)",
"mozilla/5.0 (windows nt 6.1; wow64) applewebkit/537.1 (khtml, like gecko) chrome/21.0.1180.89 safari/537.1",
"mozilla/5.0 (ipad; u; cpu os 4_2_1 like mac os x; zh-cn) applewebkit/533.17.9 (khtml, like gecko) version/5.0.2 mobile/8c148 safari/6533.18.5",
"mozilla/5.0 (windows nt 6.1; win64; x64; rv:2.0b13pre) gecko/20110307 firefox/4.0b13pre",
"mozilla/5.0 (x11; ubuntu; linux x86_64; rv:16.0) gecko/20100101 firefox/16.0",
"mozilla/5.0 (windows nt 6.1; wow64) applewebkit/537.11 (khtml, like gecko) chrome/23.0.1271.64 safari/537.11",
"mozilla/5.0 (x11; u; linux x86_64; zh-cn; rv:1.9.2.10) gecko/20100922 ubuntu/10.10 (maverick) firefox/3.6.10"
]
# 獲取當前列表頁(yè)所有圖書(shū)鏈接
def get_list(url):
response = session.get(url)
all_link = response.html.find('.entry-title a') # 獲取頁(yè)面所有圖書(shū)詳情鏈接
for link in all_link:
getbookurl(link.attrs['href'])
# 獲取圖書(shū)下載鏈接
def getbookurl(url):
response = session.get(url)
l = response.html.find('.download-links a', first=true)
if l is not none: # 運行后發(fā)現有的個(gè)別頁(yè)面沒(méi)有下載鏈接,這里加個(gè)判斷
link = l.attrs['href'];
download(link)
#下載圖書(shū)
def download(url):
# 隨機瀏覽器 user-agent
headers={ "user-agent":random.choice(user_agents) }
# 獲取文件名
filename = url.split('/')[-1]
# 如果 url 里包含 .pdf
if ".pdf" in url:
file = 'book/'+filename # 文件路徑寫(xiě)死了,運行時(shí)當前目錄必須有名 book 的文件夾
with open(file, 'wb') as f:
print("正在下載 %s" % filename)
response = requests.get(url, stream=true, headers=headers)
# 獲取文件大小
total_length = response.headers.get('content-length')
# 如果文件大小不存在,則直接寫(xiě)入返回的文本
if total_length is none:
f.write(response.content)
else:
# 下載進(jìn)度條
dl = 0
total_length = int(total_length) # 文件大小
for data in response.iter_content(chunk_size=4096): # 每次響應獲取 4096 字節
dl += len(data)
f.write(data)
done = int(50 * dl / total_length)
sys.stdout.write("\r[%s%s]" % ('=' * done, ' ' * (50-done)) ) # 打印進(jìn)度條
sys.stdout.flush()
print(filename + '下載完成!')
if __name__ == '__main__':
#從這運行,應為知道列表總數,所以偷個(gè)懶直接開(kāi)始循環(huán)
for x in range(1,756):
print('當前頁(yè)面: '+ str(x))
get_list(list_url+str(x))
運行結果:
以上就是小編為大家介紹的內容。我已經(jīng)用python抓取了7000多本電子書(shū)進(jìn)行了詳細的集成和集成。我希望它會(huì )對你有所幫助。 查看全部
抓取網(wǎng)頁(yè)生成電子書(shū)(requests-html快速指南發(fā)送一個(gè)get(請求:requests))
安裝
安裝很簡(jiǎn)單,直接執行:
pip install requests-html
就是這樣。
分析頁(yè)面結構
通過(guò)瀏覽器查看元素,可以發(fā)現這本電子書(shū)網(wǎng)站是用wordpress構建的。主頁(yè)上的列表元素非常簡(jiǎn)單和規則。

所以我們可以搜索 .entry-title> a 得到所有書(shū)籍詳情頁(yè)的鏈接,然后我們進(jìn)入詳情頁(yè)找到下載鏈接,如下圖

可以發(fā)現 .download-links>a 中的鏈接是該書(shū)的下載鏈接?;氐搅斜眄?yè)面,可以發(fā)現該站點(diǎn)有700多個(gè)頁(yè)面,因此我們可以遍歷列表以獲取所有下載鏈接。
requests-html 快速指南
發(fā)送獲取請求:
from requests_html import htmlsession
session = htmlsession()
r = session.get('https://python.org/')
requests-html的方便之處在于它解析html的方式就像使用jquery一樣簡(jiǎn)單,例如:
# 獲取頁(yè)面的所有鏈接可以這樣寫(xiě):
r.html.links
# 會(huì )返回 {'//docs.python.org/3/tutorial/', '/about/apps/'}
# 獲取頁(yè)面的所有的絕對鏈接:
r.html.absolute_links
# 會(huì )返回 {'https://github.com/python/pythondotorg/issues', 'https://docs.python.org/3/tutorial/'}
# 通過(guò) css 選擇器選擇元素:
about = r.find('.about', first=true)
# 參數 first 表示只獲取找到的第一元素
about.text # 獲取 .about 下的所有文本
about.attrs # 獲取 .about 下所有屬性像 id, src, href 等等
about.html # 獲取 .about 的 html
about.find('a') # 獲取 .about 下的所有 a 標簽
構建代碼
from requests_html import htmlsession
import requests
import time
import json
import random
import sys
'''
想要學(xué)習python?python學(xué)習交流群:984632579滿(mǎn)足你的需求,資料都已經(jīng)上傳群文件,可以自行下載!
'''
session = htmlsession()
list_url = 'http://www.allitebooks.com/page/'
user_agents = [
"mozilla/5.0 (macintosh; intel mac os x 10_7_3) applewebkit/535.20 (khtml, like gecko) chrome/19.0.1036.7 safari/535.20",
"mozilla/5.0 (windows nt 6.1; wow64) applewebkit/537.1 (khtml, like gecko) chrome/21.0.1180.71 safari/537.1 lbbrowser",
"mozilla/5.0 (windows nt 6.1; wow64) applewebkit/535.11 (khtml, like gecko) chrome/17.0.963.84 safari/535.11 lbbrowser",
"mozilla/4.0 (compatible; msie 7.0; windows nt 6.1; wow64; trident/5.0; slcc2; .net clr 2.0.50727; .net clr 3.5.30729; .net clr 3.0.30729; media center pc 6.0; .net4.0c; .net4.0e)",
"mozilla/4.0 (compatible; msie 6.0; windows nt 5.1; sv1; qqdownload 732; .net4.0c; .net4.0e)",
"mozilla/4.0 (compatible; msie 7.0; windows nt 5.1; trident/4.0; sv1; qqdownload 732; .net4.0c; .net4.0e; 360se)",
"mozilla/4.0 (compatible; msie 6.0; windows nt 5.1; sv1; qqdownload 732; .net4.0c; .net4.0e)",
"mozilla/5.0 (windows nt 6.1; wow64) applewebkit/537.1 (khtml, like gecko) chrome/21.0.1180.89 safari/537.1",
"mozilla/5.0 (ipad; u; cpu os 4_2_1 like mac os x; zh-cn) applewebkit/533.17.9 (khtml, like gecko) version/5.0.2 mobile/8c148 safari/6533.18.5",
"mozilla/5.0 (windows nt 6.1; win64; x64; rv:2.0b13pre) gecko/20110307 firefox/4.0b13pre",
"mozilla/5.0 (x11; ubuntu; linux x86_64; rv:16.0) gecko/20100101 firefox/16.0",
"mozilla/5.0 (windows nt 6.1; wow64) applewebkit/537.11 (khtml, like gecko) chrome/23.0.1271.64 safari/537.11",
"mozilla/5.0 (x11; u; linux x86_64; zh-cn; rv:1.9.2.10) gecko/20100922 ubuntu/10.10 (maverick) firefox/3.6.10"
]
# 獲取當前列表頁(yè)所有圖書(shū)鏈接
def get_list(url):
response = session.get(url)
all_link = response.html.find('.entry-title a') # 獲取頁(yè)面所有圖書(shū)詳情鏈接
for link in all_link:
getbookurl(link.attrs['href'])
# 獲取圖書(shū)下載鏈接
def getbookurl(url):
response = session.get(url)
l = response.html.find('.download-links a', first=true)
if l is not none: # 運行后發(fā)現有的個(gè)別頁(yè)面沒(méi)有下載鏈接,這里加個(gè)判斷
link = l.attrs['href'];
download(link)
#下載圖書(shū)
def download(url):
# 隨機瀏覽器 user-agent
headers={ "user-agent":random.choice(user_agents) }
# 獲取文件名
filename = url.split('/')[-1]
# 如果 url 里包含 .pdf
if ".pdf" in url:
file = 'book/'+filename # 文件路徑寫(xiě)死了,運行時(shí)當前目錄必須有名 book 的文件夾
with open(file, 'wb') as f:
print("正在下載 %s" % filename)
response = requests.get(url, stream=true, headers=headers)
# 獲取文件大小
total_length = response.headers.get('content-length')
# 如果文件大小不存在,則直接寫(xiě)入返回的文本
if total_length is none:
f.write(response.content)
else:
# 下載進(jìn)度條
dl = 0
total_length = int(total_length) # 文件大小
for data in response.iter_content(chunk_size=4096): # 每次響應獲取 4096 字節
dl += len(data)
f.write(data)
done = int(50 * dl / total_length)
sys.stdout.write("\r[%s%s]" % ('=' * done, ' ' * (50-done)) ) # 打印進(jìn)度條
sys.stdout.flush()
print(filename + '下載完成!')
if __name__ == '__main__':
#從這運行,應為知道列表總數,所以偷個(gè)懶直接開(kāi)始循環(huán)
for x in range(1,756):
print('當前頁(yè)面: '+ str(x))
get_list(list_url+str(x))
運行結果:

以上就是小編為大家介紹的內容。我已經(jīng)用python抓取了7000多本電子書(shū)進(jìn)行了詳細的集成和集成。我希望它會(huì )對你有所幫助。
抓取網(wǎng)頁(yè)生成電子書(shū)(網(wǎng)絡(luò )書(shū)籍抓取器是一款幫助用戶(hù)下載指定網(wǎng)頁(yè)的某)
網(wǎng)站優(yōu)化 ? 優(yōu)采云 發(fā)表了文章 ? 0 個(gè)評論 ? 325 次瀏覽 ? 2021-10-11 17:45
在線(xiàn)圖書(shū)抓取器是一種可以幫助用戶(hù)下載指定網(wǎng)頁(yè)的某本書(shū)和某章節的軟件。在線(xiàn)圖書(shū)抓取器可以快速下載小說(shuō)。同時(shí)軟件支持斷點(diǎn)續傳功能,非常方便,很有必要??梢韵螺d使用。
在線(xiàn)搶書(shū)功能介紹
您可以提取指定小說(shuō)目錄頁(yè)的章節信息并進(jìn)行調整,然后按照章節順序抓取小說(shuō)內容,然后以最合適的方式進(jìn)行合并。抓取過(guò)程可以隨時(shí)中斷,關(guān)閉程序后可以繼續上一個(gè)任務(wù)。
網(wǎng)絡(luò )圖書(shū)采集器軟件功能
1、 章節調整:提取目錄后,可以進(jìn)行移動(dòng)、刪除、倒序等調整操作。調整會(huì )直接影響最終的書(shū)籍,也會(huì )以調整后的章節順序輸出。
2、自動(dòng)重試:在爬取過(guò)程中,由于網(wǎng)絡(luò )因素,可能會(huì )出現爬取失敗的情況。程序可能會(huì )自動(dòng)重試直到成功,也可以暫時(shí)中斷爬?。ㄖ袛嗪箨P(guān)閉程序不影響進(jìn)度),等網(wǎng)絡(luò )好后再試。
3、停止和恢復:可以隨時(shí)停止抓取過(guò)程,退出程序后不影響進(jìn)度(章節信息會(huì )保存在記錄中,運行程序后可以恢復抓取下一次。注意:您需要先使用停止按鈕中斷然后退出程序,如果直接退出,將不會(huì )恢復)。
4、 一鍵抓?。河址Q(chēng)“啞模式”,基本可以實(shí)現自動(dòng)抓取合并功能,直接輸出最終的文本文件。前面可能需要輸入最基本的網(wǎng)址、保存位置等信息(會(huì )有明顯的操作提示),調整章節后也可以一鍵抓取,抓取合并操作會(huì )自動(dòng)完成.
5、適用網(wǎng)站:已收錄10個(gè)適用網(wǎng)站(選擇后可以快速打開(kāi)網(wǎng)站找到自己需要的書(shū)),并自動(dòng)應用相應的代碼,也可以測試其他小說(shuō)網(wǎng)站,如果一起使用,可以手動(dòng)添加到設置文件中,以備后用。
6、 制作電子書(shū)方便:可以在設置文件中添加每個(gè)章節名稱(chēng)的前綴和后綴,為后期制作電子書(shū)的目錄帶來(lái)極大的方便。
如何使用在線(xiàn)圖書(shū)抓取器
一、首先進(jìn)入你要下載的小說(shuō)的網(wǎng)頁(yè)。
二、輸入書(shū)名,點(diǎn)擊目錄提取。
三、設置保存路徑,點(diǎn)擊Start crawling開(kāi)始下載。 查看全部
抓取網(wǎng)頁(yè)生成電子書(shū)(網(wǎng)絡(luò )書(shū)籍抓取器是一款幫助用戶(hù)下載指定網(wǎng)頁(yè)的某)
在線(xiàn)圖書(shū)抓取器是一種可以幫助用戶(hù)下載指定網(wǎng)頁(yè)的某本書(shū)和某章節的軟件。在線(xiàn)圖書(shū)抓取器可以快速下載小說(shuō)。同時(shí)軟件支持斷點(diǎn)續傳功能,非常方便,很有必要??梢韵螺d使用。
在線(xiàn)搶書(shū)功能介紹
您可以提取指定小說(shuō)目錄頁(yè)的章節信息并進(jìn)行調整,然后按照章節順序抓取小說(shuō)內容,然后以最合適的方式進(jìn)行合并。抓取過(guò)程可以隨時(shí)中斷,關(guān)閉程序后可以繼續上一個(gè)任務(wù)。
網(wǎng)絡(luò )圖書(shū)采集器軟件功能
1、 章節調整:提取目錄后,可以進(jìn)行移動(dòng)、刪除、倒序等調整操作。調整會(huì )直接影響最終的書(shū)籍,也會(huì )以調整后的章節順序輸出。
2、自動(dòng)重試:在爬取過(guò)程中,由于網(wǎng)絡(luò )因素,可能會(huì )出現爬取失敗的情況。程序可能會(huì )自動(dòng)重試直到成功,也可以暫時(shí)中斷爬?。ㄖ袛嗪箨P(guān)閉程序不影響進(jìn)度),等網(wǎng)絡(luò )好后再試。
3、停止和恢復:可以隨時(shí)停止抓取過(guò)程,退出程序后不影響進(jìn)度(章節信息會(huì )保存在記錄中,運行程序后可以恢復抓取下一次。注意:您需要先使用停止按鈕中斷然后退出程序,如果直接退出,將不會(huì )恢復)。
4、 一鍵抓?。河址Q(chēng)“啞模式”,基本可以實(shí)現自動(dòng)抓取合并功能,直接輸出最終的文本文件。前面可能需要輸入最基本的網(wǎng)址、保存位置等信息(會(huì )有明顯的操作提示),調整章節后也可以一鍵抓取,抓取合并操作會(huì )自動(dòng)完成.
5、適用網(wǎng)站:已收錄10個(gè)適用網(wǎng)站(選擇后可以快速打開(kāi)網(wǎng)站找到自己需要的書(shū)),并自動(dòng)應用相應的代碼,也可以測試其他小說(shuō)網(wǎng)站,如果一起使用,可以手動(dòng)添加到設置文件中,以備后用。
6、 制作電子書(shū)方便:可以在設置文件中添加每個(gè)章節名稱(chēng)的前綴和后綴,為后期制作電子書(shū)的目錄帶來(lái)極大的方便。
如何使用在線(xiàn)圖書(shū)抓取器
一、首先進(jìn)入你要下載的小說(shuō)的網(wǎng)頁(yè)。
二、輸入書(shū)名,點(diǎn)擊目錄提取。
三、設置保存路徑,點(diǎn)擊Start crawling開(kāi)始下載。
抓取網(wǎng)頁(yè)生成電子書(shū)(爬蟲(chóng)基礎:http協(xié)議和http相關(guān)協(xié)議編寫(xiě)python怎么爬)
網(wǎng)站優(yōu)化 ? 優(yōu)采云 發(fā)表了文章 ? 0 個(gè)評論 ? 140 次瀏覽 ? 2021-10-11 15:54
抓取網(wǎng)頁(yè)生成電子書(shū),批量增刪文件,python實(shí)現網(wǎng)頁(yè)爬蟲(chóng),抓取網(wǎng)頁(yè)上的文章和圖片;網(wǎng)頁(yè)上標注文章作者,評論的網(wǎng)頁(yè)及評論數、積分,統計參加活動(dòng)的人數;生成圖片下載代碼,
爬蟲(chóng)需要那些技術(shù)?爬蟲(chóng)基礎:http協(xié)議和http相關(guān)協(xié)議編寫(xiě)python爬蟲(chóng),爬蟲(chóng)怎么爬,爬什么,為什么要爬,爬取到的內容存在哪里,存儲時(shí)間大概是多久,網(wǎng)頁(yè)列表如何下載btw,網(wǎng)頁(yè)列表下載目前能實(shí)現的有九種下載方式,各有優(yōu)缺點(diǎn),對這方面了解不深,提供參考數據爬取,主要可以包括urllib,urllib2等模塊,也可以使用lxml模塊,也可以使用beautifulsoup模塊,采用正則表達式將數據以url的形式存入數據庫。
數據分析:根據輸入的python文件內容獲取其中的數據,即pandas,matplotlib,seaborn等。數據可視化:給數據結構化,以幫助更好的理解數據的價(jià)值和特征。以上所提到的爬蟲(chóng)主要偏向于前端編程部分,后臺的java,c++,python等如果要深入可以將原始數據獲取和預處理后在寫(xiě)入文件中,或者在本地使用https協(xié)議抓取,像uc直達云平臺,則采用了這個(gè)。
不過(guò)主要有幾點(diǎn)是要注意的,第一個(gè),數據的存儲,很有可能你獲取的數據到不了文件存儲的地方,只能像本地文件存儲一樣文件名都為文件的后綴名。第二個(gè),特征提取,這方面做的好的公司有百度地圖的百度圖片的美圖秀秀的拼圖云等。第三個(gè),爬蟲(chóng)模塊的封裝,當然這里的爬蟲(chóng)模塊主要有一個(gè)對接,爬蟲(chóng)通過(guò)相關(guān)模塊獲取數據,對接數據庫以后。
按照一定規則去實(shí)現網(wǎng)頁(yè)中數據的查詢(xún)、更新,然后進(jìn)行數據分析。當然也可以post等其他形式。第四個(gè),復雜問(wèn)題處理,例如多人隱私處理,公眾號打開(kāi)限制,登錄驗證和接口調用處理,綁定公眾號和開(kāi)發(fā)者后端等。這些問(wèn)題依據處理方法不同,會(huì )構成分布式爬蟲(chóng)、網(wǎng)頁(yè)加密、反爬蟲(chóng)等相關(guān)問(wèn)題。第五個(gè),服務(wù)器設計,如何對爬蟲(chóng)程序做一個(gè)很好的保護和監控?這個(gè)和運維部分有很大關(guān)系。這一塊其實(shí)也有很多的問(wèn)題需要思考和處理。 查看全部
抓取網(wǎng)頁(yè)生成電子書(shū)(爬蟲(chóng)基礎:http協(xié)議和http相關(guān)協(xié)議編寫(xiě)python怎么爬)
抓取網(wǎng)頁(yè)生成電子書(shū),批量增刪文件,python實(shí)現網(wǎng)頁(yè)爬蟲(chóng),抓取網(wǎng)頁(yè)上的文章和圖片;網(wǎng)頁(yè)上標注文章作者,評論的網(wǎng)頁(yè)及評論數、積分,統計參加活動(dòng)的人數;生成圖片下載代碼,
爬蟲(chóng)需要那些技術(shù)?爬蟲(chóng)基礎:http協(xié)議和http相關(guān)協(xié)議編寫(xiě)python爬蟲(chóng),爬蟲(chóng)怎么爬,爬什么,為什么要爬,爬取到的內容存在哪里,存儲時(shí)間大概是多久,網(wǎng)頁(yè)列表如何下載btw,網(wǎng)頁(yè)列表下載目前能實(shí)現的有九種下載方式,各有優(yōu)缺點(diǎn),對這方面了解不深,提供參考數據爬取,主要可以包括urllib,urllib2等模塊,也可以使用lxml模塊,也可以使用beautifulsoup模塊,采用正則表達式將數據以url的形式存入數據庫。
數據分析:根據輸入的python文件內容獲取其中的數據,即pandas,matplotlib,seaborn等。數據可視化:給數據結構化,以幫助更好的理解數據的價(jià)值和特征。以上所提到的爬蟲(chóng)主要偏向于前端編程部分,后臺的java,c++,python等如果要深入可以將原始數據獲取和預處理后在寫(xiě)入文件中,或者在本地使用https協(xié)議抓取,像uc直達云平臺,則采用了這個(gè)。
不過(guò)主要有幾點(diǎn)是要注意的,第一個(gè),數據的存儲,很有可能你獲取的數據到不了文件存儲的地方,只能像本地文件存儲一樣文件名都為文件的后綴名。第二個(gè),特征提取,這方面做的好的公司有百度地圖的百度圖片的美圖秀秀的拼圖云等。第三個(gè),爬蟲(chóng)模塊的封裝,當然這里的爬蟲(chóng)模塊主要有一個(gè)對接,爬蟲(chóng)通過(guò)相關(guān)模塊獲取數據,對接數據庫以后。
按照一定規則去實(shí)現網(wǎng)頁(yè)中數據的查詢(xún)、更新,然后進(jìn)行數據分析。當然也可以post等其他形式。第四個(gè),復雜問(wèn)題處理,例如多人隱私處理,公眾號打開(kāi)限制,登錄驗證和接口調用處理,綁定公眾號和開(kāi)發(fā)者后端等。這些問(wèn)題依據處理方法不同,會(huì )構成分布式爬蟲(chóng)、網(wǎng)頁(yè)加密、反爬蟲(chóng)等相關(guān)問(wèn)題。第五個(gè),服務(wù)器設計,如何對爬蟲(chóng)程序做一個(gè)很好的保護和監控?這個(gè)和運維部分有很大關(guān)系。這一塊其實(shí)也有很多的問(wèn)題需要思考和處理。
抓取網(wǎng)頁(yè)生成電子書(shū)(IbookBox網(wǎng)頁(yè)小說(shuō)批量下載閱讀器中輸入任一網(wǎng)頁(yè)地址即可批量抓取和下載)
網(wǎng)站優(yōu)化 ? 優(yōu)采云 發(fā)表了文章 ? 0 個(gè)評論 ? 131 次瀏覽 ? 2021-10-11 05:00
目的是下載一本全分類(lèi)的小說(shuō)網(wǎng)站,并根據分類(lèi)自動(dòng)創(chuàng )建目錄,并按小說(shuō)名稱(chēng)保存為txt文件。一、 搶點(diǎn)子:我的點(diǎn)子是百度的小說(shuō)網(wǎng)站 找小說(shuō)的章節頁(yè),用requests。
在IbookBox網(wǎng)絡(luò )小說(shuō)批量下載閱讀器中輸入任意網(wǎng)址,即可批量抓取下載網(wǎng)絡(luò )上的所有電子書(shū)。1、支持所有小說(shuō)網(wǎng)站。
本劇本僅針對“玄書(shū)網(wǎng)”小說(shuō)網(wǎng)“奇幻奇幻”類(lèi)小說(shuō)進(jìn)行拍攝。供網(wǎng)友參考,可自行修改。文筆粗糙,請勿噴……原文鏈接。
批量下載小說(shuō)爬蟲(chóng)下載v1.0免費版-西溪軟件下載。
IbookBox小說(shuō)批量下載閱讀器,讓讀者遠離垃圾廣告。輸入任意網(wǎng)頁(yè)地址,批量抓取下載網(wǎng)頁(yè)上的所有電子書(shū)。
IbookBox網(wǎng)絡(luò )小說(shuō)批量下載閱讀器是一款可以通過(guò)輸入任意網(wǎng)頁(yè)地址批量抓取下載網(wǎng)絡(luò )上所有電子書(shū)的軟件。支持所有小說(shuō)網(wǎng)站抓取,支持生成抓取的電子書(shū)txt發(fā)送到手機,支持。
軟件介紹 《批量下載小說(shuō)爬蟲(chóng)》是一款非常好用又方便的小說(shuō)批量下載軟件。通過(guò)小說(shuō)爬蟲(chóng),用戶(hù)可以快速下載自己想要的小說(shuō)txt文件放到手機上離線(xiàn)觀(guān)看,軟件爬蟲(chóng)速度。
目的是下載一本全分類(lèi)的小說(shuō)網(wǎng)站,并根據分類(lèi)自動(dòng)創(chuàng )建目錄,并按小說(shuō)名稱(chēng)保存為txt文件。一、 搶點(diǎn)子:我的點(diǎn)子是百度一號。 查看全部
抓取網(wǎng)頁(yè)生成電子書(shū)(IbookBox網(wǎng)頁(yè)小說(shuō)批量下載閱讀器中輸入任一網(wǎng)頁(yè)地址即可批量抓取和下載)
目的是下載一本全分類(lèi)的小說(shuō)網(wǎng)站,并根據分類(lèi)自動(dòng)創(chuàng )建目錄,并按小說(shuō)名稱(chēng)保存為txt文件。一、 搶點(diǎn)子:我的點(diǎn)子是百度的小說(shuō)網(wǎng)站 找小說(shuō)的章節頁(yè),用requests。
在IbookBox網(wǎng)絡(luò )小說(shuō)批量下載閱讀器中輸入任意網(wǎng)址,即可批量抓取下載網(wǎng)絡(luò )上的所有電子書(shū)。1、支持所有小說(shuō)網(wǎng)站。
本劇本僅針對“玄書(shū)網(wǎng)”小說(shuō)網(wǎng)“奇幻奇幻”類(lèi)小說(shuō)進(jìn)行拍攝。供網(wǎng)友參考,可自行修改。文筆粗糙,請勿噴……原文鏈接。
批量下載小說(shuō)爬蟲(chóng)下載v1.0免費版-西溪軟件下載。
IbookBox小說(shuō)批量下載閱讀器,讓讀者遠離垃圾廣告。輸入任意網(wǎng)頁(yè)地址,批量抓取下載網(wǎng)頁(yè)上的所有電子書(shū)。

IbookBox網(wǎng)絡(luò )小說(shuō)批量下載閱讀器是一款可以通過(guò)輸入任意網(wǎng)頁(yè)地址批量抓取下載網(wǎng)絡(luò )上所有電子書(shū)的軟件。支持所有小說(shuō)網(wǎng)站抓取,支持生成抓取的電子書(shū)txt發(fā)送到手機,支持。
軟件介紹 《批量下載小說(shuō)爬蟲(chóng)》是一款非常好用又方便的小說(shuō)批量下載軟件。通過(guò)小說(shuō)爬蟲(chóng),用戶(hù)可以快速下載自己想要的小說(shuō)txt文件放到手機上離線(xiàn)觀(guān)看,軟件爬蟲(chóng)速度。

目的是下載一本全分類(lèi)的小說(shuō)網(wǎng)站,并根據分類(lèi)自動(dòng)創(chuàng )建目錄,并按小說(shuō)名稱(chēng)保存為txt文件。一、 搶點(diǎn)子:我的點(diǎn)子是百度一號。
抓取網(wǎng)頁(yè)生成電子書(shū)(使用Cookie有兩種方式,你知道嗎?(組圖))
網(wǎng)站優(yōu)化 ? 優(yōu)采云 發(fā)表了文章 ? 0 個(gè)評論 ? 174 次瀏覽 ? 2021-10-08 21:27
在實(shí)際情況下,網(wǎng)站的很多內容只有登錄后才能看到,所以我們需要進(jìn)行模擬登錄,利用登錄狀態(tài)進(jìn)行爬取。這里我們需要用到cookies。
現在大多數 網(wǎng)站 使用 cookie 來(lái)跟蹤用戶(hù)的登錄狀態(tài)。一旦網(wǎng)站驗證登錄信息,登錄信息將存儲在瀏覽器的cookie中。網(wǎng)站會(huì )使用這個(gè)cookie作為認證的憑證,在瀏覽網(wǎng)站的頁(yè)面時(shí)返回給服務(wù)器。
由于 cookie 存儲在本地,因此它們可以被篡改和偽造。讓我們來(lái)看看 cookie 是什么樣子的。
打開(kāi)網(wǎng)頁(yè)調試工具,隨意打開(kāi)一個(gè)網(wǎng)頁(yè),在“網(wǎng)絡(luò )”選項卡中,打開(kāi)一個(gè)鏈接,在標題中:
我們把它復制出來(lái)看看:
__guid=137882464.208312339030071800.1455264073383.613;
__huid=10POq43DvPO3U0izV0xej4%2BFDIemVPybee0j1Z1xnJnpQ%3D;
__hsid=825c7462cc8195a5;
somultiswitch=1;
__seedSign=68;
count=1; sessionID=132730903.3074093016427610600.1483758834211.764;
piao34=1;
city_code=101280101;
customEng=1-7
它由鍵值對組成。
接下來(lái)我們以豆豆一書(shū)的詳情頁(yè)為例,講解cookies的使用。
See Do是一個(gè)電子書(shū)下載網(wǎng)站,我的Kindle上的大部分書(shū)都在這里找到。
示例網(wǎng)址為:宇宙是貓的困夢(mèng)-看豆-提供優(yōu)質(zhì)正版電子書(shū)導購服務(wù)
一般情況下,未登錄的用戶(hù)是看不到下載鏈接的,比如:
這本書(shū)的下載鏈接是隱藏的。
頭信息如下:
我們來(lái)看看登錄后的頁(yè)面:
下載鏈接已經(jīng)顯示出來(lái)了,我們來(lái)看一下header信息的Cookie部分
顯然它與之前處于未記錄狀態(tài)的 cookie 不同。
接下來(lái),我們按照上一章抓取騰訊新聞的方法,對示例網(wǎng)址()進(jìn)行HTTP請求:
# coding:utf-8
import requests
from bs4 import BeautifulSoup
url = 'https://kankandou.com/book/vie ... 39%3B
wbdata = requests.get(url).text
soup = BeautifulSoup(wbdata,'lxml')
print(soup)
結果如下:
我們找到了下載鏈接所在的“圖書(shū)購物指南”一欄的HTML代碼:
書(shū)籍導購
去亞馬遜購買(mǎi)《宇宙是貓咪酣睡的夢(mèng)》
就像我們在未登錄狀態(tài)下使用瀏覽器訪(fǎng)問(wèn)本網(wǎng)站時(shí),只顯示亞馬遜的購買(mǎi)鏈接,沒(méi)有電子格式的下載鏈接。
我們嘗試在登錄后使用以下 cookie:
有兩種使用cookies的方法,
1、在header中直接寫(xiě)cookie
完整代碼如下:
# coding:utf-8
import requests
from bs4 import BeautifulSoup
cookie = '''cisession=19dfd70a27ec0eecf1fe3fc2e48b7f91c7c83c60;CNZZDATA1000201968=1815846425-1478580135-https%253A%252F%252Fwww.baidu.com%252F%7C1483922031;Hm_lvt_f805f7762a9a237a0deac37015e9f6d9=1482722012,1483926313;Hm_lpvt_f805f7762a9a237a0deac37015e9f6d9=1483926368'''
header = {
'User-Agent': 'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/53.0.2785.143 Safari/537.36',
'Connection': 'keep-alive',
'accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8',
'Cookie': cookie}
url = 'https://kankandou.com/book/vie ... 39%3B
wbdata = requests.get(url,headers=header).text
soup = BeautifulSoup(wbdata,'lxml')
print(soup)
上面的代碼將響應返回給page(),
我們的搜索響應代碼,
紅色橢圓部分與無(wú)cookie訪(fǎng)問(wèn)時(shí)返回的HTML一致,即亞馬遜的購買(mǎi)鏈接。
紅色矩形是電子書(shū)的下載鏈接,也就是請求中使用的cookie。
與實(shí)際網(wǎng)頁(yè)相比,與網(wǎng)頁(yè)登錄查看的顯示頁(yè)面一致。
功能完成。接下來(lái)看第二種方式
2、使用請求插入cookies
完整代碼如下:
# coding:utf-8
import requests
from bs4 import BeautifulSoup
cookie = {
"cisession":"19dfd70a27ec0eecf1fe3fc2e48b7f91c7c83c60",
"CNZZDATA100020196":"1815846425-1478580135-https%253A%252F%252Fwww.baidu.com%252F%7C1483922031",
"Hm_lvt_f805f7762a9a237a0deac37015e9f6d9":"1482722012,1483926313",
"Hm_lpvt_f805f7762a9a237a0deac37015e9f6d9":"1483926368"
}
url = 'https://kankandou.com/book/vie ... 39%3B
wbdata = requests.get(url,cookies=cookie).text
soup = BeautifulSoup(wbdata,'lxml')
print(soup)
你得到的是登錄后顯示的 HTML:
這樣,我們就可以方便地使用cookies來(lái)獲取需要登錄驗證的網(wǎng)頁(yè)和資源。
這里只是簡(jiǎn)單介紹一下cookies的使用。關(guān)于如何獲取cookie,手動(dòng)復制是一種方式。通過(guò)代碼獲取需要用到Selenium,后面章節會(huì )講解,這里不再展示。
================================================== ====================== 查看全部
抓取網(wǎng)頁(yè)生成電子書(shū)(使用Cookie有兩種方式,你知道嗎?(組圖))
在實(shí)際情況下,網(wǎng)站的很多內容只有登錄后才能看到,所以我們需要進(jìn)行模擬登錄,利用登錄狀態(tài)進(jìn)行爬取。這里我們需要用到cookies。
現在大多數 網(wǎng)站 使用 cookie 來(lái)跟蹤用戶(hù)的登錄狀態(tài)。一旦網(wǎng)站驗證登錄信息,登錄信息將存儲在瀏覽器的cookie中。網(wǎng)站會(huì )使用這個(gè)cookie作為認證的憑證,在瀏覽網(wǎng)站的頁(yè)面時(shí)返回給服務(wù)器。
由于 cookie 存儲在本地,因此它們可以被篡改和偽造。讓我們來(lái)看看 cookie 是什么樣子的。
打開(kāi)網(wǎng)頁(yè)調試工具,隨意打開(kāi)一個(gè)網(wǎng)頁(yè),在“網(wǎng)絡(luò )”選項卡中,打開(kāi)一個(gè)鏈接,在標題中:

我們把它復制出來(lái)看看:
__guid=137882464.208312339030071800.1455264073383.613;
__huid=10POq43DvPO3U0izV0xej4%2BFDIemVPybee0j1Z1xnJnpQ%3D;
__hsid=825c7462cc8195a5;
somultiswitch=1;
__seedSign=68;
count=1; sessionID=132730903.3074093016427610600.1483758834211.764;
piao34=1;
city_code=101280101;
customEng=1-7
它由鍵值對組成。
接下來(lái)我們以豆豆一書(shū)的詳情頁(yè)為例,講解cookies的使用。
See Do是一個(gè)電子書(shū)下載網(wǎng)站,我的Kindle上的大部分書(shū)都在這里找到。
示例網(wǎng)址為:宇宙是貓的困夢(mèng)-看豆-提供優(yōu)質(zhì)正版電子書(shū)導購服務(wù)
一般情況下,未登錄的用戶(hù)是看不到下載鏈接的,比如:

這本書(shū)的下載鏈接是隱藏的。
頭信息如下:

我們來(lái)看看登錄后的頁(yè)面:

下載鏈接已經(jīng)顯示出來(lái)了,我們來(lái)看一下header信息的Cookie部分

顯然它與之前處于未記錄狀態(tài)的 cookie 不同。
接下來(lái),我們按照上一章抓取騰訊新聞的方法,對示例網(wǎng)址()進(jìn)行HTTP請求:
# coding:utf-8
import requests
from bs4 import BeautifulSoup
url = 'https://kankandou.com/book/vie ... 39%3B
wbdata = requests.get(url).text
soup = BeautifulSoup(wbdata,'lxml')
print(soup)
結果如下:

我們找到了下載鏈接所在的“圖書(shū)購物指南”一欄的HTML代碼:
書(shū)籍導購
去亞馬遜購買(mǎi)《宇宙是貓咪酣睡的夢(mèng)》
就像我們在未登錄狀態(tài)下使用瀏覽器訪(fǎng)問(wèn)本網(wǎng)站時(shí),只顯示亞馬遜的購買(mǎi)鏈接,沒(méi)有電子格式的下載鏈接。
我們嘗試在登錄后使用以下 cookie:
有兩種使用cookies的方法,
1、在header中直接寫(xiě)cookie
完整代碼如下:
# coding:utf-8
import requests
from bs4 import BeautifulSoup
cookie = '''cisession=19dfd70a27ec0eecf1fe3fc2e48b7f91c7c83c60;CNZZDATA1000201968=1815846425-1478580135-https%253A%252F%252Fwww.baidu.com%252F%7C1483922031;Hm_lvt_f805f7762a9a237a0deac37015e9f6d9=1482722012,1483926313;Hm_lpvt_f805f7762a9a237a0deac37015e9f6d9=1483926368'''
header = {
'User-Agent': 'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/53.0.2785.143 Safari/537.36',
'Connection': 'keep-alive',
'accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8',
'Cookie': cookie}
url = 'https://kankandou.com/book/vie ... 39%3B
wbdata = requests.get(url,headers=header).text
soup = BeautifulSoup(wbdata,'lxml')
print(soup)
上面的代碼將響應返回給page(),
我們的搜索響應代碼,

紅色橢圓部分與無(wú)cookie訪(fǎng)問(wèn)時(shí)返回的HTML一致,即亞馬遜的購買(mǎi)鏈接。
紅色矩形是電子書(shū)的下載鏈接,也就是請求中使用的cookie。
與實(shí)際網(wǎng)頁(yè)相比,與網(wǎng)頁(yè)登錄查看的顯示頁(yè)面一致。
功能完成。接下來(lái)看第二種方式
2、使用請求插入cookies
完整代碼如下:
# coding:utf-8
import requests
from bs4 import BeautifulSoup
cookie = {
"cisession":"19dfd70a27ec0eecf1fe3fc2e48b7f91c7c83c60",
"CNZZDATA100020196":"1815846425-1478580135-https%253A%252F%252Fwww.baidu.com%252F%7C1483922031",
"Hm_lvt_f805f7762a9a237a0deac37015e9f6d9":"1482722012,1483926313",
"Hm_lpvt_f805f7762a9a237a0deac37015e9f6d9":"1483926368"
}
url = 'https://kankandou.com/book/vie ... 39%3B
wbdata = requests.get(url,cookies=cookie).text
soup = BeautifulSoup(wbdata,'lxml')
print(soup)

你得到的是登錄后顯示的 HTML:
這樣,我們就可以方便地使用cookies來(lái)獲取需要登錄驗證的網(wǎng)頁(yè)和資源。
這里只是簡(jiǎn)單介紹一下cookies的使用。關(guān)于如何獲取cookie,手動(dòng)復制是一種方式。通過(guò)代碼獲取需要用到Selenium,后面章節會(huì )講解,這里不再展示。
================================================== ======================
抓取網(wǎng)頁(yè)生成電子書(shū)(如何將網(wǎng)頁(yè)文章批量抓取、生成電子書(shū)、直接推送到Kindle)
網(wǎng)站優(yōu)化 ? 優(yōu)采云 發(fā)表了文章 ? 0 個(gè)評論 ? 300 次瀏覽 ? 2021-10-08 21:09
很長(cháng)一段時(shí)間,我一直在研究如何將我關(guān)注的網(wǎng)頁(yè)或文章安裝到Kindle中進(jìn)行認真閱讀,但很長(cháng)一段時(shí)間都沒(méi)有真正的進(jìn)展。手動(dòng)格式化書(shū)籍制作電子書(shū)的方法雖然簡(jiǎn)單易行,但對于短小且更新頻繁的網(wǎng)頁(yè)文章來(lái)說(shuō)效率低下。如果有工具可以批量抓取網(wǎng)頁(yè)文章,生成電子書(shū),直接推送到Kindle上就好了。Doocer 是一個(gè)非常有用的工具。
Doocer 是由@lepture 開(kāi)發(fā)的在線(xiàn)服務(wù)。它允許用戶(hù)在 Pocket 帳戶(hù)中提交 URL、RSS 提要地址和 文章 供以后閱讀,然后將它們一一或批量制作成 ePub、MOBI 電子書(shū)。您可以直接在 Doocer 中閱讀所有 文章,或者將它們推送到 Kindle 和 Apple Books 閱讀。
閱讀體驗真的很好
Doocer 生成的電子書(shū)格式良好且引人注目。應該收錄的內容很多,不應該收錄的內容并不多。本書(shū)不僅封面有圖文,還收錄文章目錄、網(wǎng)站出處、文章原作者等信息。Doocer生成的MOBI電子書(shū)支持KF8標準,因此支持Kindle原生替換自定義字體。
由于網(wǎng)站文章通常都有標準和通用的排版規范,所以Doocer生成的電子書(shū)文章中的大小、標題和列表圖例與原創(chuàng )網(wǎng)頁(yè)高度一致文章。原文章中的超鏈接也全部保留,評論信息、廣告等內容全部丟棄。全書(shū)的閱讀體驗非常友好。(當然,如果原網(wǎng)頁(yè)文章的布局亂了,得到的電子書(shū)也可能完全不一樣。)
將網(wǎng)頁(yè)文章制作成電子書(shū)
Doocer完成注冊和登錄后,我們就可以開(kāi)始將文章網(wǎng)頁(yè)制作成電子書(shū)了。首先,我們點(diǎn)擊“NEW BOOK”按鈕新建電子書(shū),輸入電子書(shū)書(shū)名。然后在右上角選擇“添加”,添加文章 URL或RSS提要地址。
以小眾網(wǎng)頁(yè)的文章為例,我們選擇“FEED”,在輸入框中粘貼RSS地址,然后點(diǎn)擊“PARSE”,就會(huì )出現小眾文章的近期列表顯示給我們添加到。我們可以根據需要選擇,也可以點(diǎn)擊“全選”來(lái)全選文章。最后,下拉到頁(yè)面底部,選擇“SAVE”,這些文章就會(huì )被添加到書(shū)中。
實(shí)際上,Doocer 網(wǎng)頁(yè)與 RSS 工具非常相似。實(shí)現了從網(wǎng)站批量抓取文章并集中展示的功能。
要將這些文章轉換成電子書(shū)并推送到Kindle,我們需要進(jìn)行一些簡(jiǎn)單的操作。
首先,根據Doocer個(gè)人設置頁(yè)面的提示,我們打開(kāi)Amazon Kindle的個(gè)人文檔設置,在個(gè)人文檔接收地址中添加Doocer電子書(shū)的發(fā)送地址。完成后,我們再在輸入框中填寫(xiě)Kindle的個(gè)人文檔接收地址,點(diǎn)擊保存。
最后,我們在Doocer中打開(kāi)《少數派》這本書(shū),在頁(yè)面上找到“發(fā)布”,選擇發(fā)送到Kindle。大約 10-30 分鐘,Doocer 將完成圖書(shū)制作并將圖書(shū)推送到 Kindle。
還有一些問(wèn)題需要注意
Doocer目前處于Beta測試階段,還存在一些bug,尤其是中文網(wǎng)站經(jīng)常出現問(wèn)題。好在Doocer官網(wǎng)有開(kāi)發(fā)者對話(huà)頻道,你可以直接聯(lián)系他幫忙解決。
實(shí)現所有操作的自動(dòng)化流程是我認為Doocer最需要努力的方向。Doocer可以像RSS工具一樣抓取網(wǎng)頁(yè)中更新后的文章,但是文章的新抓取以及生成電子書(shū)和推送仍然需要手動(dòng)完成。如果整個(gè)過(guò)程都可以自動(dòng)化,RSS-MOBI-Kindle就可以一口氣搞定,相信實(shí)用性會(huì )更高。 查看全部
抓取網(wǎng)頁(yè)生成電子書(shū)(如何將網(wǎng)頁(yè)文章批量抓取、生成電子書(shū)、直接推送到Kindle)
很長(cháng)一段時(shí)間,我一直在研究如何將我關(guān)注的網(wǎng)頁(yè)或文章安裝到Kindle中進(jìn)行認真閱讀,但很長(cháng)一段時(shí)間都沒(méi)有真正的進(jìn)展。手動(dòng)格式化書(shū)籍制作電子書(shū)的方法雖然簡(jiǎn)單易行,但對于短小且更新頻繁的網(wǎng)頁(yè)文章來(lái)說(shuō)效率低下。如果有工具可以批量抓取網(wǎng)頁(yè)文章,生成電子書(shū),直接推送到Kindle上就好了。Doocer 是一個(gè)非常有用的工具。
Doocer 是由@lepture 開(kāi)發(fā)的在線(xiàn)服務(wù)。它允許用戶(hù)在 Pocket 帳戶(hù)中提交 URL、RSS 提要地址和 文章 供以后閱讀,然后將它們一一或批量制作成 ePub、MOBI 電子書(shū)。您可以直接在 Doocer 中閱讀所有 文章,或者將它們推送到 Kindle 和 Apple Books 閱讀。

閱讀體驗真的很好
Doocer 生成的電子書(shū)格式良好且引人注目。應該收錄的內容很多,不應該收錄的內容并不多。本書(shū)不僅封面有圖文,還收錄文章目錄、網(wǎng)站出處、文章原作者等信息。Doocer生成的MOBI電子書(shū)支持KF8標準,因此支持Kindle原生替換自定義字體。
由于網(wǎng)站文章通常都有標準和通用的排版規范,所以Doocer生成的電子書(shū)文章中的大小、標題和列表圖例與原創(chuàng )網(wǎng)頁(yè)高度一致文章。原文章中的超鏈接也全部保留,評論信息、廣告等內容全部丟棄。全書(shū)的閱讀體驗非常友好。(當然,如果原網(wǎng)頁(yè)文章的布局亂了,得到的電子書(shū)也可能完全不一樣。)

將網(wǎng)頁(yè)文章制作成電子書(shū)
Doocer完成注冊和登錄后,我們就可以開(kāi)始將文章網(wǎng)頁(yè)制作成電子書(shū)了。首先,我們點(diǎn)擊“NEW BOOK”按鈕新建電子書(shū),輸入電子書(shū)書(shū)名。然后在右上角選擇“添加”,添加文章 URL或RSS提要地址。

以小眾網(wǎng)頁(yè)的文章為例,我們選擇“FEED”,在輸入框中粘貼RSS地址,然后點(diǎn)擊“PARSE”,就會(huì )出現小眾文章的近期列表顯示給我們添加到。我們可以根據需要選擇,也可以點(diǎn)擊“全選”來(lái)全選文章。最后,下拉到頁(yè)面底部,選擇“SAVE”,這些文章就會(huì )被添加到書(shū)中。

實(shí)際上,Doocer 網(wǎng)頁(yè)與 RSS 工具非常相似。實(shí)現了從網(wǎng)站批量抓取文章并集中展示的功能。

要將這些文章轉換成電子書(shū)并推送到Kindle,我們需要進(jìn)行一些簡(jiǎn)單的操作。
首先,根據Doocer個(gè)人設置頁(yè)面的提示,我們打開(kāi)Amazon Kindle的個(gè)人文檔設置,在個(gè)人文檔接收地址中添加Doocer電子書(shū)的發(fā)送地址。完成后,我們再在輸入框中填寫(xiě)Kindle的個(gè)人文檔接收地址,點(diǎn)擊保存。

最后,我們在Doocer中打開(kāi)《少數派》這本書(shū),在頁(yè)面上找到“發(fā)布”,選擇發(fā)送到Kindle。大約 10-30 分鐘,Doocer 將完成圖書(shū)制作并將圖書(shū)推送到 Kindle。

還有一些問(wèn)題需要注意
Doocer目前處于Beta測試階段,還存在一些bug,尤其是中文網(wǎng)站經(jīng)常出現問(wèn)題。好在Doocer官網(wǎng)有開(kāi)發(fā)者對話(huà)頻道,你可以直接聯(lián)系他幫忙解決。
實(shí)現所有操作的自動(dòng)化流程是我認為Doocer最需要努力的方向。Doocer可以像RSS工具一樣抓取網(wǎng)頁(yè)中更新后的文章,但是文章的新抓取以及生成電子書(shū)和推送仍然需要手動(dòng)完成。如果整個(gè)過(guò)程都可以自動(dòng)化,RSS-MOBI-Kindle就可以一口氣搞定,相信實(shí)用性會(huì )更高。
抓取網(wǎng)頁(yè)生成電子書(shū)(小說(shuō)爬蟲(chóng)下載器(小說(shuō)批量下載神器)能去為你帶來(lái))
網(wǎng)站優(yōu)化 ? 優(yōu)采云 發(fā)表了文章 ? 0 個(gè)評論 ? 1787 次瀏覽 ? 2021-10-08 21:04
小說(shuō)爬蟲(chóng)下載器(小說(shuō)批量下載神器)可以給你帶來(lái)更好的專(zhuān)業(yè)智能小說(shuō)采集工具,各種不同的小說(shuō)內容都可以很方便的找到。
批量下載小說(shuō)爬蟲(chóng)是一款免費的小說(shuō)下載閱讀器,可以幫助用戶(hù)將自己喜歡的小說(shuō)批量下載到本地,支持自己選擇下載源。有需要的用戶(hù)不要錯過(guò)。歡迎下載使用!
IbookBox小說(shuō)批量下載閱讀器是一款功能強大的小說(shuō)批量下載器。本軟件可以抓取任何小說(shuō)網(wǎng)站書(shū)籍到本地,并能自動(dòng)合并成txt電子書(shū)手機閱讀,無(wú)廣告無(wú)插件,進(jìn)任何網(wǎng)。
在IbookBox網(wǎng)絡(luò )小說(shuō)批量下載閱讀器中輸入任意網(wǎng)頁(yè)地址,即可批量抓取下載網(wǎng)絡(luò )上的所有電子書(shū)。1、支持所有小說(shuō)網(wǎng)站抓取。2、支持將抓取的電子書(shū)生成txt發(fā)送到手機。3、 支持。
如果您在使用《IbookBox網(wǎng)站小說(shuō)批量抓取下載專(zhuān)家》過(guò)程中遇到問(wèn)題,請聯(lián)系軟件開(kāi)發(fā)商武漢伊文科技有限公司,軟銀世界只負責支付注冊費和注冊。正在發(fā)送信息。
本劇本僅針對“玄書(shū)網(wǎng)”小說(shuō)網(wǎng)“奇幻奇幻”類(lèi)小說(shuō)進(jìn)行拍攝。供網(wǎng)友參考,可自行修改。文筆粗糙,請勿噴……原文鏈接。
小說(shuō)批量下載器聚合閱讀合集,主要提供小說(shuō)批量下載器相關(guān)的最新資源下載。訂閱小說(shuō)批量下載器標簽主題,您可以第一時(shí)間了解小說(shuō)批量下載器的最新下載資源和主題和包。
輸入任意網(wǎng)頁(yè)地址,批量抓取下載網(wǎng)絡(luò )上的所有電子書(shū)。1、支持所有小說(shuō)網(wǎng)站抓取2、支持抓取的電子書(shū)生成txt發(fā)送到手機。3、 支持將電子書(shū)自動(dòng)存放在您自己的郵箱中。 查看全部
抓取網(wǎng)頁(yè)生成電子書(shū)(小說(shuō)爬蟲(chóng)下載器(小說(shuō)批量下載神器)能去為你帶來(lái))
小說(shuō)爬蟲(chóng)下載器(小說(shuō)批量下載神器)可以給你帶來(lái)更好的專(zhuān)業(yè)智能小說(shuō)采集工具,各種不同的小說(shuō)內容都可以很方便的找到。
批量下載小說(shuō)爬蟲(chóng)是一款免費的小說(shuō)下載閱讀器,可以幫助用戶(hù)將自己喜歡的小說(shuō)批量下載到本地,支持自己選擇下載源。有需要的用戶(hù)不要錯過(guò)。歡迎下載使用!
IbookBox小說(shuō)批量下載閱讀器是一款功能強大的小說(shuō)批量下載器。本軟件可以抓取任何小說(shuō)網(wǎng)站書(shū)籍到本地,并能自動(dòng)合并成txt電子書(shū)手機閱讀,無(wú)廣告無(wú)插件,進(jìn)任何網(wǎng)。
在IbookBox網(wǎng)絡(luò )小說(shuō)批量下載閱讀器中輸入任意網(wǎng)頁(yè)地址,即可批量抓取下載網(wǎng)絡(luò )上的所有電子書(shū)。1、支持所有小說(shuō)網(wǎng)站抓取。2、支持將抓取的電子書(shū)生成txt發(fā)送到手機。3、 支持。
如果您在使用《IbookBox網(wǎng)站小說(shuō)批量抓取下載專(zhuān)家》過(guò)程中遇到問(wèn)題,請聯(lián)系軟件開(kāi)發(fā)商武漢伊文科技有限公司,軟銀世界只負責支付注冊費和注冊。正在發(fā)送信息。

本劇本僅針對“玄書(shū)網(wǎng)”小說(shuō)網(wǎng)“奇幻奇幻”類(lèi)小說(shuō)進(jìn)行拍攝。供網(wǎng)友參考,可自行修改。文筆粗糙,請勿噴……原文鏈接。
小說(shuō)批量下載器聚合閱讀合集,主要提供小說(shuō)批量下載器相關(guān)的最新資源下載。訂閱小說(shuō)批量下載器標簽主題,您可以第一時(shí)間了解小說(shuō)批量下載器的最新下載資源和主題和包。

輸入任意網(wǎng)頁(yè)地址,批量抓取下載網(wǎng)絡(luò )上的所有電子書(shū)。1、支持所有小說(shuō)網(wǎng)站抓取2、支持抓取的電子書(shū)生成txt發(fā)送到手機。3、 支持將電子書(shū)自動(dòng)存放在您自己的郵箱中。
抓取網(wǎng)頁(yè)生成電子書(shū)(用urllib2的Request類(lèi)構建一個(gè)request接下來(lái)獲取響應頁(yè)面內容)
網(wǎng)站優(yōu)化 ? 優(yōu)采云 發(fā)表了文章 ? 0 個(gè)評論 ? 107 次瀏覽 ? 2021-10-08 19:31
使用 urllib2 的 Request 類(lèi)構造請求
url = "https://www.qiushibaike.com/"
request = urllib2.Request(url)
接下來(lái)使用urllib2的urlopen方法請求頁(yè)面并獲取響應(即頁(yè)面內容)
response = urllib2.urlopen(request)
打印得到的內容
print response.read()
運行我們的腳本,結果是一個(gè)錯誤:
Traceback (most recent call last):
File "00_get_a_page.py", line 19, in
response = urllib2.urlopen(request)
File "D:\Python27\lib\urllib2.py", line 154, in urlopen
return opener.open(url, data, timeout)
File "D:\Python27\lib\urllib2.py", line 429, in open
response = self._open(req, data)
File "D:\Python27\lib\urllib2.py", line 447, in _open
'_open', req)
File "D:\Python27\lib\urllib2.py", line 407, in _call_chain
result = func(*args)
File "D:\Python27\lib\urllib2.py", line 1241, in https_open
context=self._context)
File "D:\Python27\lib\urllib2.py", line 1201, in do_open
r = h.getresponse(buffering=True)
File "D:\Python27\lib\httplib.py", line 1121, in getresponse
response.begin()
File "D:\Python27\lib\httplib.py", line 438, in begin
version, status, reason = self._read_status()
File "D:\Python27\lib\httplib.py", line 402, in _read_status
raise BadStatusLine(line)
httplib.BadStatusLine: ''
這是因為尷尬百科對爬蟲(chóng)做了一些反爬蟲(chóng)優(yōu)化,你必須是瀏覽器才能訪(fǎng)問(wèn)頁(yè)面。
不過(guò)沒(méi)關(guān)系,瀏覽器的信息是通過(guò)headers實(shí)現的。我們可以使用 urllib2 設置瀏覽器信息頭,將我們的程序偽裝成瀏覽器。
設置頭驗證信息
user_agent = "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/49.0.2623.75 Safari/537.36 LBBROWSER"
headers = {"User-Agent":user_agent}
可以看到我們設置了 User-Agent 字段,并將其封裝為字典 headers,后面會(huì )用到。
user_agent 的內容為 Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/49.0.2623.75 Safari/537.36 LBBROWSER,這是我用的獵豹瀏覽器的頭信息,可以通過(guò)F12開(kāi)發(fā)者工具查看。
重構請求并打印得到的響應頁(yè)面的內容
request = urllib2.Request(url,headers=headers)
可以發(fā)現,在構造請求的時(shí)候,除了url參數,我們還把封裝好的帶有瀏覽器信息的headers傳遞給了urllib2.Request的headers參數。
[!] headers=headers 必須指定,否則headers會(huì )默認傳給urllib2.Request的第二個(gè)參數,但是第二個(gè)參數不是headers,如下:
>>> help("urllib2.Request")
Help on class Request in urllib2:
urllib2.Request = class Request
| Methods defined here:
| __getattr__(self, attr)
| __init__(self, url, data=None, headers={}, origin_req_host=None, unverifiable=False)
用同樣的方式重新請求頁(yè)面,得到響應并打印出來(lái)
成功獲得!但是我們的漢字沒(méi)有出現。
這是因為我們獲取的response.read()的編碼方式是UTF-8字節流數據,而我們python2.7默認的編解碼方式是ASCII,導致出現亂碼。
我們打印的時(shí)候,指定解碼方式為UTF-8,試試看。
print response.read().decode('utf-8')
成功!
至此我們已經(jīng)獲得了整個(gè)頁(yè)面的完整信息。 查看全部
抓取網(wǎng)頁(yè)生成電子書(shū)(用urllib2的Request類(lèi)構建一個(gè)request接下來(lái)獲取響應頁(yè)面內容)
使用 urllib2 的 Request 類(lèi)構造請求
url = "https://www.qiushibaike.com/"
request = urllib2.Request(url)
接下來(lái)使用urllib2的urlopen方法請求頁(yè)面并獲取響應(即頁(yè)面內容)
response = urllib2.urlopen(request)
打印得到的內容
print response.read()
運行我們的腳本,結果是一個(gè)錯誤:
Traceback (most recent call last):
File "00_get_a_page.py", line 19, in
response = urllib2.urlopen(request)
File "D:\Python27\lib\urllib2.py", line 154, in urlopen
return opener.open(url, data, timeout)
File "D:\Python27\lib\urllib2.py", line 429, in open
response = self._open(req, data)
File "D:\Python27\lib\urllib2.py", line 447, in _open
'_open', req)
File "D:\Python27\lib\urllib2.py", line 407, in _call_chain
result = func(*args)
File "D:\Python27\lib\urllib2.py", line 1241, in https_open
context=self._context)
File "D:\Python27\lib\urllib2.py", line 1201, in do_open
r = h.getresponse(buffering=True)
File "D:\Python27\lib\httplib.py", line 1121, in getresponse
response.begin()
File "D:\Python27\lib\httplib.py", line 438, in begin
version, status, reason = self._read_status()
File "D:\Python27\lib\httplib.py", line 402, in _read_status
raise BadStatusLine(line)
httplib.BadStatusLine: ''
這是因為尷尬百科對爬蟲(chóng)做了一些反爬蟲(chóng)優(yōu)化,你必須是瀏覽器才能訪(fǎng)問(wèn)頁(yè)面。
不過(guò)沒(méi)關(guān)系,瀏覽器的信息是通過(guò)headers實(shí)現的。我們可以使用 urllib2 設置瀏覽器信息頭,將我們的程序偽裝成瀏覽器。
設置頭驗證信息
user_agent = "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/49.0.2623.75 Safari/537.36 LBBROWSER"
headers = {"User-Agent":user_agent}
可以看到我們設置了 User-Agent 字段,并將其封裝為字典 headers,后面會(huì )用到。
user_agent 的內容為 Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/49.0.2623.75 Safari/537.36 LBBROWSER,這是我用的獵豹瀏覽器的頭信息,可以通過(guò)F12開(kāi)發(fā)者工具查看。
重構請求并打印得到的響應頁(yè)面的內容
request = urllib2.Request(url,headers=headers)
可以發(fā)現,在構造請求的時(shí)候,除了url參數,我們還把封裝好的帶有瀏覽器信息的headers傳遞給了urllib2.Request的headers參數。
[!] headers=headers 必須指定,否則headers會(huì )默認傳給urllib2.Request的第二個(gè)參數,但是第二個(gè)參數不是headers,如下:
>>> help("urllib2.Request")
Help on class Request in urllib2:
urllib2.Request = class Request
| Methods defined here:
| __getattr__(self, attr)
| __init__(self, url, data=None, headers={}, origin_req_host=None, unverifiable=False)
用同樣的方式重新請求頁(yè)面,得到響應并打印出來(lái)
成功獲得!但是我們的漢字沒(méi)有出現。
這是因為我們獲取的response.read()的編碼方式是UTF-8字節流數據,而我們python2.7默認的編解碼方式是ASCII,導致出現亂碼。
我們打印的時(shí)候,指定解碼方式為UTF-8,試試看。
print response.read().decode('utf-8')
成功!
至此我們已經(jīng)獲得了整個(gè)頁(yè)面的完整信息。
抓取網(wǎng)頁(yè)生成電子書(shū)(廖雪峰:Python教程爬下來(lái)做成PDF電子書(shū)方便離線(xiàn)閱讀)
網(wǎng)站優(yōu)化 ? 優(yōu)采云 發(fā)表了文章 ? 0 個(gè)評論 ? 113 次瀏覽 ? 2021-10-08 19:27
免責聲明:本文僅供學(xué)習參考,不得用于其他用途。爬取過(guò)程中注意控制請求速度,以免給服務(wù)器造成太大壓力
寫(xiě)爬蟲(chóng)好像不比用Python好。Python社區提供的爬蟲(chóng)工具之多,看得你眼花繚亂。你可以用各種可以直接使用的庫在幾分鐘內編寫(xiě)一個(gè)爬蟲(chóng)。今天,我將嘗試寫(xiě)一個(gè)爬蟲(chóng)。廖雪峰老師的Python教程爬下來(lái)制作了PDF電子書(shū)供離線(xiàn)閱讀。
在開(kāi)始寫(xiě)爬蟲(chóng)之前,我們先來(lái)分析一下網(wǎng)站的頁(yè)面結構。頁(yè)面左側為教程目錄大綱。每個(gè)URL對應右邊文章的一篇文章,右上角是文章的標題,中間是文章的正文部分。正文內容是我們關(guān)注的重點(diǎn)。我們要抓取的數據是所有網(wǎng)頁(yè)的正文部分。下面是用戶(hù)的評論區。評論區對我們沒(méi)有用。,所以可以忽略。
工具準備
搞清楚網(wǎng)站的基本結構后,就可以開(kāi)始準備爬蟲(chóng)依賴(lài)的工具包了。requests和beautifulsoup是爬蟲(chóng)的兩大神器,reuqests用于網(wǎng)絡(luò )請求,beautifulsoup用于操作html數據。有了這兩個(gè)班車(chē),我們就可以順利工作了。我們不需要像scrapy這樣的爬蟲(chóng)框架。小程序有點(diǎn)像大錘。另外,既然是把html文件轉換成pdf,就得有相應的庫支持。wkhtmltopdf 是一個(gè)非常好的工具。它可用于從 html 到 pdf 的多平臺轉換。pdfkit 是 wkhtmltopdf 的 Python 包。先安裝以下依賴(lài)包,然后安裝wkhtmltopdf
pip install requests
pip install beautifulsoup4
pip install pdfkit
安裝 wkhtmltopdf
Windows平臺下,直接從wkhtmltopdf官網(wǎng)下載穩定版進(jìn)行安裝。安裝完成后,將程序的執行路徑添加到系統環(huán)境$PATH變量中,否則pdfkit將找不到wkhtmltopdf并出現“No wkhtmltopdf executable found”的錯誤提示。Ubuntu 和 CentOS 可以直接從命令行安裝
$ sudo apt-get install wkhtmltopdf # ubuntu
$ sudo yum intsall wkhtmltopdf # centos
爬蟲(chóng)實(shí)現
一切準備就緒后,就可以開(kāi)始編寫(xiě)代碼了,但是在編寫(xiě)代碼之前,應該先整理一下思路。該程序的目的是將所有URL對應的html body部分保存在本地,然后使用pdfkit將這些文件轉換為pdf文件。讓我們拆分任務(wù)。首先將某個(gè)URL對應的html body保存到本地,然后找到所有的URL進(jìn)行同樣的操作。
使用Chrome瀏覽器找到頁(yè)面body部分的標簽,按F12找到body對應的div標簽:
,div是網(wǎng)頁(yè)的body內容。使用requests在本地加載整個(gè)頁(yè)面后,可以使用beautifulsoup操作HTML的dom元素來(lái)提取body內容。
具體實(shí)現代碼如下: 使用soup.find_all函數查找body標簽,然后將body部分的內容保存到a.html文件中。
def parse_url_to_html(url):
response = requests.get(url)
soup = BeautifulSoup(response.content, "html.parser")
body = soup.find_all(class_="x-wiki-content")[0]
html = str(body)
with open("a.html", 'wb') as f:
f.write(html)
第二步是解析出頁(yè)面左側的所有URL。同樣的方法,找到左邊的菜單標簽
社會(huì )的
鏈接
? foofish 2016 查看全部
抓取網(wǎng)頁(yè)生成電子書(shū)(廖雪峰:Python教程爬下來(lái)做成PDF電子書(shū)方便離線(xiàn)閱讀)
免責聲明:本文僅供學(xué)習參考,不得用于其他用途。爬取過(guò)程中注意控制請求速度,以免給服務(wù)器造成太大壓力
寫(xiě)爬蟲(chóng)好像不比用Python好。Python社區提供的爬蟲(chóng)工具之多,看得你眼花繚亂。你可以用各種可以直接使用的庫在幾分鐘內編寫(xiě)一個(gè)爬蟲(chóng)。今天,我將嘗試寫(xiě)一個(gè)爬蟲(chóng)。廖雪峰老師的Python教程爬下來(lái)制作了PDF電子書(shū)供離線(xiàn)閱讀。
在開(kāi)始寫(xiě)爬蟲(chóng)之前,我們先來(lái)分析一下網(wǎng)站的頁(yè)面結構。頁(yè)面左側為教程目錄大綱。每個(gè)URL對應右邊文章的一篇文章,右上角是文章的標題,中間是文章的正文部分。正文內容是我們關(guān)注的重點(diǎn)。我們要抓取的數據是所有網(wǎng)頁(yè)的正文部分。下面是用戶(hù)的評論區。評論區對我們沒(méi)有用。,所以可以忽略。

工具準備
搞清楚網(wǎng)站的基本結構后,就可以開(kāi)始準備爬蟲(chóng)依賴(lài)的工具包了。requests和beautifulsoup是爬蟲(chóng)的兩大神器,reuqests用于網(wǎng)絡(luò )請求,beautifulsoup用于操作html數據。有了這兩個(gè)班車(chē),我們就可以順利工作了。我們不需要像scrapy這樣的爬蟲(chóng)框架。小程序有點(diǎn)像大錘。另外,既然是把html文件轉換成pdf,就得有相應的庫支持。wkhtmltopdf 是一個(gè)非常好的工具。它可用于從 html 到 pdf 的多平臺轉換。pdfkit 是 wkhtmltopdf 的 Python 包。先安裝以下依賴(lài)包,然后安裝wkhtmltopdf
pip install requests
pip install beautifulsoup4
pip install pdfkit
安裝 wkhtmltopdf
Windows平臺下,直接從wkhtmltopdf官網(wǎng)下載穩定版進(jìn)行安裝。安裝完成后,將程序的執行路徑添加到系統環(huán)境$PATH變量中,否則pdfkit將找不到wkhtmltopdf并出現“No wkhtmltopdf executable found”的錯誤提示。Ubuntu 和 CentOS 可以直接從命令行安裝
$ sudo apt-get install wkhtmltopdf # ubuntu
$ sudo yum intsall wkhtmltopdf # centos
爬蟲(chóng)實(shí)現
一切準備就緒后,就可以開(kāi)始編寫(xiě)代碼了,但是在編寫(xiě)代碼之前,應該先整理一下思路。該程序的目的是將所有URL對應的html body部分保存在本地,然后使用pdfkit將這些文件轉換為pdf文件。讓我們拆分任務(wù)。首先將某個(gè)URL對應的html body保存到本地,然后找到所有的URL進(jìn)行同樣的操作。
使用Chrome瀏覽器找到頁(yè)面body部分的標簽,按F12找到body對應的div標簽:
,div是網(wǎng)頁(yè)的body內容。使用requests在本地加載整個(gè)頁(yè)面后,可以使用beautifulsoup操作HTML的dom元素來(lái)提取body內容。

具體實(shí)現代碼如下: 使用soup.find_all函數查找body標簽,然后將body部分的內容保存到a.html文件中。
def parse_url_to_html(url):
response = requests.get(url)
soup = BeautifulSoup(response.content, "html.parser")
body = soup.find_all(class_="x-wiki-content")[0]
html = str(body)
with open("a.html", 'wb') as f:
f.write(html)
第二步是解析出頁(yè)面左側的所有URL。同樣的方法,找到左邊的菜單標簽
社會(huì )的
鏈接
? foofish 2016
抓取網(wǎng)頁(yè)生成電子書(shū)(如何快速上手,做出自己的網(wǎng)頁(yè)不是技術(shù)要點(diǎn)?)
網(wǎng)站優(yōu)化 ? 優(yōu)采云 發(fā)表了文章 ? 0 個(gè)評論 ? 246 次瀏覽 ? 2021-10-08 12:18
上一篇簡(jiǎn)單展示了我們將網(wǎng)頁(yè)轉成PDF的結果,特別適用于序列化的網(wǎng)頁(yè)文章,組織成一本書(shū)。
本文也為大家簡(jiǎn)單講解了技術(shù)要點(diǎn),讓大家快速上手,制作屬于自己的電子書(shū)。
技術(shù)要點(diǎn)
一、 抓取網(wǎng)頁(yè)并保存到本地
因為大部分網(wǎng)頁(yè)都收錄圖片,所以很多網(wǎng)頁(yè)都不是普通的靜態(tài)網(wǎng)頁(yè)。相應的內容是在瀏覽器加載過(guò)程中隨著(zhù)瀏覽器滾動(dòng)條的滾動(dòng)而加載的。
所以如果你只想簡(jiǎn)單地發(fā)送一個(gè) URL 并返回一個(gè) PDF 文件,它通常會(huì )失敗。
使用代碼控制瀏覽器,模擬瀏覽器的瀏覽操作。這是一個(gè)工具:selenium,我相信通常關(guān)注網(wǎng)絡(luò )抓取的人對它很熟悉。
作者嘗試搜索selenium+C#感興趣的詞,沒(méi)想到selenium竟然是一個(gè)支持多語(yǔ)言的工具。百度自查的具體介紹,以下是百度百科介紹的簡(jiǎn)單截取。
Selenium [1] 是一種用于 Web 應用程序測試的工具。Selenium 測試直接在瀏覽器中運行,就像真正的用戶(hù)在操作一樣。支持的瀏覽器包括IE(7, 8, 9, 10, 11), Mozilla Firefox, Safari, Google Chrome, Opera等。本工具的主要功能包括:測試與瀏覽器的兼容性-測試您的應用程序可以在不同的瀏覽器和操作系統上運行良好測試系統功能-創(chuàng )建回歸測試以驗證軟件功能和用戶(hù)需求支持自動(dòng)記錄動(dòng)作和自動(dòng)生成.Net、Java、Perl等多種語(yǔ)言的測試腳本。
所以,不要犯錯,犯一般錯誤,認為python很容易用于網(wǎng)頁(yè)抓取,你可以使用C#中的常用工具。當前的工具不僅限于實(shí)現一種語(yǔ)言。我相信 dotNET 會(huì )變得更加開(kāi)源。當生態(tài)越來(lái)越好時(shí),會(huì )出現更多方便的工具。
在 C# 代碼中,Seenium 用于控制瀏覽器行為,在瀏覽器上打開(kāi)不同的 URL,然后下載相應的文件。
因為我們想要圖形版本的數據,而不僅僅是一些結構化的數據,最簡(jiǎn)單的方法是將類(lèi)似瀏覽器行為的CTRL+S作為網(wǎng)頁(yè)保存到本地。也用代碼來(lái)模擬發(fā)送鍵和擊鍵的方式。有興趣的讀者可以參考以下代碼。
網(wǎng)上同樣的就是python的實(shí)現,作者簡(jiǎn)單的修改成了dotNET版本。
[DllImport("user32.dll", EntryPoint = "keybd_event", SetLastError = true)]
public static extern void keybd_event(System.Windows.Forms.Keys bVk, byte bScan, uint dwFlags, uint dwExtraInfo);
private static void SaveHtml(ChromeDriver driver)
{
uint KEYEVENTF_KEYUP = 2;
keybd_event(Keys.ControlKey, 0, 0, 0);
keybd_event(Keys.S, 0, 0, 0);
keybd_event(Keys.ControlKey, 0, KEYEVENTF_KEYUP, 0);
Thread.Sleep(3000);
keybd_event(Keys.Enter, 0, 0, 0);
keybd_event(Keys.Enter, 0, KEYEVENTF_KEYUP, 0);
Thread.Sleep(5000);
driver.Close();
driver.Quit();
}
二、將多個(gè)網(wǎng)頁(yè)保存為PDF
雖然WORD也可以用來(lái)打開(kāi)網(wǎng)頁(yè),但估計WORD是用IE技術(shù)渲染網(wǎng)頁(yè)的,很多功能無(wú)法恢復。所以直接轉PDF更科學(xué)。
PDF 的另一個(gè)好處是幾乎所有的 PDF 閱讀器都可以隨意打開(kāi)和顯示原創(chuàng )效果。雖然 PDF 的編輯能力非常有限,但我們的目的主要是為了閱讀,所以將 HTML 轉換為 PDF 是非常理想的。
它可以將多個(gè)網(wǎng)頁(yè)轉換為一個(gè)PDF文件,閱讀時(shí)更加連貫。
網(wǎng)頁(yè)轉PDF的工具是wkhtmltopdf,也是一個(gè)命令行工具,可以多種語(yǔ)言調用。當然,dotNET 調用是沒(méi)有問(wèn)題的,但是為了更好的體驗,還是應該在 PowerShell 上使用。
wkhtmltopdf的安裝方法,自行搜索資料學(xué)習,都在下一步完成,最后記得設置環(huán)境變量,讓CMD和PowerShell識別。
平時(shí)可以看到的python的html to pdf功能,其實(shí)底層也是用wkhtmltopdf完成的。
要將多個(gè)網(wǎng)頁(yè)轉換為PDF,需要考慮排序問(wèn)題。這時(shí)候使用Excel催化劑可以輕松實(shí)現HTML排版順序問(wèn)題。
一般來(lái)說(shuō),我們是按順序下載網(wǎng)頁(yè)的,所以簡(jiǎn)單的使用Excel Catalyst的遍歷文件功能來(lái)遍歷文件信息,在Excel上做一個(gè)排序處理,手動(dòng)調整一些特殊文件的順序。
另一個(gè)自定義函數stringjoin可以快速將多個(gè)文件合并成一個(gè)字符串組合,用空格隔開(kāi),每條記錄都要用雙引號括起來(lái)。
打開(kāi)我們的 PowerShell ISE 軟件,它是 win10 自帶的。其他系統也有,可以自行搜索相關(guān)教程打開(kāi)。
相信很多讀者也和作者有同感。他們覺(jué)得命令行很可怕。它是一系列代碼,尤其是幫助文件。
事實(shí)上,它確實(shí)突破了心理恐懼。命令行工具和我們在Excel上寫(xiě)函數的原理都是一個(gè)函數名和各種參數,但是命令行可以有很多參數。
以下是我們如何在 PowerShell 上使用單個(gè)命令將多個(gè) html 文件合并為一個(gè) PDF 文件。
筆者還費了一番功夫閱讀幫助文檔,寫(xiě)出了更多命令的功能,比如添加頁(yè)眉和頁(yè)腳的功能。
開(kāi)頭的參數是全局參數。具體說(shuō)明請參考官方文檔。
全局參數寫(xiě)好后,攤開(kāi)多個(gè)html文件,最后加上pdf文件的名字,弄的太多了。該文件使用相對路徑。您需要將PowerShell的當前路徑切換到html存儲文件夾。切換命令是 CD。
終于,激動(dòng)人心的時(shí)刻到了,可以順利生成pdf文件了。
包括頁(yè)眉和頁(yè)腳信息,一個(gè)總共400多頁(yè)的PDF電子書(shū)誕生了。
有興趣的讀者不妨將自己喜歡的網(wǎng)頁(yè)相冊制作成PDF文件,方便查閱。之前的錯誤是追求PDF閱讀器的精簡(jiǎn),現在我重新使用【福昕閱讀器】(感謝上一篇文章后讀者朋友的推薦),舊的免費PDF閱讀軟件可以進(jìn)行基于文本的PDF文件注釋并記筆記。這里推薦大家使用。
同樣,搜索關(guān)鍵詞后,會(huì )出現一個(gè)關(guān)鍵詞的列表。比如在學(xué)習DAX的過(guò)程中,如果想像參考書(shū)一樣查找ALLSELECT函數的用法,可以搜索全文。這比使用搜索引擎查找要好得多。學(xué)習后,您還可以突出顯示并做筆記。
結束語(yǔ)
在研究本文功能實(shí)現的過(guò)程中,我重新發(fā)現了dotNET的強大。不用太羨慕python的網(wǎng)絡(luò )爬蟲(chóng)。它在 dotNET 中仍然非常有用。
同時(shí),在 Windows 環(huán)境中,沒(méi)有什么比 dotNET 開(kāi)發(fā)更高效的了。再好的python,共享和交互也是一件頭疼的事,但dotNET桌面開(kāi)發(fā)自然是最大的優(yōu)勢。
在OFFICE環(huán)境下開(kāi)發(fā)的優(yōu)勢就更詳細了。其實(shí)本文的功能也可以移到Excel環(huán)境中無(wú)痛執行。以后有空再慢慢優(yōu)化整個(gè)流程。
將 html 轉換為 PDF 帶來(lái)了極大的方便。該內容在互聯(lián)網(wǎng)上,而不是您自己的數據,并且可能隨時(shí)被刪除和無(wú)法訪(fǎng)問(wèn)。壓力下,肯定撐不了多久,所以我提前計劃,先下載到本地,哈哈)。 查看全部
抓取網(wǎng)頁(yè)生成電子書(shū)(如何快速上手,做出自己的網(wǎng)頁(yè)不是技術(shù)要點(diǎn)?)
上一篇簡(jiǎn)單展示了我們將網(wǎng)頁(yè)轉成PDF的結果,特別適用于序列化的網(wǎng)頁(yè)文章,組織成一本書(shū)。
本文也為大家簡(jiǎn)單講解了技術(shù)要點(diǎn),讓大家快速上手,制作屬于自己的電子書(shū)。
技術(shù)要點(diǎn)
一、 抓取網(wǎng)頁(yè)并保存到本地
因為大部分網(wǎng)頁(yè)都收錄圖片,所以很多網(wǎng)頁(yè)都不是普通的靜態(tài)網(wǎng)頁(yè)。相應的內容是在瀏覽器加載過(guò)程中隨著(zhù)瀏覽器滾動(dòng)條的滾動(dòng)而加載的。
所以如果你只想簡(jiǎn)單地發(fā)送一個(gè) URL 并返回一個(gè) PDF 文件,它通常會(huì )失敗。
使用代碼控制瀏覽器,模擬瀏覽器的瀏覽操作。這是一個(gè)工具:selenium,我相信通常關(guān)注網(wǎng)絡(luò )抓取的人對它很熟悉。
作者嘗試搜索selenium+C#感興趣的詞,沒(méi)想到selenium竟然是一個(gè)支持多語(yǔ)言的工具。百度自查的具體介紹,以下是百度百科介紹的簡(jiǎn)單截取。
Selenium [1] 是一種用于 Web 應用程序測試的工具。Selenium 測試直接在瀏覽器中運行,就像真正的用戶(hù)在操作一樣。支持的瀏覽器包括IE(7, 8, 9, 10, 11), Mozilla Firefox, Safari, Google Chrome, Opera等。本工具的主要功能包括:測試與瀏覽器的兼容性-測試您的應用程序可以在不同的瀏覽器和操作系統上運行良好測試系統功能-創(chuàng )建回歸測試以驗證軟件功能和用戶(hù)需求支持自動(dòng)記錄動(dòng)作和自動(dòng)生成.Net、Java、Perl等多種語(yǔ)言的測試腳本。
所以,不要犯錯,犯一般錯誤,認為python很容易用于網(wǎng)頁(yè)抓取,你可以使用C#中的常用工具。當前的工具不僅限于實(shí)現一種語(yǔ)言。我相信 dotNET 會(huì )變得更加開(kāi)源。當生態(tài)越來(lái)越好時(shí),會(huì )出現更多方便的工具。
在 C# 代碼中,Seenium 用于控制瀏覽器行為,在瀏覽器上打開(kāi)不同的 URL,然后下載相應的文件。
因為我們想要圖形版本的數據,而不僅僅是一些結構化的數據,最簡(jiǎn)單的方法是將類(lèi)似瀏覽器行為的CTRL+S作為網(wǎng)頁(yè)保存到本地。也用代碼來(lái)模擬發(fā)送鍵和擊鍵的方式。有興趣的讀者可以參考以下代碼。
網(wǎng)上同樣的就是python的實(shí)現,作者簡(jiǎn)單的修改成了dotNET版本。
[DllImport("user32.dll", EntryPoint = "keybd_event", SetLastError = true)]
public static extern void keybd_event(System.Windows.Forms.Keys bVk, byte bScan, uint dwFlags, uint dwExtraInfo);
private static void SaveHtml(ChromeDriver driver)
{
uint KEYEVENTF_KEYUP = 2;
keybd_event(Keys.ControlKey, 0, 0, 0);
keybd_event(Keys.S, 0, 0, 0);
keybd_event(Keys.ControlKey, 0, KEYEVENTF_KEYUP, 0);
Thread.Sleep(3000);
keybd_event(Keys.Enter, 0, 0, 0);
keybd_event(Keys.Enter, 0, KEYEVENTF_KEYUP, 0);
Thread.Sleep(5000);
driver.Close();
driver.Quit();
}
二、將多個(gè)網(wǎng)頁(yè)保存為PDF
雖然WORD也可以用來(lái)打開(kāi)網(wǎng)頁(yè),但估計WORD是用IE技術(shù)渲染網(wǎng)頁(yè)的,很多功能無(wú)法恢復。所以直接轉PDF更科學(xué)。
PDF 的另一個(gè)好處是幾乎所有的 PDF 閱讀器都可以隨意打開(kāi)和顯示原創(chuàng )效果。雖然 PDF 的編輯能力非常有限,但我們的目的主要是為了閱讀,所以將 HTML 轉換為 PDF 是非常理想的。
它可以將多個(gè)網(wǎng)頁(yè)轉換為一個(gè)PDF文件,閱讀時(shí)更加連貫。
網(wǎng)頁(yè)轉PDF的工具是wkhtmltopdf,也是一個(gè)命令行工具,可以多種語(yǔ)言調用。當然,dotNET 調用是沒(méi)有問(wèn)題的,但是為了更好的體驗,還是應該在 PowerShell 上使用。
wkhtmltopdf的安裝方法,自行搜索資料學(xué)習,都在下一步完成,最后記得設置環(huán)境變量,讓CMD和PowerShell識別。
平時(shí)可以看到的python的html to pdf功能,其實(shí)底層也是用wkhtmltopdf完成的。
要將多個(gè)網(wǎng)頁(yè)轉換為PDF,需要考慮排序問(wèn)題。這時(shí)候使用Excel催化劑可以輕松實(shí)現HTML排版順序問(wèn)題。
一般來(lái)說(shuō),我們是按順序下載網(wǎng)頁(yè)的,所以簡(jiǎn)單的使用Excel Catalyst的遍歷文件功能來(lái)遍歷文件信息,在Excel上做一個(gè)排序處理,手動(dòng)調整一些特殊文件的順序。
另一個(gè)自定義函數stringjoin可以快速將多個(gè)文件合并成一個(gè)字符串組合,用空格隔開(kāi),每條記錄都要用雙引號括起來(lái)。
打開(kāi)我們的 PowerShell ISE 軟件,它是 win10 自帶的。其他系統也有,可以自行搜索相關(guān)教程打開(kāi)。
相信很多讀者也和作者有同感。他們覺(jué)得命令行很可怕。它是一系列代碼,尤其是幫助文件。
事實(shí)上,它確實(shí)突破了心理恐懼。命令行工具和我們在Excel上寫(xiě)函數的原理都是一個(gè)函數名和各種參數,但是命令行可以有很多參數。
以下是我們如何在 PowerShell 上使用單個(gè)命令將多個(gè) html 文件合并為一個(gè) PDF 文件。
筆者還費了一番功夫閱讀幫助文檔,寫(xiě)出了更多命令的功能,比如添加頁(yè)眉和頁(yè)腳的功能。
開(kāi)頭的參數是全局參數。具體說(shuō)明請參考官方文檔。
全局參數寫(xiě)好后,攤開(kāi)多個(gè)html文件,最后加上pdf文件的名字,弄的太多了。該文件使用相對路徑。您需要將PowerShell的當前路徑切換到html存儲文件夾。切換命令是 CD。
終于,激動(dòng)人心的時(shí)刻到了,可以順利生成pdf文件了。
包括頁(yè)眉和頁(yè)腳信息,一個(gè)總共400多頁(yè)的PDF電子書(shū)誕生了。
有興趣的讀者不妨將自己喜歡的網(wǎng)頁(yè)相冊制作成PDF文件,方便查閱。之前的錯誤是追求PDF閱讀器的精簡(jiǎn),現在我重新使用【福昕閱讀器】(感謝上一篇文章后讀者朋友的推薦),舊的免費PDF閱讀軟件可以進(jìn)行基于文本的PDF文件注釋并記筆記。這里推薦大家使用。
同樣,搜索關(guān)鍵詞后,會(huì )出現一個(gè)關(guān)鍵詞的列表。比如在學(xué)習DAX的過(guò)程中,如果想像參考書(shū)一樣查找ALLSELECT函數的用法,可以搜索全文。這比使用搜索引擎查找要好得多。學(xué)習后,您還可以突出顯示并做筆記。
結束語(yǔ)
在研究本文功能實(shí)現的過(guò)程中,我重新發(fā)現了dotNET的強大。不用太羨慕python的網(wǎng)絡(luò )爬蟲(chóng)。它在 dotNET 中仍然非常有用。
同時(shí),在 Windows 環(huán)境中,沒(méi)有什么比 dotNET 開(kāi)發(fā)更高效的了。再好的python,共享和交互也是一件頭疼的事,但dotNET桌面開(kāi)發(fā)自然是最大的優(yōu)勢。
在OFFICE環(huán)境下開(kāi)發(fā)的優(yōu)勢就更詳細了。其實(shí)本文的功能也可以移到Excel環(huán)境中無(wú)痛執行。以后有空再慢慢優(yōu)化整個(gè)流程。
將 html 轉換為 PDF 帶來(lái)了極大的方便。該內容在互聯(lián)網(wǎng)上,而不是您自己的數據,并且可能隨時(shí)被刪除和無(wú)法訪(fǎng)問(wèn)。壓力下,肯定撐不了多久,所以我提前計劃,先下載到本地,哈哈)。
抓取網(wǎng)頁(yè)生成電子書(shū)(如何使用PDFsamBasic來(lái)從PDF文件中的簡(jiǎn)短指南 )
網(wǎng)站優(yōu)化 ? 優(yōu)采云 發(fā)表了文章 ? 0 個(gè)評論 ? 161 次瀏覽 ? 2021-10-08 00:06
)
從 PDF 文件中提取頁(yè)面。通過(guò)生成只收錄您需要的頁(yè)面的文件,您可以批量從單個(gè)或多個(gè)文件中提取頁(yè)面。PDFsam Basic 是一款適用于 Windows、Mac 和 Linux 的免費開(kāi)源軟件。
下載 PDFsam Basic
確保您的 PDF 文件安全且私密。通過(guò)我們的應用程序,您無(wú)需將 PDF 文件上傳到任何第三方服務(wù),所有處理都在您的計算機本地進(jìn)行,您的文件將保持安全和私密
關(guān)于如何使用 PDFsam Basic 從 PDF 文件中提取頁(yè)面的簡(jiǎn)短指南
選擇PDF文件
拖放要從中提取頁(yè)面的 PDF 文件,或單擊添加以添加文件。加密的 PDF 文件將在其左側顯示一個(gè)圖標。單擊鎖定圖標并填寫(xiě)解鎖密碼。
設置
設置要從所選 PDF 文件中提取的頁(yè)面。您可以將它們設置為逗號分隔的數字或頁(yè)面范圍,例如:2,5,6-13,25.
目標文件夾
選擇生成 PDF 文件的位置。
自定義文件的名稱(chēng)
輸出文件的名稱(chēng)可以使用特殊關(guān)鍵字作為占位符,并在執行過(guò)程中使用動(dòng)態(tài)值進(jìn)行替換。例如,可以是 [File Number] 為文件名添加遞增計數器值,或 [Time Stamp] 將當前時(shí)間戳添加到文件名。右鍵單擊該字段以查找所有可用關(guān)鍵字。
如何自定義文件名
提取頁(yè)面
正確設置所有選項后,單擊運行開(kāi)始執行。如果沒(méi)有錯誤發(fā)生,進(jìn)度條會(huì )一直增長(cháng)直到完全著(zhù)色,然后友好的叮當聲會(huì )告訴你你的PDF文件已經(jīng)準備好了。
查看全部
抓取網(wǎng)頁(yè)生成電子書(shū)(如何使用PDFsamBasic來(lái)從PDF文件中的簡(jiǎn)短指南
)
從 PDF 文件中提取頁(yè)面。通過(guò)生成只收錄您需要的頁(yè)面的文件,您可以批量從單個(gè)或多個(gè)文件中提取頁(yè)面。PDFsam Basic 是一款適用于 Windows、Mac 和 Linux 的免費開(kāi)源軟件。
下載 PDFsam Basic
確保您的 PDF 文件安全且私密。通過(guò)我們的應用程序,您無(wú)需將 PDF 文件上傳到任何第三方服務(wù),所有處理都在您的計算機本地進(jìn)行,您的文件將保持安全和私密
關(guān)于如何使用 PDFsam Basic 從 PDF 文件中提取頁(yè)面的簡(jiǎn)短指南
選擇PDF文件
拖放要從中提取頁(yè)面的 PDF 文件,或單擊添加以添加文件。加密的 PDF 文件將在其左側顯示一個(gè)圖標。單擊鎖定圖標并填寫(xiě)解鎖密碼。

設置
設置要從所選 PDF 文件中提取的頁(yè)面。您可以將它們設置為逗號分隔的數字或頁(yè)面范圍,例如:2,5,6-13,25.

目標文件夾
選擇生成 PDF 文件的位置。

自定義文件的名稱(chēng)
輸出文件的名稱(chēng)可以使用特殊關(guān)鍵字作為占位符,并在執行過(guò)程中使用動(dòng)態(tài)值進(jìn)行替換。例如,可以是 [File Number] 為文件名添加遞增計數器值,或 [Time Stamp] 將當前時(shí)間戳添加到文件名。右鍵單擊該字段以查找所有可用關(guān)鍵字。
如何自定義文件名

提取頁(yè)面
正確設置所有選項后,單擊運行開(kāi)始執行。如果沒(méi)有錯誤發(fā)生,進(jìn)度條會(huì )一直增長(cháng)直到完全著(zhù)色,然后友好的叮當聲會(huì )告訴你你的PDF文件已經(jīng)準備好了。
抓取網(wǎng)頁(yè)生成電子書(shū)(使用python爬蟲(chóng)實(shí)現把《廖雪峰的Python教程》轉換成PDF的方法和代碼)
網(wǎng)站優(yōu)化 ? 優(yōu)采云 發(fā)表了文章 ? 0 個(gè)評論 ? 124 次瀏覽 ? 2021-10-07 03:27
本文與您分享使用Python crawler將廖雪峰的Python教程轉換為PDF的方法和代碼。如果你需要它,你可以參考它
似乎沒(méi)有比使用python更好的方法來(lái)編寫(xiě)爬蟲(chóng)程序。python社區提供了許多讓您眼花繚亂的爬蟲(chóng)工具??梢灾苯邮褂玫母鞣N庫可以在幾分鐘內編寫(xiě)一個(gè)爬蟲(chóng)程序。今天,我想寫(xiě)一個(gè)爬蟲(chóng)程序,把廖雪峰的Python程序下載到PDF電子書(shū)中,供離線(xiàn)閱讀
在編寫(xiě)爬蟲(chóng)程序之前,讓我們首先分析網(wǎng)站1的頁(yè)面結構。頁(yè)面左側是教程的目錄大綱。每一個(gè)URL對應于右邊的“@ K7@”,“@ K7@”的標題位于右上方,“@ K7@”的主體部分位于中間。正文內容是我們關(guān)注的焦點(diǎn)。我們想要爬升的數據是所有網(wǎng)頁(yè)的主體部分,下面是用戶(hù)的評論區。評論區對我們來(lái)說(shuō)是無(wú)用的,所以我們可以忽略它
工具準備
一旦理解了網(wǎng)站的基本結構,就可以開(kāi)始準備爬蟲(chóng)程序所依賴(lài)的工具包。請求和漂亮的湯是爬蟲(chóng)的兩個(gè)工件。Reuqests用于網(wǎng)絡(luò )請求,Beauty soup用于操作HTML數據。有了這兩架航天飛機,我們可以快速工作。我們不需要像scratch這樣的爬行動(dòng)物框架。這有點(diǎn)像在小程序中用牛刀殺雞。此外,由于它是將HTML文件轉換為PDF,因此還需要相應的庫支持。Wkhtmltopdf是一個(gè)非常好的工具。它可以將HTML轉換為適合多平臺的PDF。Pdfkit是wkhtmltopdf的python包。首先,安裝以下依賴(lài)項包
接下來(lái),安裝wkhtmltopdfip安裝請求
pip安裝美化組
pip安裝pdfkit
安裝wkhtmltopdf
windows平臺直接從wkhtmltopdf官方網(wǎng)站2下載穩定版本進(jìn)行安裝。安裝完成后,將程序的執行路徑添加到系統環(huán)境的$path變量中。否則,如果pdfkit找不到wkhtmltopdf,則會(huì )出現錯誤“找不到wkhtmltopdf可執行文件”。Ubuntu和CentOS可以直接從命令行$sudo apt get install wkhtmltopdf#Ubuntu安裝
$sudo yum intsall wkhtmltopdf#centos
爬蟲(chóng)實(shí)現
當一切準備就緒時(shí),您可以編寫(xiě)代碼,但在編寫(xiě)代碼之前,您應該先清理頭腦。該程序的目的是在本地保存與所有URL對應的HTML正文,然后使用pdfkit將這些文件轉換為PDF文件。讓我們把任務(wù)分成兩部分。首先,在本地保存與URL對應的HTML正文,然后查找所有URL以執行相同的操作
使用Chrome瀏覽器查找頁(yè)面主體部分的標簽,然后按F12查找與主體對應的p標簽:
,這是網(wǎng)頁(yè)的正文內容。在本地加載整個(gè)頁(yè)面的請求后,可以使用Beauty soup操作HTML的DOM元素來(lái)提取正文內容
具體實(shí)現代碼如下:use soup.find uuAll函數查找body標記并將body部分的內容保存到a.html文件中。def解析url到html(url):
response=requests.get(url)
soup=BeautifulSoup(response.content,“html5lib”)
body=soup.find uAll(class=“x-wiki-content”)[0]
html=str(正文)
以open(“a.html”,“wb”)作為f:
f、 編寫(xiě)(html)
第二步是解析頁(yè)面左側的所有URL。同樣,找到左側的菜單選項卡
具體代碼實(shí)現了邏輯:頁(yè)面上有兩個(gè)類(lèi)屬性UK NAV UK NAV side,第二個(gè)是真實(shí)目錄列表。所有URL都被獲取,并且在第一步中還編寫(xiě)了URL到HTML的函數。def get_uuURL_uuu列表():
“”“
獲取所有URL目錄的列表
“”“
response=requests.get(“”)
soup=BeautifulSoup(response.content,“html5lib”)
menu_uTag=soup.find_uuAll(class=“uk nav uk nav side”)[1]
URL=[]
對于菜單中的li uTag.find uuAll(“l(fā)i”): 查看全部
抓取網(wǎng)頁(yè)生成電子書(shū)(使用python爬蟲(chóng)實(shí)現把《廖雪峰的Python教程》轉換成PDF的方法和代碼)
本文與您分享使用Python crawler將廖雪峰的Python教程轉換為PDF的方法和代碼。如果你需要它,你可以參考它
似乎沒(méi)有比使用python更好的方法來(lái)編寫(xiě)爬蟲(chóng)程序。python社區提供了許多讓您眼花繚亂的爬蟲(chóng)工具??梢灾苯邮褂玫母鞣N庫可以在幾分鐘內編寫(xiě)一個(gè)爬蟲(chóng)程序。今天,我想寫(xiě)一個(gè)爬蟲(chóng)程序,把廖雪峰的Python程序下載到PDF電子書(shū)中,供離線(xiàn)閱讀
在編寫(xiě)爬蟲(chóng)程序之前,讓我們首先分析網(wǎng)站1的頁(yè)面結構。頁(yè)面左側是教程的目錄大綱。每一個(gè)URL對應于右邊的“@ K7@”,“@ K7@”的標題位于右上方,“@ K7@”的主體部分位于中間。正文內容是我們關(guān)注的焦點(diǎn)。我們想要爬升的數據是所有網(wǎng)頁(yè)的主體部分,下面是用戶(hù)的評論區。評論區對我們來(lái)說(shuō)是無(wú)用的,所以我們可以忽略它
工具準備
一旦理解了網(wǎng)站的基本結構,就可以開(kāi)始準備爬蟲(chóng)程序所依賴(lài)的工具包。請求和漂亮的湯是爬蟲(chóng)的兩個(gè)工件。Reuqests用于網(wǎng)絡(luò )請求,Beauty soup用于操作HTML數據。有了這兩架航天飛機,我們可以快速工作。我們不需要像scratch這樣的爬行動(dòng)物框架。這有點(diǎn)像在小程序中用牛刀殺雞。此外,由于它是將HTML文件轉換為PDF,因此還需要相應的庫支持。Wkhtmltopdf是一個(gè)非常好的工具。它可以將HTML轉換為適合多平臺的PDF。Pdfkit是wkhtmltopdf的python包。首先,安裝以下依賴(lài)項包
接下來(lái),安裝wkhtmltopdfip安裝請求
pip安裝美化組
pip安裝pdfkit
安裝wkhtmltopdf
windows平臺直接從wkhtmltopdf官方網(wǎng)站2下載穩定版本進(jìn)行安裝。安裝完成后,將程序的執行路徑添加到系統環(huán)境的$path變量中。否則,如果pdfkit找不到wkhtmltopdf,則會(huì )出現錯誤“找不到wkhtmltopdf可執行文件”。Ubuntu和CentOS可以直接從命令行$sudo apt get install wkhtmltopdf#Ubuntu安裝
$sudo yum intsall wkhtmltopdf#centos
爬蟲(chóng)實(shí)現
當一切準備就緒時(shí),您可以編寫(xiě)代碼,但在編寫(xiě)代碼之前,您應該先清理頭腦。該程序的目的是在本地保存與所有URL對應的HTML正文,然后使用pdfkit將這些文件轉換為PDF文件。讓我們把任務(wù)分成兩部分。首先,在本地保存與URL對應的HTML正文,然后查找所有URL以執行相同的操作
使用Chrome瀏覽器查找頁(yè)面主體部分的標簽,然后按F12查找與主體對應的p標簽:
,這是網(wǎng)頁(yè)的正文內容。在本地加載整個(gè)頁(yè)面的請求后,可以使用Beauty soup操作HTML的DOM元素來(lái)提取正文內容
具體實(shí)現代碼如下:use soup.find uuAll函數查找body標記并將body部分的內容保存到a.html文件中。def解析url到html(url):
response=requests.get(url)
soup=BeautifulSoup(response.content,“html5lib”)
body=soup.find uAll(class=“x-wiki-content”)[0]
html=str(正文)
以open(“a.html”,“wb”)作為f:
f、 編寫(xiě)(html)
第二步是解析頁(yè)面左側的所有URL。同樣,找到左側的菜單選項卡
具體代碼實(shí)現了邏輯:頁(yè)面上有兩個(gè)類(lèi)屬性UK NAV UK NAV side,第二個(gè)是真實(shí)目錄列表。所有URL都被獲取,并且在第一步中還編寫(xiě)了URL到HTML的函數。def get_uuURL_uuu列表():
“”“
獲取所有URL目錄的列表
“”“
response=requests.get(“”)
soup=BeautifulSoup(response.content,“html5lib”)
menu_uTag=soup.find_uuAll(class=“uk nav uk nav side”)[1]
URL=[]
對于菜單中的li uTag.find uuAll(“l(fā)i”):
抓取網(wǎng)頁(yè)生成電子書(shū)(如何將網(wǎng)頁(yè)上顯示的內容導出為pdf文件?)
網(wǎng)站優(yōu)化 ? 優(yōu)采云 發(fā)表了文章 ? 0 個(gè)評論 ? 240 次瀏覽 ? 2021-10-06 20:01
我們都知道一個(gè)普通的網(wǎng)頁(yè)是由html+css+js組成的,它的本質(zhì)是由一段代碼編譯而成的。圖片是由一堆二進(jìn)制數據組成的,我們如何將網(wǎng)頁(yè)顯示的內容導出為我們想要的圖片或者pdf呢?博主很無(wú)聊,在github上閑逛,發(fā)現了一個(gè)有趣的庫pyppeteer,滿(mǎn)足了我需要的導出需求。接下來(lái),我們來(lái)看看它是如何運作的:
安裝所需的庫
pip install pillow
pip install reportlab
pip install pyppeteer
導出為圖片
import os
import asyncio
from pyppeteer import launch
async def save_image(url, img_path):
"""
導出圖片
:param url: 在線(xiàn)網(wǎng)頁(yè)的url
:param img_path: 圖片存放位置
:return:
"""
browser = await launch()
page = await browser.newPage()
# 加載指定的網(wǎng)頁(yè)url
await page.goto(url)
# 設置網(wǎng)頁(yè)顯示尺寸
await page.setViewport({'width': 1920, 'height': 1080})
'''
path: 圖片存放位置
clip: 位置與圖片尺寸信息
x: 網(wǎng)頁(yè)截圖的x坐標
y: 網(wǎng)頁(yè)截圖的y坐標
width: 圖片寬度
height: 圖片高度
'''
await page.screenshot({'path': img_path, 'clip': {'x': 457, 'y': 70, 'width': 730, 'height': 2600}})
await browser.close()
if __name__ == '__main__':
url = "https://www.jianshu.com/p/13dadc463f40"
img_path = os.path.join(os.getcwd(), "example.png")
loop = asyncio.get_event_loop()
loop.run_until_complete(save_image(url, img_path))
執行完成后,不出意外的話(huà),在當前目錄下會(huì )生成一個(gè)名為example.png的文件,就是我們導出的圖片文件!
將整個(gè)頁(yè)面導出為pdf
import os
import asyncio
from pyppeteer import launch
async def save_pdf(url, pdf_path):
"""
導出pdf
:param url: 在線(xiàn)網(wǎng)頁(yè)的url
:param pdf_path: pdf存放位置
:return:
"""
browser = await launch()
page = await browser.newPage()
# 加載指定的網(wǎng)頁(yè)url
await page.goto(url)
# 設置網(wǎng)頁(yè)顯示尺寸
await page.setViewport({'width': 1920, 'height': 1080})
'''
path: 圖片存放位置
width: 紙張寬度,帶單位的字符串
height: 紙張高度,帶單位的字符串
'''
await page.pdf({'path': pdf_path, 'width': '730px', 'height': '2600px'})
await browser.close()
if __name__ == '__main__':
url = "https://www.jianshu.com/p/13dadc463f40"
pdf_path = os.path.join(os.getcwd(), "example.pdf")
loop = asyncio.get_event_loop()
loop.run_until_complete(save_pdf(url, pdf_path))
執行完成后,不出意外的話(huà),在當前目錄下會(huì )生成一個(gè)名為example.pdf的文件,就是我們導出的pdf文件!但是,這種出口有一個(gè)缺點(diǎn)。它將整個(gè)網(wǎng)頁(yè)導出為 pdf。不支持圖片等位置參數??梢越厝〔糠謪^域進(jìn)行導出!因此,我稍微修改了代碼,請參閱下面的“將區域導出為pdf”!
將區域導出為 pdf
import os
import asyncio
from io import BytesIO
from PIL import Image
from pyppeteer import launch
from reportlab.pdfgen.canvas import Canvas
from reportlab.lib.utils import ImageReader
async def save_pdf(url, pdf_path):
"""
導出pdf
:param url: 在線(xiàn)網(wǎng)頁(yè)的url
:param pdf_path: pdf存放位置
:return:
"""
browser = await launch()
page = await browser.newPage()
# 加載指定的網(wǎng)頁(yè)url
await page.goto(url)
# 設置網(wǎng)頁(yè)顯示尺寸
await page.setViewport({'width': 1920, 'height': 1080})
'''
clip: 位置與圖片尺寸信息
x: 網(wǎng)頁(yè)截圖的x坐標
y: 網(wǎng)頁(yè)截圖的y坐標
width: 圖片寬度
height: 圖片高度
'''
img_data = await page.screenshot({'clip': {'x': 457, 'y': 70, 'width': 730, 'height': 2600}})
im = Image.open(BytesIO(img_data))
page_width, page_height = im.size
c = Canvas(pdf_path, pagesize=(page_width, page_height))
c.drawImage(ImageReader(im), 0, 0)
c.save()
if __name__ == '__main__':
url = "https://www.jianshu.com/p/13dadc463f40"
pdf_path = os.path.join(os.getcwd(), "example.pdf")
loop = asyncio.get_event_loop()
loop.run_until_complete(save_pdf(url, pdf_path))
這樣我們就可以進(jìn)行區域截取,導出pdf文件了!
值得注意的是,由于網(wǎng)絡(luò )、配置以及各種不可控因素,上述方法都會(huì )有一定程度的導出錯誤,所以建議添加重試機制!
更多pyppeteer操作請看:
從此,結束了~~~ 查看全部
抓取網(wǎng)頁(yè)生成電子書(shū)(如何將網(wǎng)頁(yè)上顯示的內容導出為pdf文件?)
我們都知道一個(gè)普通的網(wǎng)頁(yè)是由html+css+js組成的,它的本質(zhì)是由一段代碼編譯而成的。圖片是由一堆二進(jìn)制數據組成的,我們如何將網(wǎng)頁(yè)顯示的內容導出為我們想要的圖片或者pdf呢?博主很無(wú)聊,在github上閑逛,發(fā)現了一個(gè)有趣的庫pyppeteer,滿(mǎn)足了我需要的導出需求。接下來(lái),我們來(lái)看看它是如何運作的:
安裝所需的庫
pip install pillow
pip install reportlab
pip install pyppeteer
導出為圖片
import os
import asyncio
from pyppeteer import launch
async def save_image(url, img_path):
"""
導出圖片
:param url: 在線(xiàn)網(wǎng)頁(yè)的url
:param img_path: 圖片存放位置
:return:
"""
browser = await launch()
page = await browser.newPage()
# 加載指定的網(wǎng)頁(yè)url
await page.goto(url)
# 設置網(wǎng)頁(yè)顯示尺寸
await page.setViewport({'width': 1920, 'height': 1080})
'''
path: 圖片存放位置
clip: 位置與圖片尺寸信息
x: 網(wǎng)頁(yè)截圖的x坐標
y: 網(wǎng)頁(yè)截圖的y坐標
width: 圖片寬度
height: 圖片高度
'''
await page.screenshot({'path': img_path, 'clip': {'x': 457, 'y': 70, 'width': 730, 'height': 2600}})
await browser.close()
if __name__ == '__main__':
url = "https://www.jianshu.com/p/13dadc463f40"
img_path = os.path.join(os.getcwd(), "example.png")
loop = asyncio.get_event_loop()
loop.run_until_complete(save_image(url, img_path))
執行完成后,不出意外的話(huà),在當前目錄下會(huì )生成一個(gè)名為example.png的文件,就是我們導出的圖片文件!
將整個(gè)頁(yè)面導出為pdf
import os
import asyncio
from pyppeteer import launch
async def save_pdf(url, pdf_path):
"""
導出pdf
:param url: 在線(xiàn)網(wǎng)頁(yè)的url
:param pdf_path: pdf存放位置
:return:
"""
browser = await launch()
page = await browser.newPage()
# 加載指定的網(wǎng)頁(yè)url
await page.goto(url)
# 設置網(wǎng)頁(yè)顯示尺寸
await page.setViewport({'width': 1920, 'height': 1080})
'''
path: 圖片存放位置
width: 紙張寬度,帶單位的字符串
height: 紙張高度,帶單位的字符串
'''
await page.pdf({'path': pdf_path, 'width': '730px', 'height': '2600px'})
await browser.close()
if __name__ == '__main__':
url = "https://www.jianshu.com/p/13dadc463f40"
pdf_path = os.path.join(os.getcwd(), "example.pdf")
loop = asyncio.get_event_loop()
loop.run_until_complete(save_pdf(url, pdf_path))
執行完成后,不出意外的話(huà),在當前目錄下會(huì )生成一個(gè)名為example.pdf的文件,就是我們導出的pdf文件!但是,這種出口有一個(gè)缺點(diǎn)。它將整個(gè)網(wǎng)頁(yè)導出為 pdf。不支持圖片等位置參數??梢越厝〔糠謪^域進(jìn)行導出!因此,我稍微修改了代碼,請參閱下面的“將區域導出為pdf”!
將區域導出為 pdf
import os
import asyncio
from io import BytesIO
from PIL import Image
from pyppeteer import launch
from reportlab.pdfgen.canvas import Canvas
from reportlab.lib.utils import ImageReader
async def save_pdf(url, pdf_path):
"""
導出pdf
:param url: 在線(xiàn)網(wǎng)頁(yè)的url
:param pdf_path: pdf存放位置
:return:
"""
browser = await launch()
page = await browser.newPage()
# 加載指定的網(wǎng)頁(yè)url
await page.goto(url)
# 設置網(wǎng)頁(yè)顯示尺寸
await page.setViewport({'width': 1920, 'height': 1080})
'''
clip: 位置與圖片尺寸信息
x: 網(wǎng)頁(yè)截圖的x坐標
y: 網(wǎng)頁(yè)截圖的y坐標
width: 圖片寬度
height: 圖片高度
'''
img_data = await page.screenshot({'clip': {'x': 457, 'y': 70, 'width': 730, 'height': 2600}})
im = Image.open(BytesIO(img_data))
page_width, page_height = im.size
c = Canvas(pdf_path, pagesize=(page_width, page_height))
c.drawImage(ImageReader(im), 0, 0)
c.save()
if __name__ == '__main__':
url = "https://www.jianshu.com/p/13dadc463f40"
pdf_path = os.path.join(os.getcwd(), "example.pdf")
loop = asyncio.get_event_loop()
loop.run_until_complete(save_pdf(url, pdf_path))
這樣我們就可以進(jìn)行區域截取,導出pdf文件了!
值得注意的是,由于網(wǎng)絡(luò )、配置以及各種不可控因素,上述方法都會(huì )有一定程度的導出錯誤,所以建議添加重試機制!
更多pyppeteer操作請看:
從此,結束了~~~
抓取網(wǎng)頁(yè)生成電子書(shū)( 之前配置生成器:強大!Nginx配置在線(xiàn)一鍵生成“神器” )
網(wǎng)站優(yōu)化 ? 優(yōu)采云 發(fā)表了文章 ? 0 個(gè)評論 ? 90 次瀏覽 ? 2021-10-06 19:34
之前配置生成器:強大!Nginx配置在線(xiàn)一鍵生成“神器”
)
之前農民工也給大家介紹過(guò)一個(gè)Nginx配置生成器:強大!Nginx配置在線(xiàn)一鍵生成“神器”,不太了解的可以去看看。
最近農民工發(fā)現了一個(gè)好用的網(wǎng)頁(yè)版開(kāi)源工具,它的功能也是Nginx配置生成器,非常強大,方便實(shí)用。它是:NginxWebUI。
NginxWebUI 介紹
NginxWebUI 是一個(gè)方便實(shí)用的 nginx web 配置工具??梢允褂肳ebUI配置Nginx的各種功能,包括端口轉發(fā)、反向代理、ssl證書(shū)配置、負載均衡等,最后生成“nginx.conf”配置文件并覆蓋目標配置文件,完成Nginx的功能配置nginx。
項目地址:
官方 網(wǎng)站:
<p>NginxWebUI 功能說(shuō)明 NginxWebUI 有兩種安裝方式安裝: 查看全部
抓取網(wǎng)頁(yè)生成電子書(shū)(
之前配置生成器:強大!Nginx配置在線(xiàn)一鍵生成“神器”
)

之前農民工也給大家介紹過(guò)一個(gè)Nginx配置生成器:強大!Nginx配置在線(xiàn)一鍵生成“神器”,不太了解的可以去看看。
最近農民工發(fā)現了一個(gè)好用的網(wǎng)頁(yè)版開(kāi)源工具,它的功能也是Nginx配置生成器,非常強大,方便實(shí)用。它是:NginxWebUI。
NginxWebUI 介紹
NginxWebUI 是一個(gè)方便實(shí)用的 nginx web 配置工具??梢允褂肳ebUI配置Nginx的各種功能,包括端口轉發(fā)、反向代理、ssl證書(shū)配置、負載均衡等,最后生成“nginx.conf”配置文件并覆蓋目標配置文件,完成Nginx的功能配置nginx。
項目地址:
官方 網(wǎng)站:
<p>NginxWebUI 功能說(shuō)明 NginxWebUI 有兩種安裝方式安裝:
抓取網(wǎng)頁(yè)生成電子書(shū)(之前備份專(zhuān)家配合Firefox+插件Firebug批量下載博客文章豆約翰博客專(zhuān)家)
網(wǎng)站優(yōu)化 ? 優(yōu)采云 發(fā)表了文章 ? 0 個(gè)評論 ? 127 次瀏覽 ? 2021-10-05 10:09
博客批量下載制作電子書(shū)方法1 前言
相信很多朋友都知道“左岸閱讀”這個(gè)博客,作者采集了很多優(yōu)秀的文章。大概在年初接觸到這個(gè)網(wǎng)站,非常非常喜歡。文章 非常符合我的口味。因為不喜歡在網(wǎng)絡(luò )上瀏覽文章,所以一般做成電子書(shū)后在kindle或手機上閱讀。這樣記筆記非常方便,便于復習和采集。以前用kindle的push和calibre的新聞抓取功能制作電子書(shū)非常方便。唯一的缺點(diǎn)就是只能抓取最新發(fā)布的文章,之前的老文章無(wú)法抓取。. 于是,我充分發(fā)揮了愛(ài)折騰的本能,經(jīng)過(guò)多日的摸索,總結,并參考了很多以前的經(jīng)驗,我終于成功了。方法比較復雜,折騰起來(lái)很累,在這里,分享給有需要的朋友。
2 需要準備的軟件
1)doujohn博客備份專(zhuān)家V2.6
2)Firefox+插件Firebug
3)epubBuilder 綠色版
需要說(shuō)明的是,epubBuilder 不是免費軟件,但是綠色版可以在網(wǎng)上下載,完全可以使用。
3 具體步驟3.1 使用豆約翰博客備份專(zhuān)家配合火狐+插件Firebug批量下載博客文章
Doujohn博客備份專(zhuān)家是一款完全免費、功能強大的博客備份工具、博客電子書(shū)(PDF、CHM和TXT)生成工具、博客文章離線(xiàn)瀏覽工具、漂亮的軟件界面、支持多個(gè)主流博客網(wǎng)站(Qzone ,百度空間,新浪博客,網(wǎng)易博客,豆瓣日記,天涯博客,19樓,博客園,和訊博客,CSDN博客,搜狐博客,51CTO博客)。
但最重要的是該軟件支持從獨立站點(diǎn)爬取博客?!蹲蟀堕喿x》是一個(gè)獨立站點(diǎn),但是配置起來(lái)確實(shí)有點(diǎn)麻煩。這個(gè)配置過(guò)程花了我很多時(shí)間,我什至想放棄。
關(guān)于獨立站點(diǎn)的配置,官網(wǎng)上有詳細的介紹,這里不再贅述,直接貼出網(wǎng)址:
《左岸閱讀》文章數量龐大,每月可排序。我以2013年1月的文章下載為例,貼出配置,如圖。
配置完成后,點(diǎn)擊“開(kāi)始下載”即可批量下載博客。理論上,根據軟件說(shuō)明,需要評估推廣軟件下載所有頁(yè)面(本例中為起始頁(yè)1到結束頁(yè)3),但經(jīng)過(guò)筆者的實(shí)驗發(fā)現,即使是評測不能批量下載,第一次只能在一個(gè)頁(yè)面下載所有文章,上圖配置下,只能下載第1頁(yè)文章,不過(guò)沒(méi)關(guān)系。反正只有3頁(yè),反正一頁(yè)一頁(yè)下載就完了可以下載文章的第二頁(yè),然后修改為3,
3.2 將下載的文章制作成chm文件
Doujohn的博客備份專(zhuān)家可以將下載的文章制作成文件,格式可以是pdf、chm、txt等。作者最初使用的是pdf格式,但發(fā)現在轉換的過(guò)程中會(huì )出現換行到電子書(shū)。嘗試了各種方法后都沒(méi)有解決,只能以chm格式保存。
3.3 將保存的chm文件制作成epub電子書(shū)
epubBuilder是口袋書(shū)園開(kāi)發(fā)的一款epub電子書(shū)制作神器,支持導入Txt、epub、html、chm、snb等源文件。
<p>打開(kāi)軟件,導入上面制作的chm??赐昴銜?huì )發(fā)現下面的文章會(huì )少了一個(gè)標題,沒(méi)關(guān)系,工具選項卡里有個(gè)“使用第一行作為目錄名”,在左邊選擇邊目錄欄批量丟失目錄(shift+左鍵點(diǎn)擊),點(diǎn)擊“使用第一行作為目錄名”,軟件會(huì )自動(dòng)將每個(gè)文章的第一行作為 查看全部
抓取網(wǎng)頁(yè)生成電子書(shū)(之前備份專(zhuān)家配合Firefox+插件Firebug批量下載博客文章豆約翰博客專(zhuān)家)
博客批量下載制作電子書(shū)方法1 前言
相信很多朋友都知道“左岸閱讀”這個(gè)博客,作者采集了很多優(yōu)秀的文章。大概在年初接觸到這個(gè)網(wǎng)站,非常非常喜歡。文章 非常符合我的口味。因為不喜歡在網(wǎng)絡(luò )上瀏覽文章,所以一般做成電子書(shū)后在kindle或手機上閱讀。這樣記筆記非常方便,便于復習和采集。以前用kindle的push和calibre的新聞抓取功能制作電子書(shū)非常方便。唯一的缺點(diǎn)就是只能抓取最新發(fā)布的文章,之前的老文章無(wú)法抓取。. 于是,我充分發(fā)揮了愛(ài)折騰的本能,經(jīng)過(guò)多日的摸索,總結,并參考了很多以前的經(jīng)驗,我終于成功了。方法比較復雜,折騰起來(lái)很累,在這里,分享給有需要的朋友。
2 需要準備的軟件
1)doujohn博客備份專(zhuān)家V2.6
2)Firefox+插件Firebug
3)epubBuilder 綠色版
需要說(shuō)明的是,epubBuilder 不是免費軟件,但是綠色版可以在網(wǎng)上下載,完全可以使用。
3 具體步驟3.1 使用豆約翰博客備份專(zhuān)家配合火狐+插件Firebug批量下載博客文章
Doujohn博客備份專(zhuān)家是一款完全免費、功能強大的博客備份工具、博客電子書(shū)(PDF、CHM和TXT)生成工具、博客文章離線(xiàn)瀏覽工具、漂亮的軟件界面、支持多個(gè)主流博客網(wǎng)站(Qzone ,百度空間,新浪博客,網(wǎng)易博客,豆瓣日記,天涯博客,19樓,博客園,和訊博客,CSDN博客,搜狐博客,51CTO博客)。
但最重要的是該軟件支持從獨立站點(diǎn)爬取博客?!蹲蟀堕喿x》是一個(gè)獨立站點(diǎn),但是配置起來(lái)確實(shí)有點(diǎn)麻煩。這個(gè)配置過(guò)程花了我很多時(shí)間,我什至想放棄。
關(guān)于獨立站點(diǎn)的配置,官網(wǎng)上有詳細的介紹,這里不再贅述,直接貼出網(wǎng)址:
《左岸閱讀》文章數量龐大,每月可排序。我以2013年1月的文章下載為例,貼出配置,如圖。
配置完成后,點(diǎn)擊“開(kāi)始下載”即可批量下載博客。理論上,根據軟件說(shuō)明,需要評估推廣軟件下載所有頁(yè)面(本例中為起始頁(yè)1到結束頁(yè)3),但經(jīng)過(guò)筆者的實(shí)驗發(fā)現,即使是評測不能批量下載,第一次只能在一個(gè)頁(yè)面下載所有文章,上圖配置下,只能下載第1頁(yè)文章,不過(guò)沒(méi)關(guān)系。反正只有3頁(yè),反正一頁(yè)一頁(yè)下載就完了可以下載文章的第二頁(yè),然后修改為3,
3.2 將下載的文章制作成chm文件
Doujohn的博客備份專(zhuān)家可以將下載的文章制作成文件,格式可以是pdf、chm、txt等。作者最初使用的是pdf格式,但發(fā)現在轉換的過(guò)程中會(huì )出現換行到電子書(shū)。嘗試了各種方法后都沒(méi)有解決,只能以chm格式保存。
3.3 將保存的chm文件制作成epub電子書(shū)
epubBuilder是口袋書(shū)園開(kāi)發(fā)的一款epub電子書(shū)制作神器,支持導入Txt、epub、html、chm、snb等源文件。
<p>打開(kāi)軟件,導入上面制作的chm??赐昴銜?huì )發(fā)現下面的文章會(huì )少了一個(gè)標題,沒(méi)關(guān)系,工具選項卡里有個(gè)“使用第一行作為目錄名”,在左邊選擇邊目錄欄批量丟失目錄(shift+左鍵點(diǎn)擊),點(diǎn)擊“使用第一行作為目錄名”,軟件會(huì )自動(dòng)將每個(gè)文章的第一行作為
抓取網(wǎng)頁(yè)生成電子書(shū)(通過(guò)Python和爬蟲(chóng),可以完成怎樣的小工具?|知乎)
網(wǎng)站優(yōu)化 ? 優(yōu)采云 發(fā)表了文章 ? 0 個(gè)評論 ? 193 次瀏覽 ? 2021-10-05 10:05
總有同學(xué)問(wèn),學(xué)了Python基礎之后,不知道自己可以做些什么來(lái)提高。今天我就用一個(gè)小例子來(lái)告訴大家通過(guò)Python和爬蟲(chóng)可以完成什么樣的小工具。
在知乎上,你一定關(guān)注過(guò)一些不錯的專(zhuān)欄(比如Crossin的編程課堂)。但如果有一天,你最喜歡的受訪(fǎng)者在網(wǎng)上被噴,你一怒之下刪帖停止更新,你就看不到好內容了。雖然這是小概率事件(沒(méi)有發(fā)生過(guò)),但你可以通過(guò)將關(guān)注的專(zhuān)欄導出到電子書(shū)來(lái)準備下雨天,這樣你就可以離線(xiàn)閱讀,而不必擔心不小心刪除帖子。
只需要工具和源碼的可以拉到文章底部獲取代碼。
【最終效果】
運行程序,輸入列的id,即網(wǎng)頁(yè)地址上的路徑:
之后程序會(huì )自動(dòng)抓取列中的文章,并根據發(fā)布時(shí)間合并導出為pdf文件。
【實(shí)現思路】
本方案主要分為三部分:
搶列文章地址列表
抓取每篇文章的詳細內容文章
導出 PDF
1. 獲取列表
在之前的文章
爬蟲(chóng)必備工具,掌握它就解決一半問(wèn)題
如何分析一個(gè)網(wǎng)頁(yè)上的請求在里面有描述。 根據方法,我們可以使用開(kāi)發(fā)者工具的Network功能找出欄目頁(yè)面的請求來(lái)獲取詳細列表:
觀(guān)察返回的結果,我們發(fā)現通過(guò)sum的值,可以獲取到下一個(gè)列表請求的地址(相當于頁(yè)面向下滾動(dòng)的觸發(fā)效果),判斷是否已經(jīng)獲取到所有的文章。
而中間就是我們需要的數據。因為可以拼寫(xiě),所以沒(méi)有保存在我們的代碼中。
使用 while 循環(huán)直到 文章 的所有總和都被捕獲并保存在一個(gè)文件中。
2. 搶 文章
有了文章的所有/,后面的爬取就很簡(jiǎn)單了。文章主要內容在標簽中。
需要花點(diǎn)功夫的是一些文字處理,比如原頁(yè)面的圖片效果,會(huì )添加標簽和屬性之類(lèi)的,我們要去掉才能正常顯示。
至此,所有的內容都已經(jīng)抓取完畢,可以在本地讀取了。
3. 導出 PDF
為了方便閱讀,我們使用 wkhtmltopdf+pdfkit 將這些 HTML 文件打包成 PDF。
wkhtmltopdf是一個(gè)將HTML轉PDF的工具,需要單獨安裝。詳情請參閱其官方網(wǎng)站。
pdfkit 是為此工具打包的 Python 庫,可以從 pip 安裝:
使用非常簡(jiǎn)單:
這樣就完成了整列的導出。
不僅是知乎的欄目,幾乎大部分的信息類(lèi)型都是網(wǎng)站,通過(guò)1.抓取列表2.抓取詳細內容采集數據兩步。所以這段代碼只要稍加修改就可以用于許多其他的網(wǎng)站。只是有些網(wǎng)站需要登錄后訪(fǎng)問(wèn),所以需要在headers中設置cookie信息。另外,不同網(wǎng)站的請求接口、參數、限制都不一樣,具體問(wèn)題還是要具體問(wèn)題具體分析。
這些爬蟲(chóng)的開(kāi)發(fā)技巧可以在我們的爬蟲(chóng)實(shí)戰課中學(xué)習。需要的請回復公眾號中的實(shí)際爬蟲(chóng)
【源碼下載】
獲取知乎的專(zhuān)欄下載器源碼,請在公眾號(Crossin的編程課堂)回復關(guān)鍵字知乎
除了代碼,還有本專(zhuān)欄打包好的PDF,歡迎閱讀分享。
更多視頻課程、問(wèn)答群等服務(wù),請按號碼內回復碼操作 查看全部
抓取網(wǎng)頁(yè)生成電子書(shū)(通過(guò)Python和爬蟲(chóng),可以完成怎樣的小工具?|知乎)
總有同學(xué)問(wèn),學(xué)了Python基礎之后,不知道自己可以做些什么來(lái)提高。今天我就用一個(gè)小例子來(lái)告訴大家通過(guò)Python和爬蟲(chóng)可以完成什么樣的小工具。
在知乎上,你一定關(guān)注過(guò)一些不錯的專(zhuān)欄(比如Crossin的編程課堂)。但如果有一天,你最喜歡的受訪(fǎng)者在網(wǎng)上被噴,你一怒之下刪帖停止更新,你就看不到好內容了。雖然這是小概率事件(沒(méi)有發(fā)生過(guò)),但你可以通過(guò)將關(guān)注的專(zhuān)欄導出到電子書(shū)來(lái)準備下雨天,這樣你就可以離線(xiàn)閱讀,而不必擔心不小心刪除帖子。
只需要工具和源碼的可以拉到文章底部獲取代碼。
【最終效果】
運行程序,輸入列的id,即網(wǎng)頁(yè)地址上的路徑:
之后程序會(huì )自動(dòng)抓取列中的文章,并根據發(fā)布時(shí)間合并導出為pdf文件。
【實(shí)現思路】
本方案主要分為三部分:
搶列文章地址列表
抓取每篇文章的詳細內容文章
導出 PDF
1. 獲取列表
在之前的文章
爬蟲(chóng)必備工具,掌握它就解決一半問(wèn)題
如何分析一個(gè)網(wǎng)頁(yè)上的請求在里面有描述。 根據方法,我們可以使用開(kāi)發(fā)者工具的Network功能找出欄目頁(yè)面的請求來(lái)獲取詳細列表:
觀(guān)察返回的結果,我們發(fā)現通過(guò)sum的值,可以獲取到下一個(gè)列表請求的地址(相當于頁(yè)面向下滾動(dòng)的觸發(fā)效果),判斷是否已經(jīng)獲取到所有的文章。
而中間就是我們需要的數據。因為可以拼寫(xiě),所以沒(méi)有保存在我們的代碼中。
使用 while 循環(huán)直到 文章 的所有總和都被捕獲并保存在一個(gè)文件中。
2. 搶 文章
有了文章的所有/,后面的爬取就很簡(jiǎn)單了。文章主要內容在標簽中。
需要花點(diǎn)功夫的是一些文字處理,比如原頁(yè)面的圖片效果,會(huì )添加標簽和屬性之類(lèi)的,我們要去掉才能正常顯示。
至此,所有的內容都已經(jīng)抓取完畢,可以在本地讀取了。
3. 導出 PDF
為了方便閱讀,我們使用 wkhtmltopdf+pdfkit 將這些 HTML 文件打包成 PDF。
wkhtmltopdf是一個(gè)將HTML轉PDF的工具,需要單獨安裝。詳情請參閱其官方網(wǎng)站。
pdfkit 是為此工具打包的 Python 庫,可以從 pip 安裝:
使用非常簡(jiǎn)單:
這樣就完成了整列的導出。
不僅是知乎的欄目,幾乎大部分的信息類(lèi)型都是網(wǎng)站,通過(guò)1.抓取列表2.抓取詳細內容采集數據兩步。所以這段代碼只要稍加修改就可以用于許多其他的網(wǎng)站。只是有些網(wǎng)站需要登錄后訪(fǎng)問(wèn),所以需要在headers中設置cookie信息。另外,不同網(wǎng)站的請求接口、參數、限制都不一樣,具體問(wèn)題還是要具體問(wèn)題具體分析。
這些爬蟲(chóng)的開(kāi)發(fā)技巧可以在我們的爬蟲(chóng)實(shí)戰課中學(xué)習。需要的請回復公眾號中的實(shí)際爬蟲(chóng)
【源碼下載】
獲取知乎的專(zhuān)欄下載器源碼,請在公眾號(Crossin的編程課堂)回復關(guān)鍵字知乎
除了代碼,還有本專(zhuān)欄打包好的PDF,歡迎閱讀分享。
更多視頻課程、問(wèn)答群等服務(wù),請按號碼內回復碼操作
抓取網(wǎng)頁(yè)生成電子書(shū)( 《修真小主播》使用Scrapy抓取電子書(shū)爬蟲(chóng)思路怎么抓取數據 )
網(wǎng)站優(yōu)化 ? 優(yōu)采云 發(fā)表了文章 ? 0 個(gè)評論 ? 130 次瀏覽 ? 2021-10-04 17:20
《修真小主播》使用Scrapy抓取電子書(shū)爬蟲(chóng)思路怎么抓取數據
)
使用 Scrapy 抓取電子書(shū)
爬蟲(chóng)的想法
如何抓取數據,首先我們要看看從哪里獲取,打開(kāi)“修真小主播”頁(yè)面,如下:
有一個(gè)目錄選項卡。單擊此選項卡可查看目錄。使用瀏覽器的元素查看工具,我們可以定位到各章節的目錄和相關(guān)信息。根據這些信息,我們可以抓取到特定頁(yè)面:
獲取章節地址
現在我們打開(kāi)xzxzb.py文件,就是我們剛剛創(chuàng )建的爬蟲(chóng):
# -*- coding: utf-8 -*-import scrapyclass XzxzbSpider(scrapy.Spider): name = 'xzxzb' allowed_domains = ['qidian.com'] start_urls = ['http://qidian.com/'] def parse(self, response): pass
start_urls 是目錄地址,爬蟲(chóng)會(huì )自動(dòng)爬取這個(gè)地址,然后在后面的解析中處理結果?,F在我們來(lái)編寫(xiě)代碼處理目錄數據,首先爬取小說(shuō)首頁(yè)獲取目錄列表:
def parse(self, response): pages = response.xpath('//div[@id="j-catalogWrap"]//ul[@]/li') for page in pages: url = page.xpath('./child::a/attribute::href').extract() print url pass
獲取網(wǎng)頁(yè)中的 DOM 數據有兩種方式,一種是使用 CSS 選擇器,另一種是使用 XML xPath 查詢(xún)。
這里我們使用 xPath。請自行研究相關(guān)知識??瓷厦娴拇a。首先我們通過(guò)ID獲取目錄框,獲取類(lèi)cf來(lái)獲取目錄列表:
pages = response.xpath('//div[@id="j-catalogWrap"]//ul[@]/li')
接下來(lái)遍歷子節點(diǎn),查詢(xún)li標簽中a子節點(diǎn)的href屬性,最后打印出來(lái):
for page in pages:<br /> url = page.xpath('./child::a/attribute::href').extract()<br /> print url
這樣,可以說(shuō)是爬取章節路徑的小爬蟲(chóng)寫(xiě)好了。使用以下命令運行xzxzb爬蟲(chóng)查看結果:
scrapy crawl xzxzb
這時(shí)候,我們的程序可能會(huì )出現以下錯誤:
…<br />ImportError: No module named win32api<br />…
只需運行以下語(yǔ)句:
pip install pypiwin32
屏幕輸出如下:
> ...> [u'//read.qidian.com/chapter/MuRzJqCY6MyoLoerY3WDhg2/wrrduN6auIlOBDFlr9quQA2'][u'//read.qidian.com/chapter/MuRzJqCY6MyoLoerY3WDhg2/Jh-J5usgyW62uJcMpdsVgA2'][u'//read.qidian.com/chapter/MuRzJqCY6MyoLoerY3WDhg2/5YXHdBvg1ImaGfXRMrUjdw2'][u'//read.qidian.com/chapter/MuRzJqCY6MyoLoerY3WDhg2/fw5EBeKat-76ItTi_ILQ7A2'][u'//read.qidian.com/chapter/MuRzJqCY6MyoLoerY3WDhg2/KsFh5VutI6PwrjbX3WA1AA2'][u'//read.qidian.com/chapter/MuRzJqCY6MyoLoerY3WDhg2/-mpKJ01gPp1p4rPq4Fd4KQ2'][u'//read.qidian.com/chapter/MuRzJqCY6MyoLoerY3WDhg2/MlZSeYOQxSPM5j8_3RRvhw2'][u'//read.qidian.com/chapter/MuRzJqCY6MyoLoerY3WDhg2/5TXZqGvLi-3M5j8_3RRvhw2'][u'//read.qidian.com/chapter/MuRzJqCY6MyoLoerY3WDhg2/sysD-JPiugv4p8iEw--PPw2'][u'//read.qidian.com/chapter/MuRzJqCY6MyoLoerY3WDhg2/xGckZ01j64-aGfXRMrUjdw2'][u'//read.qidian.com/chapter/MuRzJqCY6MyoLoerY3WDhg2/72lHOJcgmedOBDFlr9quQA2'][u'//read.qidian.com/chapter/MuRzJqCY6MyoLoerY3WDhg2/cZkHZEYnPl22uJcMpdsVgA2'][u'//read.qidian.com/chapter/MuRzJqCY6MyoLoerY3WDhg2/vkNh45O3JsRMs5iq0oQwLQ2'][u'//read.qidian.com/chapter/MuRzJqCY6MyoLoerY3WDhg2/ge4m8RjJyPH6ItTi_ILQ7A2'][u'//read.qidian.com/chapter/MuRzJqCY6MyoLoerY3WDhg2/Y33PuxrKT4dp4rPq4Fd4KQ2'][u'//read.qidian.com/chapter/MuRzJqCY6MyoLoerY3WDhg2/MDQznkrkiyXwrjbX3WA1AA2'][u'//read.qidian.com/chapter/MuRzJqCY6MyoLoerY3WDhg2/A2r-YTzWCYj6ItTi_ILQ7A2'][u'//read.qidian.com/chapter/MuRzJqCY6MyoLoerY3WDhg2/Ng9CuONRKei2uJcMpdsVgA2'][u'//read.qidian.com/chapter/MuRzJqCY6MyoLoerY3WDhg2/Q_AxWAge14pMs5iq0oQwLQ2'][u'//read.qidian.com/chapter/MuRzJqCY6MyoLoerY3WDhg2/ZJshvAu8TVVp4rPq4Fd4KQ2'][u'//read.qidian.com/chapter/MuRzJqCY6MyoLoerY3WDhg2/hYD2P4c5UB2aGfXRMrUjdw2'][u'//read.qidian.com/chapter/MuRzJqCY6MyoLoerY3WDhg2/muxiWf_jpqTgn4SMoDUcDQ2'][u'//read.qidian.com/chapter/MuRzJqCY6MyoLoerY3WDhg2/OQQ5jbADJjVp4rPq4Fd4KQ2']> ...
爬取章節路徑的小爬蟲(chóng)是寫(xiě)出來(lái)的,但是我們的目的不止這些,我們會(huì )用這些地址來(lái)爬取內容:
章節頁(yè)面分析
接下來(lái)我們分析章節頁(yè)面。從章節頁(yè)面我們需要獲取標題和內容。
如果解析器方法用于章節信息爬取,那么我們可以寫(xiě)一個(gè)爬取每個(gè)章節內容的方法,比如:parser_chapter,先看章節頁(yè)面的具體情況:
可以看到,章節的全部?jì)热菰陬?lèi)名main-text-wrap的div標簽中,標題是類(lèi)名j_chapterName的h3標簽,具體內容是類(lèi)名的div標簽讀取內容 j_readContent。
嘗試打印出這些內容:
# -*- coding: utf-8 -*-import scrapyclass XzxzbSpider(scrapy.Spider): name = 'xzxzb' allowed_domains = ['qidian.com'] start_urls = ['https://book.qidian.com/info/1010780117/'] def parse(self, response): pages = response.xpath('//div[@id="j-catalogWrap"]//ul[@]/li') for page in pages: url = page.xpath('./child::a/attribute::href').extract_first() # yield scrapy.Request('https:' + url, callback=self.parse_chapter) yield response.follow(url, callback=self.parse_chapter) pass def parse_chapter(self, response): title = response.xpath('//div[@]//h3[@]/text()').extract_first().strip() content = response.xpath('//div[@]//div[@]').extract_first().strip() print title # print content pass
上一步我們得到了一個(gè)章節地址,它是輸出內容的相對路徑,所以我們使用yield response.follow(url, callback=self.parse_chapter),第二個(gè)參數是處理章節的回調函數頁(yè)面,爬到章節頁(yè)面后,我們解析頁(yè)面并將標題保存到文件中。
next_page = response.urljoin(url)<br />yield scrapy.Request(next_page, callback=self.parse_chapter)
與使用 response.follow 不同,scrapy.Request 需要通過(guò)相對路徑構造絕對路徑。Response.follow 可以直接使用相對路徑,所以不需要調用 urljoin 方法。
注意 response.follow 直接返回一個(gè)Request實(shí)例,可以通過(guò)yield直接返回。
獲取數據后,進(jìn)行存儲。由于我們想要的是一個(gè)html頁(yè)面,我們可以通過(guò)標題來(lái)存儲它。代碼如下:
def parse_chapter(self, response): title = response.xpath('//div[@]//h3[@]/text()').extract_first().strip() content = response.xpath('//div[@]//div[@]').extract_first().strip() # print title # print content filename = './down/%s.html' % (title) with open(filename, 'wb') as f: f.write(content.encode('utf-8')) pass
至此,我們已經(jīng)成功抓取了我們的數據,但是還不能直接使用,需要進(jìn)行排序和優(yōu)化。
數據整理
首先,我們爬下來(lái)的章節頁(yè)面的排序不是很好。如果人工分揀花費太多時(shí)間和精力;另外,章節內容收錄很多額外的東西,閱讀體驗不好,需要優(yōu)化內容布局和可讀性。
我們先對章節進(jìn)行排序,因為目錄中的章節列表是按順序排列的,所以我們只需要在下載頁(yè)面名稱(chēng)中加上一個(gè)序號即可。
但是保存網(wǎng)頁(yè)的代碼是回調函數,只有在處理目錄時(shí)才能確定順序?;卣{函數如何知道訂單?因此,我們需要告訴回調函數處理章節的序號,并且需要向回調函數傳遞參數。修改后的代碼如下所示:
def parse(self, response): pages = response.xpath('//div[@id="j-catalogWrap"]//ul[@]/li') for page in pages: url = page.xpath('./child::a/attribute::href').extract_first() idx = page.xpath('./attribute::data-rid').extract_first() # yield scrapy.Request('https:' + url, callback=self.parse_chapter) req = response.follow(url, callback=self.parse_chapter) req.meta['idx'] = idx yield req pass def parse_chapter(self, response): idx = response.meta['idx'] title = response.xpath('//div[@]//h3[@]/text()').extract_first().strip() content = response.xpath('//div[@]//div[@]').extract_first().strip() # print title # print content filename = './down/%s_%s.html' % (idx, title) cnt = '
%s %s'% (title, content) with open(filename,'wb') as f: f.write(cnt.encode('utf-8')) pass
使用 Sigil 制作電子書(shū)
加載 html 文件
要制作ePub電子書(shū),我們首先通過(guò)Sigil將我們抓取到的文件加載到程序中,在添加文件對話(huà)框中,我們選擇所有文件:
制作目錄
當文件中存在HTML的h標簽時(shí),點(diǎn)擊Generate Catalog按鈕自動(dòng)生成目錄。我們已經(jīng)在之前的數據捕獲中自動(dòng)添加了 h1 標簽:
做封面
封面本質(zhì)上是HTML,可以從頁(yè)面中編輯或抓取,所以就交給你自己實(shí)現吧。
*免責聲明:本文整理于網(wǎng)絡(luò ),版權歸原作者所有。如來(lái)源信息有誤或侵權,請聯(lián)系我們進(jìn)行刪除或授權。
我覺(jué)得不錯,點(diǎn)擊“我在看”轉發(fā)
查看全部
抓取網(wǎng)頁(yè)生成電子書(shū)(
《修真小主播》使用Scrapy抓取電子書(shū)爬蟲(chóng)思路怎么抓取數據
)

使用 Scrapy 抓取電子書(shū)
爬蟲(chóng)的想法
如何抓取數據,首先我們要看看從哪里獲取,打開(kāi)“修真小主播”頁(yè)面,如下:

有一個(gè)目錄選項卡。單擊此選項卡可查看目錄。使用瀏覽器的元素查看工具,我們可以定位到各章節的目錄和相關(guān)信息。根據這些信息,我們可以抓取到特定頁(yè)面:

獲取章節地址
現在我們打開(kāi)xzxzb.py文件,就是我們剛剛創(chuàng )建的爬蟲(chóng):
# -*- coding: utf-8 -*-import scrapyclass XzxzbSpider(scrapy.Spider): name = 'xzxzb' allowed_domains = ['qidian.com'] start_urls = ['http://qidian.com/'] def parse(self, response): pass
start_urls 是目錄地址,爬蟲(chóng)會(huì )自動(dòng)爬取這個(gè)地址,然后在后面的解析中處理結果?,F在我們來(lái)編寫(xiě)代碼處理目錄數據,首先爬取小說(shuō)首頁(yè)獲取目錄列表:
def parse(self, response): pages = response.xpath('//div[@id="j-catalogWrap"]//ul[@]/li') for page in pages: url = page.xpath('./child::a/attribute::href').extract() print url pass
獲取網(wǎng)頁(yè)中的 DOM 數據有兩種方式,一種是使用 CSS 選擇器,另一種是使用 XML xPath 查詢(xún)。
這里我們使用 xPath。請自行研究相關(guān)知識??瓷厦娴拇a。首先我們通過(guò)ID獲取目錄框,獲取類(lèi)cf來(lái)獲取目錄列表:
pages = response.xpath('//div[@id="j-catalogWrap"]//ul[@]/li')
接下來(lái)遍歷子節點(diǎn),查詢(xún)li標簽中a子節點(diǎn)的href屬性,最后打印出來(lái):
for page in pages:<br /> url = page.xpath('./child::a/attribute::href').extract()<br /> print url
這樣,可以說(shuō)是爬取章節路徑的小爬蟲(chóng)寫(xiě)好了。使用以下命令運行xzxzb爬蟲(chóng)查看結果:
scrapy crawl xzxzb
這時(shí)候,我們的程序可能會(huì )出現以下錯誤:
…<br />ImportError: No module named win32api<br />…
只需運行以下語(yǔ)句:
pip install pypiwin32
屏幕輸出如下:
> ...> [u'//read.qidian.com/chapter/MuRzJqCY6MyoLoerY3WDhg2/wrrduN6auIlOBDFlr9quQA2'][u'//read.qidian.com/chapter/MuRzJqCY6MyoLoerY3WDhg2/Jh-J5usgyW62uJcMpdsVgA2'][u'//read.qidian.com/chapter/MuRzJqCY6MyoLoerY3WDhg2/5YXHdBvg1ImaGfXRMrUjdw2'][u'//read.qidian.com/chapter/MuRzJqCY6MyoLoerY3WDhg2/fw5EBeKat-76ItTi_ILQ7A2'][u'//read.qidian.com/chapter/MuRzJqCY6MyoLoerY3WDhg2/KsFh5VutI6PwrjbX3WA1AA2'][u'//read.qidian.com/chapter/MuRzJqCY6MyoLoerY3WDhg2/-mpKJ01gPp1p4rPq4Fd4KQ2'][u'//read.qidian.com/chapter/MuRzJqCY6MyoLoerY3WDhg2/MlZSeYOQxSPM5j8_3RRvhw2'][u'//read.qidian.com/chapter/MuRzJqCY6MyoLoerY3WDhg2/5TXZqGvLi-3M5j8_3RRvhw2'][u'//read.qidian.com/chapter/MuRzJqCY6MyoLoerY3WDhg2/sysD-JPiugv4p8iEw--PPw2'][u'//read.qidian.com/chapter/MuRzJqCY6MyoLoerY3WDhg2/xGckZ01j64-aGfXRMrUjdw2'][u'//read.qidian.com/chapter/MuRzJqCY6MyoLoerY3WDhg2/72lHOJcgmedOBDFlr9quQA2'][u'//read.qidian.com/chapter/MuRzJqCY6MyoLoerY3WDhg2/cZkHZEYnPl22uJcMpdsVgA2'][u'//read.qidian.com/chapter/MuRzJqCY6MyoLoerY3WDhg2/vkNh45O3JsRMs5iq0oQwLQ2'][u'//read.qidian.com/chapter/MuRzJqCY6MyoLoerY3WDhg2/ge4m8RjJyPH6ItTi_ILQ7A2'][u'//read.qidian.com/chapter/MuRzJqCY6MyoLoerY3WDhg2/Y33PuxrKT4dp4rPq4Fd4KQ2'][u'//read.qidian.com/chapter/MuRzJqCY6MyoLoerY3WDhg2/MDQznkrkiyXwrjbX3WA1AA2'][u'//read.qidian.com/chapter/MuRzJqCY6MyoLoerY3WDhg2/A2r-YTzWCYj6ItTi_ILQ7A2'][u'//read.qidian.com/chapter/MuRzJqCY6MyoLoerY3WDhg2/Ng9CuONRKei2uJcMpdsVgA2'][u'//read.qidian.com/chapter/MuRzJqCY6MyoLoerY3WDhg2/Q_AxWAge14pMs5iq0oQwLQ2'][u'//read.qidian.com/chapter/MuRzJqCY6MyoLoerY3WDhg2/ZJshvAu8TVVp4rPq4Fd4KQ2'][u'//read.qidian.com/chapter/MuRzJqCY6MyoLoerY3WDhg2/hYD2P4c5UB2aGfXRMrUjdw2'][u'//read.qidian.com/chapter/MuRzJqCY6MyoLoerY3WDhg2/muxiWf_jpqTgn4SMoDUcDQ2'][u'//read.qidian.com/chapter/MuRzJqCY6MyoLoerY3WDhg2/OQQ5jbADJjVp4rPq4Fd4KQ2']> ...
爬取章節路徑的小爬蟲(chóng)是寫(xiě)出來(lái)的,但是我們的目的不止這些,我們會(huì )用這些地址來(lái)爬取內容:
章節頁(yè)面分析
接下來(lái)我們分析章節頁(yè)面。從章節頁(yè)面我們需要獲取標題和內容。
如果解析器方法用于章節信息爬取,那么我們可以寫(xiě)一個(gè)爬取每個(gè)章節內容的方法,比如:parser_chapter,先看章節頁(yè)面的具體情況:

可以看到,章節的全部?jì)热菰陬?lèi)名main-text-wrap的div標簽中,標題是類(lèi)名j_chapterName的h3標簽,具體內容是類(lèi)名的div標簽讀取內容 j_readContent。
嘗試打印出這些內容:
# -*- coding: utf-8 -*-import scrapyclass XzxzbSpider(scrapy.Spider): name = 'xzxzb' allowed_domains = ['qidian.com'] start_urls = ['https://book.qidian.com/info/1010780117/'] def parse(self, response): pages = response.xpath('//div[@id="j-catalogWrap"]//ul[@]/li') for page in pages: url = page.xpath('./child::a/attribute::href').extract_first() # yield scrapy.Request('https:' + url, callback=self.parse_chapter) yield response.follow(url, callback=self.parse_chapter) pass def parse_chapter(self, response): title = response.xpath('//div[@]//h3[@]/text()').extract_first().strip() content = response.xpath('//div[@]//div[@]').extract_first().strip() print title # print content pass
上一步我們得到了一個(gè)章節地址,它是輸出內容的相對路徑,所以我們使用yield response.follow(url, callback=self.parse_chapter),第二個(gè)參數是處理章節的回調函數頁(yè)面,爬到章節頁(yè)面后,我們解析頁(yè)面并將標題保存到文件中。
next_page = response.urljoin(url)<br />yield scrapy.Request(next_page, callback=self.parse_chapter)
與使用 response.follow 不同,scrapy.Request 需要通過(guò)相對路徑構造絕對路徑。Response.follow 可以直接使用相對路徑,所以不需要調用 urljoin 方法。
注意 response.follow 直接返回一個(gè)Request實(shí)例,可以通過(guò)yield直接返回。
獲取數據后,進(jìn)行存儲。由于我們想要的是一個(gè)html頁(yè)面,我們可以通過(guò)標題來(lái)存儲它。代碼如下:
def parse_chapter(self, response): title = response.xpath('//div[@]//h3[@]/text()').extract_first().strip() content = response.xpath('//div[@]//div[@]').extract_first().strip() # print title # print content filename = './down/%s.html' % (title) with open(filename, 'wb') as f: f.write(content.encode('utf-8')) pass
至此,我們已經(jīng)成功抓取了我們的數據,但是還不能直接使用,需要進(jìn)行排序和優(yōu)化。
數據整理
首先,我們爬下來(lái)的章節頁(yè)面的排序不是很好。如果人工分揀花費太多時(shí)間和精力;另外,章節內容收錄很多額外的東西,閱讀體驗不好,需要優(yōu)化內容布局和可讀性。
我們先對章節進(jìn)行排序,因為目錄中的章節列表是按順序排列的,所以我們只需要在下載頁(yè)面名稱(chēng)中加上一個(gè)序號即可。
但是保存網(wǎng)頁(yè)的代碼是回調函數,只有在處理目錄時(shí)才能確定順序?;卣{函數如何知道訂單?因此,我們需要告訴回調函數處理章節的序號,并且需要向回調函數傳遞參數。修改后的代碼如下所示:
def parse(self, response): pages = response.xpath('//div[@id="j-catalogWrap"]//ul[@]/li') for page in pages: url = page.xpath('./child::a/attribute::href').extract_first() idx = page.xpath('./attribute::data-rid').extract_first() # yield scrapy.Request('https:' + url, callback=self.parse_chapter) req = response.follow(url, callback=self.parse_chapter) req.meta['idx'] = idx yield req pass def parse_chapter(self, response): idx = response.meta['idx'] title = response.xpath('//div[@]//h3[@]/text()').extract_first().strip() content = response.xpath('//div[@]//div[@]').extract_first().strip() # print title # print content filename = './down/%s_%s.html' % (idx, title) cnt = '
%s %s'% (title, content) with open(filename,'wb') as f: f.write(cnt.encode('utf-8')) pass
使用 Sigil 制作電子書(shū)
加載 html 文件
要制作ePub電子書(shū),我們首先通過(guò)Sigil將我們抓取到的文件加載到程序中,在添加文件對話(huà)框中,我們選擇所有文件:

制作目錄
當文件中存在HTML的h標簽時(shí),點(diǎn)擊Generate Catalog按鈕自動(dòng)生成目錄。我們已經(jīng)在之前的數據捕獲中自動(dòng)添加了 h1 標簽:

做封面

封面本質(zhì)上是HTML,可以從頁(yè)面中編輯或抓取,所以就交給你自己實(shí)現吧。

*免責聲明:本文整理于網(wǎng)絡(luò ),版權歸原作者所有。如來(lái)源信息有誤或侵權,請聯(lián)系我們進(jìn)行刪除或授權。

我覺(jué)得不錯,點(diǎn)擊“我在看”轉發(fā)


