抓取網(wǎng)頁(yè)生成電子書(shū)
抓取網(wǎng)頁(yè)生成電子書(shū)(幾個(gè)適合新入門(mén)學(xué)習Python爬蟲(chóng)的網(wǎng)頁(yè),總有一款適合你!)
網(wǎng)站優(yōu)化 ? 優(yōu)采云 發(fā)表了文章 ? 0 個(gè)評論 ? 139 次瀏覽 ? 2022-02-11 17:29
推薦幾個(gè)適合初學(xué)者學(xué)習Python爬蟲(chóng)的網(wǎng)頁(yè)??傆幸豢钸m合你!
廢話(huà)不多說(shuō),直接上干貨吧!
打開(kāi)今日頭條首頁(yè),搜索小姐姐,或者其他你感興趣的內容,然后點(diǎn)擊圖庫
動(dòng)態(tài)加載的json數據出來(lái),沒(méi)有反爬。注意,如果不想抓取內容中的圖片,只能抓取縮略圖,也就是本頁(yè)顯示的圖片。它在 json 數據的 image_list 中。注意,將 url 中的列表更改為 origin,這是大局!代碼顯示如下
圖片地址全部出!
全書(shū)網(wǎng):直接源碼匹配相關(guān)內容
直接搜索全書(shū),打開(kāi)首頁(yè),找到一本小說(shuō),比如《盜墓筆記》,點(diǎn)擊跳轉網(wǎng)頁(yè),點(diǎn)擊開(kāi)始閱讀,所有章節出現,小說(shuō)內容,網(wǎng)頁(yè)內容進(jìn)入章節后出現代碼。如下:
80本電子書(shū):匹配地址直接下載壓縮文件
80 與上面的全書(shū)網(wǎng)類(lèi)似,但它本身提供了下載功能,可以直接構造下載文件、頁(yè)面截圖和帶有小說(shuō)ID和名稱(chēng)的代碼:
其他類(lèi)似網(wǎng)站
類(lèi)似的網(wǎng)站還有:美子圖、美拓、筆趣閣、九九等,連百度圖片也可以通過(guò)抓包獲取數據!
以上代碼都是手寫(xiě)的,沒(méi)有排版,有興趣的可以自己打,或者比如小說(shuō)網(wǎng)站,可以先抓取大類(lèi),然后把小說(shuō)全部拿進(jìn)去每一類(lèi),最后把所有的小說(shuō)都抓出來(lái),小說(shuō)的內容,這就是全站爬蟲(chóng)?。?!
如果你還有其他合適的網(wǎng)站,希望你可以在評論區分享!一起交流吧! 查看全部
抓取網(wǎng)頁(yè)生成電子書(shū)(幾個(gè)適合新入門(mén)學(xué)習Python爬蟲(chóng)的網(wǎng)頁(yè),總有一款適合你!)
推薦幾個(gè)適合初學(xué)者學(xué)習Python爬蟲(chóng)的網(wǎng)頁(yè)??傆幸豢钸m合你!
廢話(huà)不多說(shuō),直接上干貨吧!
打開(kāi)今日頭條首頁(yè),搜索小姐姐,或者其他你感興趣的內容,然后點(diǎn)擊圖庫
動(dòng)態(tài)加載的json數據出來(lái),沒(méi)有反爬。注意,如果不想抓取內容中的圖片,只能抓取縮略圖,也就是本頁(yè)顯示的圖片。它在 json 數據的 image_list 中。注意,將 url 中的列表更改為 origin,這是大局!代碼顯示如下
圖片地址全部出!
全書(shū)網(wǎng):直接源碼匹配相關(guān)內容
直接搜索全書(shū),打開(kāi)首頁(yè),找到一本小說(shuō),比如《盜墓筆記》,點(diǎn)擊跳轉網(wǎng)頁(yè),點(diǎn)擊開(kāi)始閱讀,所有章節出現,小說(shuō)內容,網(wǎng)頁(yè)內容進(jìn)入章節后出現代碼。如下:
80本電子書(shū):匹配地址直接下載壓縮文件
80 與上面的全書(shū)網(wǎng)類(lèi)似,但它本身提供了下載功能,可以直接構造下載文件、頁(yè)面截圖和帶有小說(shuō)ID和名稱(chēng)的代碼:
其他類(lèi)似網(wǎng)站
類(lèi)似的網(wǎng)站還有:美子圖、美拓、筆趣閣、九九等,連百度圖片也可以通過(guò)抓包獲取數據!
以上代碼都是手寫(xiě)的,沒(méi)有排版,有興趣的可以自己打,或者比如小說(shuō)網(wǎng)站,可以先抓取大類(lèi),然后把小說(shuō)全部拿進(jìn)去每一類(lèi),最后把所有的小說(shuō)都抓出來(lái),小說(shuō)的內容,這就是全站爬蟲(chóng)?。?!
如果你還有其他合適的網(wǎng)站,希望你可以在評論區分享!一起交流吧!
抓取網(wǎng)頁(yè)生成電子書(shū)(為什么80%的碼農都做不了架構師?(圖))
網(wǎng)站優(yōu)化 ? 優(yōu)采云 發(fā)表了文章 ? 0 個(gè)評論 ? 98 次瀏覽 ? 2022-02-11 02:12
為什么 80% 的程序員不能成為架構師? >>>
####Calibre 制作電子書(shū)
Calibre支持用Python語(yǔ)言編寫(xiě)腳本,爬取網(wǎng)頁(yè)內容生成電子書(shū),默認為mobi格式
在爬取新聞下拉菜單中選擇添加自定義新聞源New Recipe---切換到高級模式,默認提供代碼模板,您只需添加自定義網(wǎng)頁(yè)源即可編寫(xiě)Recipe文件代碼抓取新聞,選擇自定義來(lái)源,下載即可
#!/usr/bin/env python
# vim:fileencoding=utf-8
from __future__ import unicode_literals, division, absolute_import, print_function
from calibre.web.feeds.news import BasicNewsRecipe
class liaoxuefeng_python(BasicNewsRecipe):
'''自定義的Recipe都繼承自Calibre提供的基類(lèi)BasicNewsRecipe,必須實(shí)現parse_index()方法
'''
#電子書(shū)名稱(chēng)
title = '廖雪峰Python教程3'
description = 'python教程'
max_articles_per_feed = 200
# 設置每隔1s下載一個(gè)章節,默認值為0,當網(wǎng)絡(luò )不好時(shí),可以把這個(gè)值調大點(diǎn)
delay = 1
url_prefix = 'http://www.liaoxuefeng.com'
no_stylesheets = True
#抓取每一個(gè)頁(yè)面中保留的tag
keep_only_tags = [{ 'class': 'x-content' }]
#頁(yè)面中刪除的Tag
remove_tags=[{'class':'x-wiki-info'}]
#指定Tag之后的元素都被刪除
remove_tags_after=[{'class':'x-wiki-content'}]
def get_title(self, link):
return link.contents[0].strip()
def parse_index(self):
#index_to_soup()由BasicNewsRecipe實(shí)現,使用Beautifulsoup抓取一個(gè)網(wǎng)址,并獲得這個(gè)網(wǎng)頁(yè)內容的soup對象
soup = self.index_to_soup('http://www.liaoxuefeng.com/wik ... %2339;)
# 左側導航欄
div = soup.find('div', { 'class': 'x-sidebar-left-content' })
# 找到每一個(gè)章節的標題和對應的URL,Calibre會(huì )下載每一個(gè)URL的html,使用上面的類(lèi)屬性進(jìn)行解析
articles = []
for link in div.findAll('a'):
til = self.get_title(link)
url = self.url_prefix + link['href']
a = { 'title': til, 'url': url }
articles.append(a)
#返回一個(gè)列表,這個(gè)列表中是多個(gè)元組,每個(gè)元組是書(shū)的一卷('廖雪峰python教程', articles),每一卷中又有多個(gè)章節articles
tutorial = [('廖雪峰python教程', articles)]
return tutorial
參考:使用calibre和python制作電子書(shū)---Python和Git教程
轉載于: 查看全部
抓取網(wǎng)頁(yè)生成電子書(shū)(為什么80%的碼農都做不了架構師?(圖))
為什么 80% 的程序員不能成為架構師? >>>

####Calibre 制作電子書(shū)
Calibre支持用Python語(yǔ)言編寫(xiě)腳本,爬取網(wǎng)頁(yè)內容生成電子書(shū),默認為mobi格式
在爬取新聞下拉菜單中選擇添加自定義新聞源New Recipe---切換到高級模式,默認提供代碼模板,您只需添加自定義網(wǎng)頁(yè)源即可編寫(xiě)Recipe文件代碼抓取新聞,選擇自定義來(lái)源,下載即可
#!/usr/bin/env python
# vim:fileencoding=utf-8
from __future__ import unicode_literals, division, absolute_import, print_function
from calibre.web.feeds.news import BasicNewsRecipe
class liaoxuefeng_python(BasicNewsRecipe):
'''自定義的Recipe都繼承自Calibre提供的基類(lèi)BasicNewsRecipe,必須實(shí)現parse_index()方法
'''
#電子書(shū)名稱(chēng)
title = '廖雪峰Python教程3'
description = 'python教程'
max_articles_per_feed = 200
# 設置每隔1s下載一個(gè)章節,默認值為0,當網(wǎng)絡(luò )不好時(shí),可以把這個(gè)值調大點(diǎn)
delay = 1
url_prefix = 'http://www.liaoxuefeng.com'
no_stylesheets = True
#抓取每一個(gè)頁(yè)面中保留的tag
keep_only_tags = [{ 'class': 'x-content' }]
#頁(yè)面中刪除的Tag
remove_tags=[{'class':'x-wiki-info'}]
#指定Tag之后的元素都被刪除
remove_tags_after=[{'class':'x-wiki-content'}]
def get_title(self, link):
return link.contents[0].strip()
def parse_index(self):
#index_to_soup()由BasicNewsRecipe實(shí)現,使用Beautifulsoup抓取一個(gè)網(wǎng)址,并獲得這個(gè)網(wǎng)頁(yè)內容的soup對象
soup = self.index_to_soup('http://www.liaoxuefeng.com/wik ... %2339;)
# 左側導航欄
div = soup.find('div', { 'class': 'x-sidebar-left-content' })
# 找到每一個(gè)章節的標題和對應的URL,Calibre會(huì )下載每一個(gè)URL的html,使用上面的類(lèi)屬性進(jìn)行解析
articles = []
for link in div.findAll('a'):
til = self.get_title(link)
url = self.url_prefix + link['href']
a = { 'title': til, 'url': url }
articles.append(a)
#返回一個(gè)列表,這個(gè)列表中是多個(gè)元組,每個(gè)元組是書(shū)的一卷('廖雪峰python教程', articles),每一卷中又有多個(gè)章節articles
tutorial = [('廖雪峰python教程', articles)]
return tutorial
參考:使用calibre和python制作電子書(shū)---Python和Git教程
轉載于:
抓取網(wǎng)頁(yè)生成電子書(shū)(廖雪峰的Python教程爬下來(lái)做成PDF電子書(shū)方便大家離線(xiàn)閱讀 )
網(wǎng)站優(yōu)化 ? 優(yōu)采云 發(fā)表了文章 ? 0 個(gè)評論 ? 134 次瀏覽 ? 2022-02-10 16:13
)
看來(lái)寫(xiě)爬蟲(chóng)并不比使用 Python 更合適。Python社區提供的爬蟲(chóng)工具琳瑯滿(mǎn)目,你可以分分鐘寫(xiě)一個(gè)爬蟲(chóng),里面有各種可以直接使用的庫。今天,我正在考慮寫(xiě)一個(gè)爬蟲(chóng)。,爬取廖雪峰的Python教程,制作成PDF電子書(shū),供大家離線(xiàn)閱讀。
在開(kāi)始寫(xiě)爬蟲(chóng)之前,我們先分析一下網(wǎng)站1的頁(yè)面結構。頁(yè)面左側是教程目錄的大綱,每個(gè)URL對應右側一個(gè)文章,右上角是文章的標題,中間是正文部分文章的,body的內容是我們關(guān)注的重點(diǎn),我們要爬取的數據是所有網(wǎng)頁(yè)的body部分,底部是用戶(hù)的評論區,評論區對我們來(lái)說(shuō)很重要它沒(méi)有用,所以可以忽略。
工具準備
搞清楚網(wǎng)站的基本結構后,就可以開(kāi)始準備爬蟲(chóng)所依賴(lài)的工具包了。request和beautifulsoup是爬蟲(chóng)的兩大神器,reuqests用于網(wǎng)絡(luò )請求,beautifulsoup用于操作html數據。有了這兩個(gè)穿梭機,工作敏捷,我們不需要像scrapy這樣的爬蟲(chóng)框架,有點(diǎn)像小程序殺雞。另外,既然html文件轉換成pdf,就必須有相應的庫支持,wkhtmltopdf是一個(gè)很好的工具,可以用于多平臺html到pdf的轉換,pdfkit是wkhtmltopdf的Python包。先安裝以下依賴(lài),再安裝wkhtmltopdf
pip install requests
pip install beautifulsoup
pip install pdfkit
安裝 wkhtmltopdf
Windows平臺,直接從wkhtmltopdf 2官網(wǎng)下載穩定版進(jìn)行安裝。安裝完成后,將程序的執行路徑添加到系統環(huán)境的$PATH變量中。否則,如果pdfkit找不到wkhtmltopdf,就會(huì )出現“No wkhtmltopdf executable found”的錯誤。Ubuntu和CentOS可以直接從命令行安裝
$ sudo apt-get install wkhtmltopdf # ubuntu
$ sudo yum intsall wkhtmltopdf # centos
爬蟲(chóng)實(shí)現
一切準備就緒后,就可以開(kāi)始編碼了,不過(guò)最好在寫(xiě)代碼之前整理一下思路。該程序的目的是將所有URL對應的html正文部分保存在本地,然后使用pdfkit將這些文件轉換成pdf文件。讓我們拆分任務(wù)。首先將一個(gè)URL對應的html body保存到本地,然后找到所有的URL,進(jìn)行同樣的操作。
使用Chrome瀏覽器找到頁(yè)面body部分的標簽,按F12找到文字對應的div標簽:
, div 是頁(yè)面的正文內容。在本地使用請求加載整個(gè)頁(yè)面后,您可以使用 beautifulsoup 操作 HTML dom 元素以提取正文內容。
具體實(shí)現代碼如下:使用soup.find_all函數找到body標簽,然后將body部分的內容保存到a.html文件中。
def parse_url_to_html(url):
response = requests.get(url)
soup = BeautifulSoup(response.content, "html5lib")
body = soup.find_all(class_="x-wiki-content")[0]
html = str(body)
with open("a.html", 'wb') as f:
f.write(html)
第二步是解析頁(yè)面左側的所有URL。同樣的方法,找到左側的菜單選項卡
具體代碼實(shí)現邏輯:因為頁(yè)面上有uk-nav uk-nav-side的兩個(gè)類(lèi)屬性,真正的目錄列表是第二個(gè)。獲取所有的url,第一步也寫(xiě)了url轉html的功能。
def get_url_list():
"""
獲取所有URL目錄列表
"""
response = requests.get("http://www.liaoxuefeng.com/wik ... 6quot;)
soup = BeautifulSoup(response.content, "html5lib")
menu_tag = soup.find_all(class_="uk-nav uk-nav-side")[1]
urls = []
for li in menu_tag.find_all("li"):
url = "http://www.liaoxuefeng.com" + li.a.get('href')
urls.append(url)
return urls
最后一步是將html轉換為pdf文件。轉換成pdf文件很簡(jiǎn)單,因為pdfkit封裝了所有的邏輯,只需要調用函數pdfkit.from_file
def save_pdf(htmls):
"""
把所有html文件轉換成pdf文件
"""
options = {
'page-size': 'Letter',
'encoding': "UTF-8",
'custom-header': [
('Accept-Encoding', 'gzip')
]
}
pdfkit.from_file(htmls, file_name, options=options)
執行save_pdf函數,生成電子書(shū)pdf文件,效果圖為:
總結
總代碼量不到 50 行,但是,等等,上面給出的代碼省略了一些細節,比如如何獲取 文章 的標題,body 內容的 img 標簽使用相對路徑,如果如果要在pdf中正常顯示圖片,需要將相對路徑改為絕對路徑,并刪除保存的html臨時(shí)文件。這些細節都在github上。
完整代碼可以在 github 上下載。該代碼適用于Windows平臺的個(gè)人測試。歡迎 fork 下載并改進(jìn)它。GitHub地址3,無(wú)法訪(fǎng)問(wèn)GitHub的同學(xué)可以使用碼云4,關(guān)注公眾號“程序員微站”并回復可以免費下載閱讀《廖雪峰Python教程》電子書(shū)PDF文件“PDF”。
本文首發(fā)于公眾號“程序員的微站”(id:VTtalk),分享Python干貨的溫暖內容
博客地址:
查看全部
抓取網(wǎng)頁(yè)生成電子書(shū)(廖雪峰的Python教程爬下來(lái)做成PDF電子書(shū)方便大家離線(xiàn)閱讀
)
看來(lái)寫(xiě)爬蟲(chóng)并不比使用 Python 更合適。Python社區提供的爬蟲(chóng)工具琳瑯滿(mǎn)目,你可以分分鐘寫(xiě)一個(gè)爬蟲(chóng),里面有各種可以直接使用的庫。今天,我正在考慮寫(xiě)一個(gè)爬蟲(chóng)。,爬取廖雪峰的Python教程,制作成PDF電子書(shū),供大家離線(xiàn)閱讀。
在開(kāi)始寫(xiě)爬蟲(chóng)之前,我們先分析一下網(wǎng)站1的頁(yè)面結構。頁(yè)面左側是教程目錄的大綱,每個(gè)URL對應右側一個(gè)文章,右上角是文章的標題,中間是正文部分文章的,body的內容是我們關(guān)注的重點(diǎn),我們要爬取的數據是所有網(wǎng)頁(yè)的body部分,底部是用戶(hù)的評論區,評論區對我們來(lái)說(shuō)很重要它沒(méi)有用,所以可以忽略。

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

具體實(shí)現代碼如下:使用soup.find_all函數找到body標簽,然后將body部分的內容保存到a.html文件中。
def parse_url_to_html(url):
response = requests.get(url)
soup = BeautifulSoup(response.content, "html5lib")
body = soup.find_all(class_="x-wiki-content")[0]
html = str(body)
with open("a.html", 'wb') as f:
f.write(html)
第二步是解析頁(yè)面左側的所有URL。同樣的方法,找到左側的菜單選項卡

具體代碼實(shí)現邏輯:因為頁(yè)面上有uk-nav uk-nav-side的兩個(gè)類(lèi)屬性,真正的目錄列表是第二個(gè)。獲取所有的url,第一步也寫(xiě)了url轉html的功能。
def get_url_list():
"""
獲取所有URL目錄列表
"""
response = requests.get("http://www.liaoxuefeng.com/wik ... 6quot;)
soup = BeautifulSoup(response.content, "html5lib")
menu_tag = soup.find_all(class_="uk-nav uk-nav-side")[1]
urls = []
for li in menu_tag.find_all("li"):
url = "http://www.liaoxuefeng.com" + li.a.get('href')
urls.append(url)
return urls
最后一步是將html轉換為pdf文件。轉換成pdf文件很簡(jiǎn)單,因為pdfkit封裝了所有的邏輯,只需要調用函數pdfkit.from_file
def save_pdf(htmls):
"""
把所有html文件轉換成pdf文件
"""
options = {
'page-size': 'Letter',
'encoding': "UTF-8",
'custom-header': [
('Accept-Encoding', 'gzip')
]
}
pdfkit.from_file(htmls, file_name, options=options)
執行save_pdf函數,生成電子書(shū)pdf文件,效果圖為:

總結
總代碼量不到 50 行,但是,等等,上面給出的代碼省略了一些細節,比如如何獲取 文章 的標題,body 內容的 img 標簽使用相對路徑,如果如果要在pdf中正常顯示圖片,需要將相對路徑改為絕對路徑,并刪除保存的html臨時(shí)文件。這些細節都在github上。
完整代碼可以在 github 上下載。該代碼適用于Windows平臺的個(gè)人測試。歡迎 fork 下載并改進(jìn)它。GitHub地址3,無(wú)法訪(fǎng)問(wèn)GitHub的同學(xué)可以使用碼云4,關(guān)注公眾號“程序員微站”并回復可以免費下載閱讀《廖雪峰Python教程》電子書(shū)PDF文件“PDF”。
本文首發(fā)于公眾號“程序員的微站”(id:VTtalk),分享Python干貨的溫暖內容
博客地址:
抓取網(wǎng)頁(yè)生成電子書(shū)(行行網(wǎng)電子書(shū)多線(xiàn)程爬取-擼代碼代碼非常簡(jiǎn)單-寫(xiě)在前面 )
網(wǎng)站優(yōu)化 ? 優(yōu)采云 發(fā)表了文章 ? 0 個(gè)評論 ? 117 次瀏覽 ? 2022-02-09 10:07
)
星星網(wǎng)電子書(shū)多線(xiàn)程爬取——寫(xiě)在前面
最近想找幾本電子書(shū)看,翻了翻,然后找到了一個(gè)叫周渡的網(wǎng)站,網(wǎng)站很好,簡(jiǎn)單清爽,有書(shū)很多,而且都是在百度上打開(kāi)的,網(wǎng)盤(pán)可以直接下載,更新速度也還行,就爬了上去。這篇文章可以文章學(xué)習,這么好的分享網(wǎng)站,盡量不要爬,會(huì )影響別人訪(fǎng)問(wèn)速度。需要數據的可以在我的博客下評論,我會(huì )發(fā)給你,QQ,郵箱什么的。
這個(gè)網(wǎng)站頁(yè)面的邏輯很簡(jiǎn)單。我翻閱了圖書(shū)詳情頁(yè)面,它看起來(lái)是這樣的。我們只需要循環(huán)生成這些頁(yè)面的鏈接,然后就可以爬取了。為了速度,我使用多線(xiàn)程。, 你可以試試看。如果想爬取后面的數據,就在本博客下方發(fā)表評論,不要亂搞別人的服務(wù)器。
11393.html11.html?!?br /> 星星網(wǎng)電子書(shū)多線(xiàn)程爬取-代碼
代碼非常簡(jiǎn)單。以我們之前的教程做鋪墊,用很少的代碼就可以實(shí)現完整的功能。最后將采集的內容寫(xiě)入csv文件,(什么是csv,百度知道)這段代碼是IO密集型操作,我們使用aiohttp模塊來(lái)編寫(xiě)。
步驟1
連接 URL 并啟動(dòng)線(xiàn)程。
上面的代碼可以同步開(kāi)啟N個(gè)多線(xiàn)程,但是這樣很容易導致其他人的服務(wù)器癱瘓。因此,我們必須限制并發(fā)數。對于以下代碼,請嘗試將其放在指定位置。
第2步
為了處理捕獲的 Web 源代碼并提取我們想要的元素,我添加了一個(gè)使用 lxml 提取數據的方法。
第 3 步
數據格式化后,將其保存為 csv 文件,然后收工!
星星網(wǎng)電子書(shū)多線(xiàn)程爬取——運行代碼并查看結果
查看全部
抓取網(wǎng)頁(yè)生成電子書(shū)(行行網(wǎng)電子書(shū)多線(xiàn)程爬取-擼代碼代碼非常簡(jiǎn)單-寫(xiě)在前面
)
星星網(wǎng)電子書(shū)多線(xiàn)程爬取——寫(xiě)在前面
最近想找幾本電子書(shū)看,翻了翻,然后找到了一個(gè)叫周渡的網(wǎng)站,網(wǎng)站很好,簡(jiǎn)單清爽,有書(shū)很多,而且都是在百度上打開(kāi)的,網(wǎng)盤(pán)可以直接下載,更新速度也還行,就爬了上去。這篇文章可以文章學(xué)習,這么好的分享網(wǎng)站,盡量不要爬,會(huì )影響別人訪(fǎng)問(wèn)速度。需要數據的可以在我的博客下評論,我會(huì )發(fā)給你,QQ,郵箱什么的。


這個(gè)網(wǎng)站頁(yè)面的邏輯很簡(jiǎn)單。我翻閱了圖書(shū)詳情頁(yè)面,它看起來(lái)是這樣的。我們只需要循環(huán)生成這些頁(yè)面的鏈接,然后就可以爬取了。為了速度,我使用多線(xiàn)程。, 你可以試試看。如果想爬取后面的數據,就在本博客下方發(fā)表評論,不要亂搞別人的服務(wù)器。
11393.html11.html?!?br /> 星星網(wǎng)電子書(shū)多線(xiàn)程爬取-代碼
代碼非常簡(jiǎn)單。以我們之前的教程做鋪墊,用很少的代碼就可以實(shí)現完整的功能。最后將采集的內容寫(xiě)入csv文件,(什么是csv,百度知道)這段代碼是IO密集型操作,我們使用aiohttp模塊來(lái)編寫(xiě)。
步驟1
連接 URL 并啟動(dòng)線(xiàn)程。

上面的代碼可以同步開(kāi)啟N個(gè)多線(xiàn)程,但是這樣很容易導致其他人的服務(wù)器癱瘓。因此,我們必須限制并發(fā)數。對于以下代碼,請嘗試將其放在指定位置。

第2步
為了處理捕獲的 Web 源代碼并提取我們想要的元素,我添加了一個(gè)使用 lxml 提取數據的方法。

第 3 步
數據格式化后,將其保存為 csv 文件,然后收工!

星星網(wǎng)電子書(shū)多線(xiàn)程爬取——運行代碼并查看結果

抓取網(wǎng)頁(yè)生成電子書(shū)(國家數據國家統計數據庫全新改版,提供了哪些服務(wù)? )
網(wǎng)站優(yōu)化 ? 優(yōu)采云 發(fā)表了文章 ? 0 個(gè)評論 ? 97 次瀏覽 ? 2022-02-09 09:25
)
給大家推薦一些有趣又好用的網(wǎng)站。
如在線(xiàn)古籍圖書(shū)館、全國數據網(wǎng)站、地球大數據共享服務(wù)平臺、在線(xiàn)街道設計共享平臺-Streetmix、在線(xiàn)問(wèn)卷調查工具-Golden data、開(kāi)源地圖下載-OpenStreetMap、騰訊位置大數據、快速訪(fǎng)問(wèn)Site SU模型-CAD Mapper、上海1949年與2019年對比-歷史航拍圖、在線(xiàn)詞云生成工具-微詞云等。
標簽系統
規劃資源和工具相冊頁(yè)面
電子書(shū)搜索引擎 - Kumo Search
聚魔搜書(shū)是一個(gè)電子書(shū)搜索引擎,使用這個(gè)搜索引擎你可以找到各種格式的電子書(shū),包括mobi、epub、pdf、azw3等。
網(wǎng)址:
?。c(diǎn)擊圖片進(jìn)入網(wǎng)站)
網(wǎng)上古籍圖書(shū)館 - 書(shū)柜
Shuge() 是一個(gè)免費開(kāi)放的在線(xiàn)古籍圖書(shū)館。致力于開(kāi)放分享、介紹、推薦珍貴古籍、善本,鼓勵文化藝術(shù)作品數字化歸檔。分享內容僅限于公共版權領(lǐng)域的書(shū)籍(參考標準伯爾尼公約);最大限度地還原圖書(shū)的質(zhì)量和內容;這個(gè)計劃讓大家可以自由自在地享受那些來(lái)之不易的書(shū)籍。讓大家感受人類(lèi)文明的進(jìn)步。
BookGrid出版的書(shū)籍以PDF格式為主,帶有高清彩色圖片。大多數書(shū)籍的單頁(yè)寬度超過(guò)1400像素,雙頁(yè)寬度超過(guò)2400像素。宋元時(shí)期出版書(shū)籍,明清珍本至現代版。
網(wǎng)址:
?。c(diǎn)擊圖片進(jìn)入網(wǎng)站)
國家數據
新版國家統計數據庫提供以下服務(wù):
網(wǎng)址:
?。c(diǎn)擊圖片進(jìn)入網(wǎng)站)
地球大數據共享服務(wù)平臺
中科院發(fā)布的“地球大數據科學(xué)工程”A類(lèi)戰略性先導科技項目——地球大數據共享服務(wù)平臺2018年度成果。
地球大數據共享服務(wù)平臺是一個(gè)整合多領(lǐng)域海量數據,服務(wù)于數據驅動(dòng)的科學(xué)發(fā)現和決策支持的科學(xué)平臺。該平臺以共享的方式為全球用戶(hù)提供具有全球唯一標識的系統化、多樣化、動(dòng)態(tài)化、連續化、標準化的地球大數據。目前共享數據總量約5PB,包括地球觀(guān)測數據1.8PB、生物生態(tài)數據2.6PB、大氣海洋數據0.4PB、基礎地理數據和地面觀(guān)測數據0.2PB;地層和古生物數據庫有49萬(wàn)條數據記錄,360萬(wàn)種中國生物物種目錄,42萬(wàn)條微生物資源庫,10億組學(xué)數據目前在線(xiàn)?,F在,用戶(hù)可以在線(xiàn)檢索 40% 的數據。隨著(zhù)硬件條件的不斷提升,平臺數據將陸續上線(xiàn),每年更新3PB的數據量。
數據共享服務(wù)系統網(wǎng)址:
?。c(diǎn)擊圖片進(jìn)入網(wǎng)站)
在線(xiàn)問(wèn)卷調查工具 - Gold Data
這是一款在線(xiàn)表單工具,直接在瀏覽器中搜索即可找到,可以大大提高我們日常工作的效率。相信做新媒體運營(yíng)的小伙伴一定會(huì )遇到一些活動(dòng)報名、問(wèn)卷調查、反饋等問(wèn)題。讓我們談?wù)勛畛R?jiàn)的事件注冊案例之一。
網(wǎng)址:
?。c(diǎn)擊圖片進(jìn)入網(wǎng)站)
在線(xiàn)街道設計分享平臺-Streetmix
Streetmix 是一個(gè)免費的在線(xiàn)街道設計分享平臺,提供基本街道設計元素和拖放功能作為基本街道設計模板,允許用戶(hù)選擇道路寬度并添加或刪除所有街道元素,從輕軌到公路標志,并提供了多項調整功能來(lái)滿(mǎn)足用戶(hù)的需求,其扁平化的風(fēng)格也會(huì )讓人愛(ài)不釋手。
?。c(diǎn)擊圖片進(jìn)入網(wǎng)站)
日地圖
國家地理信息公共服務(wù)平臺“天圖”(以下簡(jiǎn)稱(chēng)“天圖”)是國家基礎地理信息中心建設的網(wǎng)絡(luò )化地理信息共享和服務(wù)門(mén)戶(hù)。信息部門(mén)以及相關(guān)政府部門(mén)、企事業(yè)單位、社會(huì )團體、公共地理信息公共服務(wù)資源,為各類(lèi)用戶(hù)提供權威、規范、統一的在線(xiàn)地理信息綜合服務(wù)。
網(wǎng)址:
?。c(diǎn)擊圖片進(jìn)入網(wǎng)站)
開(kāi)源地圖下載 - OpenStreetMap
開(kāi)源地圖——openstreetmap,簡(jiǎn)稱(chēng)OSM。它收錄的圖層包括公路、鐵路、水系、水域、建筑物、邊界、建筑物和其他圖層。我們不僅可以免費下載城市數據,還可以下載全球數據。
OSM提供四種主題地圖,分別對應標準地圖、自行車(chē)地圖、交通地圖和人道主義地圖,您可以根據需要選擇相應的主題地圖。
OSM主要提供四種下載方式:Simple、Overpass API、OSM Planet和Geofabrik下載。
?。c(diǎn)擊圖片進(jìn)入網(wǎng)站)
騰訊位置大數據
騰訊位置大數據官網(wǎng)包括區域人氣、位置流量、人口遷移、市政應急與決策、商鋪建設、個(gè)人出行、位置大數據應用等。
網(wǎng)址:
?。c(diǎn)擊圖片進(jìn)入網(wǎng)站)
百度地圖眼
百度地圖以海量時(shí)空大數據為基礎,結合人工智能技術(shù),為不同行業(yè)提供從宏觀(guān)到微觀(guān)的人、地、物的人口挖掘、客群分析、旅游研究、位置評估等研究。已深入應用于城市規劃、人口統計、政府、零售餐飲、廣告、文化旅游、高校智庫、公安應急等行業(yè)。
網(wǎng)址:
?。c(diǎn)擊圖片進(jìn)入網(wǎng)站)
快速獲取站點(diǎn)SU模型-CAD Mapper
這個(gè)網(wǎng)站可以在線(xiàn)生成站點(diǎn)模型,可下載的格式包括CAD、SU、RHINO。
?。c(diǎn)擊圖片進(jìn)入網(wǎng)站)
1949年與2019年的上海對比——歷史航拍
網(wǎng)站可以看到1949年到2019年、1979年到2019年的上海航拍圖對比。
網(wǎng)址:
?。c(diǎn)擊圖片進(jìn)入網(wǎng)站)
在線(xiàn)多媒體轉換工具 - CloudConvert
CloudConvert 是另一個(gè)強大的在線(xiàn)多媒體轉換工具。
支持215種文件的轉換,音頻、視頻、文檔、電子書(shū)、壓縮包、圖片、PPT、網(wǎng)頁(yè)等。反正就這么多,你自己查吧。
只需選擇本地文件(或指定網(wǎng)盤(pán)),然后選擇要轉換的文件,即可轉換。效率君實(shí)際測試了一下,速度很快。
它還有一個(gè)非常黑科技的功能。您可以選擇一個(gè)網(wǎng)盤(pán)來(lái)指定一個(gè)文件夾。添加新文件時(shí),它可以自動(dòng)轉換。沒(méi)有黑科技,真正解放了生產(chǎn)力。(但它似乎只適用于付費用戶(hù))
它還有一個(gè) Chrome 插件和一個(gè) iOS 應用程序。
網(wǎng)址:
?。c(diǎn)擊圖片進(jìn)入網(wǎng)站)
在線(xiàn)詞云生成器 - 微詞云
Mini Tag Cloud 是一個(gè)非常實(shí)用的應用程序。簡(jiǎn)單的在線(xiàn)詞云生成工具,無(wú)論你是設計師、操作員、學(xué)生還是數據分析師,都可以輕松制作出吸睛的詞云圖。
網(wǎng)址:
?。c(diǎn)擊圖片進(jìn)入網(wǎng)站)
網(wǎng)頁(yè)介紹:登錄,在首頁(yè)查看相冊?xún)热?br /> 或點(diǎn)擊網(wǎng)址直接進(jìn)入網(wǎng)頁(yè)相冊頁(yè)面
查看全部
抓取網(wǎng)頁(yè)生成電子書(shū)(國家數據國家統計數據庫全新改版,提供了哪些服務(wù)?
)
給大家推薦一些有趣又好用的網(wǎng)站。
如在線(xiàn)古籍圖書(shū)館、全國數據網(wǎng)站、地球大數據共享服務(wù)平臺、在線(xiàn)街道設計共享平臺-Streetmix、在線(xiàn)問(wèn)卷調查工具-Golden data、開(kāi)源地圖下載-OpenStreetMap、騰訊位置大數據、快速訪(fǎng)問(wèn)Site SU模型-CAD Mapper、上海1949年與2019年對比-歷史航拍圖、在線(xiàn)詞云生成工具-微詞云等。
標簽系統
規劃資源和工具相冊頁(yè)面
電子書(shū)搜索引擎 - Kumo Search
聚魔搜書(shū)是一個(gè)電子書(shū)搜索引擎,使用這個(gè)搜索引擎你可以找到各種格式的電子書(shū),包括mobi、epub、pdf、azw3等。
網(wǎng)址:
?。c(diǎn)擊圖片進(jìn)入網(wǎng)站)
網(wǎng)上古籍圖書(shū)館 - 書(shū)柜
Shuge() 是一個(gè)免費開(kāi)放的在線(xiàn)古籍圖書(shū)館。致力于開(kāi)放分享、介紹、推薦珍貴古籍、善本,鼓勵文化藝術(shù)作品數字化歸檔。分享內容僅限于公共版權領(lǐng)域的書(shū)籍(參考標準伯爾尼公約);最大限度地還原圖書(shū)的質(zhì)量和內容;這個(gè)計劃讓大家可以自由自在地享受那些來(lái)之不易的書(shū)籍。讓大家感受人類(lèi)文明的進(jìn)步。
BookGrid出版的書(shū)籍以PDF格式為主,帶有高清彩色圖片。大多數書(shū)籍的單頁(yè)寬度超過(guò)1400像素,雙頁(yè)寬度超過(guò)2400像素。宋元時(shí)期出版書(shū)籍,明清珍本至現代版。
網(wǎng)址:
?。c(diǎn)擊圖片進(jìn)入網(wǎng)站)
國家數據
新版國家統計數據庫提供以下服務(wù):
網(wǎng)址:
?。c(diǎn)擊圖片進(jìn)入網(wǎng)站)
地球大數據共享服務(wù)平臺
中科院發(fā)布的“地球大數據科學(xué)工程”A類(lèi)戰略性先導科技項目——地球大數據共享服務(wù)平臺2018年度成果。
地球大數據共享服務(wù)平臺是一個(gè)整合多領(lǐng)域海量數據,服務(wù)于數據驅動(dòng)的科學(xué)發(fā)現和決策支持的科學(xué)平臺。該平臺以共享的方式為全球用戶(hù)提供具有全球唯一標識的系統化、多樣化、動(dòng)態(tài)化、連續化、標準化的地球大數據。目前共享數據總量約5PB,包括地球觀(guān)測數據1.8PB、生物生態(tài)數據2.6PB、大氣海洋數據0.4PB、基礎地理數據和地面觀(guān)測數據0.2PB;地層和古生物數據庫有49萬(wàn)條數據記錄,360萬(wàn)種中國生物物種目錄,42萬(wàn)條微生物資源庫,10億組學(xué)數據目前在線(xiàn)?,F在,用戶(hù)可以在線(xiàn)檢索 40% 的數據。隨著(zhù)硬件條件的不斷提升,平臺數據將陸續上線(xiàn),每年更新3PB的數據量。
數據共享服務(wù)系統網(wǎng)址:
?。c(diǎn)擊圖片進(jìn)入網(wǎng)站)
在線(xiàn)問(wèn)卷調查工具 - Gold Data
這是一款在線(xiàn)表單工具,直接在瀏覽器中搜索即可找到,可以大大提高我們日常工作的效率。相信做新媒體運營(yíng)的小伙伴一定會(huì )遇到一些活動(dòng)報名、問(wèn)卷調查、反饋等問(wèn)題。讓我們談?wù)勛畛R?jiàn)的事件注冊案例之一。
網(wǎng)址:
?。c(diǎn)擊圖片進(jìn)入網(wǎng)站)
在線(xiàn)街道設計分享平臺-Streetmix
Streetmix 是一個(gè)免費的在線(xiàn)街道設計分享平臺,提供基本街道設計元素和拖放功能作為基本街道設計模板,允許用戶(hù)選擇道路寬度并添加或刪除所有街道元素,從輕軌到公路標志,并提供了多項調整功能來(lái)滿(mǎn)足用戶(hù)的需求,其扁平化的風(fēng)格也會(huì )讓人愛(ài)不釋手。
?。c(diǎn)擊圖片進(jìn)入網(wǎng)站)
日地圖
國家地理信息公共服務(wù)平臺“天圖”(以下簡(jiǎn)稱(chēng)“天圖”)是國家基礎地理信息中心建設的網(wǎng)絡(luò )化地理信息共享和服務(wù)門(mén)戶(hù)。信息部門(mén)以及相關(guān)政府部門(mén)、企事業(yè)單位、社會(huì )團體、公共地理信息公共服務(wù)資源,為各類(lèi)用戶(hù)提供權威、規范、統一的在線(xiàn)地理信息綜合服務(wù)。
網(wǎng)址:
?。c(diǎn)擊圖片進(jìn)入網(wǎng)站)
開(kāi)源地圖下載 - OpenStreetMap
開(kāi)源地圖——openstreetmap,簡(jiǎn)稱(chēng)OSM。它收錄的圖層包括公路、鐵路、水系、水域、建筑物、邊界、建筑物和其他圖層。我們不僅可以免費下載城市數據,還可以下載全球數據。
OSM提供四種主題地圖,分別對應標準地圖、自行車(chē)地圖、交通地圖和人道主義地圖,您可以根據需要選擇相應的主題地圖。
OSM主要提供四種下載方式:Simple、Overpass API、OSM Planet和Geofabrik下載。
?。c(diǎn)擊圖片進(jìn)入網(wǎng)站)
騰訊位置大數據
騰訊位置大數據官網(wǎng)包括區域人氣、位置流量、人口遷移、市政應急與決策、商鋪建設、個(gè)人出行、位置大數據應用等。
網(wǎng)址:
?。c(diǎn)擊圖片進(jìn)入網(wǎng)站)
百度地圖眼
百度地圖以海量時(shí)空大數據為基礎,結合人工智能技術(shù),為不同行業(yè)提供從宏觀(guān)到微觀(guān)的人、地、物的人口挖掘、客群分析、旅游研究、位置評估等研究。已深入應用于城市規劃、人口統計、政府、零售餐飲、廣告、文化旅游、高校智庫、公安應急等行業(yè)。
網(wǎng)址:
?。c(diǎn)擊圖片進(jìn)入網(wǎng)站)
快速獲取站點(diǎn)SU模型-CAD Mapper
這個(gè)網(wǎng)站可以在線(xiàn)生成站點(diǎn)模型,可下載的格式包括CAD、SU、RHINO。
?。c(diǎn)擊圖片進(jìn)入網(wǎng)站)
1949年與2019年的上海對比——歷史航拍
網(wǎng)站可以看到1949年到2019年、1979年到2019年的上海航拍圖對比。
網(wǎng)址:
?。c(diǎn)擊圖片進(jìn)入網(wǎng)站)
在線(xiàn)多媒體轉換工具 - CloudConvert
CloudConvert 是另一個(gè)強大的在線(xiàn)多媒體轉換工具。
支持215種文件的轉換,音頻、視頻、文檔、電子書(shū)、壓縮包、圖片、PPT、網(wǎng)頁(yè)等。反正就這么多,你自己查吧。
只需選擇本地文件(或指定網(wǎng)盤(pán)),然后選擇要轉換的文件,即可轉換。效率君實(shí)際測試了一下,速度很快。
它還有一個(gè)非常黑科技的功能。您可以選擇一個(gè)網(wǎng)盤(pán)來(lái)指定一個(gè)文件夾。添加新文件時(shí),它可以自動(dòng)轉換。沒(méi)有黑科技,真正解放了生產(chǎn)力。(但它似乎只適用于付費用戶(hù))
它還有一個(gè) Chrome 插件和一個(gè) iOS 應用程序。
網(wǎng)址:
?。c(diǎn)擊圖片進(jìn)入網(wǎng)站)
在線(xiàn)詞云生成器 - 微詞云
Mini Tag Cloud 是一個(gè)非常實(shí)用的應用程序。簡(jiǎn)單的在線(xiàn)詞云生成工具,無(wú)論你是設計師、操作員、學(xué)生還是數據分析師,都可以輕松制作出吸睛的詞云圖。
網(wǎng)址:
?。c(diǎn)擊圖片進(jìn)入網(wǎng)站)
網(wǎng)頁(yè)介紹:登錄,在首頁(yè)查看相冊?xún)热?br /> 或點(diǎn)擊網(wǎng)址直接進(jìn)入網(wǎng)頁(yè)相冊頁(yè)面
抓取網(wǎng)頁(yè)生成電子書(shū)(行行網(wǎng)電子書(shū)多線(xiàn)程爬取-擼代碼代碼非常簡(jiǎn)單(圖) )
網(wǎng)站優(yōu)化 ? 優(yōu)采云 發(fā)表了文章 ? 0 個(gè)評論 ? 79 次瀏覽 ? 2022-02-09 09:23
)
最近想找幾本電子書(shū)看,翻了翻,然后找到了一個(gè)叫周渡的網(wǎng)站,網(wǎng)站很好,簡(jiǎn)單清爽,有書(shū)很多,而且都是在百度上打開(kāi)的,網(wǎng)盤(pán)可以直接下載,更新速度也還行,就爬了上去。這篇文章可以文章學(xué)習,這么好的分享網(wǎng)站,盡量不要爬,會(huì )影響別人訪(fǎng)問(wèn)速度。需要數據的可以在我的博客下評論,我會(huì )發(fā)給你,QQ,郵箱什么的。
這個(gè)網(wǎng)站頁(yè)面的邏輯很簡(jiǎn)單。我翻閱了圖書(shū)詳情頁(yè)面,它看起來(lái)是這樣的。我們只需要循環(huán)生成這些頁(yè)面的鏈接,然后就可以爬取了。為了速度,我使用多線(xiàn)程。, 你可以試試看。如果想爬取后面的數據,就在本博客下方發(fā)表評論,不要亂搞別人的服務(wù)器。
http://www.ireadweek.com/index ... .html
http://www.ireadweek.com/index ... .html
....
星星網(wǎng)電子書(shū)多線(xiàn)程爬取-代碼
代碼非常簡(jiǎn)單。以我們之前的教程做鋪墊,用很少的代碼就可以實(shí)現完整的功能。最后將采集的內容寫(xiě)入csv文件,(什么是csv,百度知道)這段代碼是IO密集型操作,我們使用aiohttp模塊來(lái)編寫(xiě)。
步驟1
連接 URL 并啟動(dòng)線(xiàn)程。
import requests
# 導入協(xié)程模塊
import asyncio
import aiohttp
headers = {"User-Agent": "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/68.0.3440.106 Safari/537.36",
"Host": "www.ireadweek.com",
"Accept": "text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8"}
async def get_content(url):
print("正在操作:{}".format(url))
# 創(chuàng )建一個(gè)session 去獲取數據
async with aiohttp.ClientSession() as session:
async with session.get(url,headers=headers,timeout=3) as res:
if res.status == 200:
source = await res.text() # 等待獲取文本
print(source)
if __name__ == '__main__':
url_format = "http://www.ireadweek.com/index.php/bookInfo/{}.html"
full_urllist = [url_format.format(i) for i in range(1,11394)] # 11394
loop = asyncio.get_event_loop()
tasks = [get_content(url) for url in full_urllist]
results = loop.run_until_complete(asyncio.wait(tasks))
上面的代碼可以同步開(kāi)啟N個(gè)多線(xiàn)程,但是這樣很容易導致其他人的服務(wù)器癱瘓。因此,我們必須限制并發(fā)數。對于以下代碼,請嘗試將其放在指定位置。
第2步
為了處理捕獲的 Web 源代碼并提取我們想要的元素,我添加了一個(gè)使用 lxml 提取數據的方法。
def async_content(tree):
title = tree.xpath("//div[@class='hanghang-za-title']")[0].text
# 如果頁(yè)面沒(méi)有信息,直接返回即可
if title == '':
return
else:
try:
description = tree.xpath("//div[@class='hanghang-shu-content-font']")
author = description[0].xpath("p[1]/text()")[0].replace("作者:","") if description[0].xpath("p[1]/text()")[0] is not None else None
cate = description[0].xpath("p[2]/text()")[0].replace("分類(lèi):","") if description[0].xpath("p[2]/text()")[0] is not None else None
douban = description[0].xpath("p[3]/text()")[0].replace("豆瓣評分:","") if description[0].xpath("p[3]/text()")[0] is not None else None
# 這部分內容不明確,不做記錄
#des = description[0].xpath("p[5]/text()")[0] if description[0].xpath("p[5]/text()")[0] is not None else None
download = tree.xpath("//a[@class='downloads']")
except Exception as e:
print(title)
return
ls = [
title,author,cate,douban,download[0].get('href')
]
return ls
第 3 步
數據格式化后,將其保存為 csv 文件,然后收工!
print(data)
with open('hang.csv', 'a+', encoding='utf-8') as fw:
writer = csv.writer(fw)
writer.writerow(data)
print("插入成功!")
Python資源分享qun 784758214 ,內有安裝包,PDF,學(xué)習視頻,這里是Python學(xué)習者的聚集地,零基礎,進(jìn)階,都歡迎
星星網(wǎng)電子書(shū)多線(xiàn)程爬取——運行代碼并查看結果
查看全部
抓取網(wǎng)頁(yè)生成電子書(shū)(行行網(wǎng)電子書(shū)多線(xiàn)程爬取-擼代碼代碼非常簡(jiǎn)單(圖)
)
最近想找幾本電子書(shū)看,翻了翻,然后找到了一個(gè)叫周渡的網(wǎng)站,網(wǎng)站很好,簡(jiǎn)單清爽,有書(shū)很多,而且都是在百度上打開(kāi)的,網(wǎng)盤(pán)可以直接下載,更新速度也還行,就爬了上去。這篇文章可以文章學(xué)習,這么好的分享網(wǎng)站,盡量不要爬,會(huì )影響別人訪(fǎng)問(wèn)速度。需要數據的可以在我的博客下評論,我會(huì )發(fā)給你,QQ,郵箱什么的。
這個(gè)網(wǎng)站頁(yè)面的邏輯很簡(jiǎn)單。我翻閱了圖書(shū)詳情頁(yè)面,它看起來(lái)是這樣的。我們只需要循環(huán)生成這些頁(yè)面的鏈接,然后就可以爬取了。為了速度,我使用多線(xiàn)程。, 你可以試試看。如果想爬取后面的數據,就在本博客下方發(fā)表評論,不要亂搞別人的服務(wù)器。
http://www.ireadweek.com/index ... .html
http://www.ireadweek.com/index ... .html
....
星星網(wǎng)電子書(shū)多線(xiàn)程爬取-代碼
代碼非常簡(jiǎn)單。以我們之前的教程做鋪墊,用很少的代碼就可以實(shí)現完整的功能。最后將采集的內容寫(xiě)入csv文件,(什么是csv,百度知道)這段代碼是IO密集型操作,我們使用aiohttp模塊來(lái)編寫(xiě)。
步驟1
連接 URL 并啟動(dòng)線(xiàn)程。
import requests
# 導入協(xié)程模塊
import asyncio
import aiohttp
headers = {"User-Agent": "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/68.0.3440.106 Safari/537.36",
"Host": "www.ireadweek.com",
"Accept": "text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8"}
async def get_content(url):
print("正在操作:{}".format(url))
# 創(chuàng )建一個(gè)session 去獲取數據
async with aiohttp.ClientSession() as session:
async with session.get(url,headers=headers,timeout=3) as res:
if res.status == 200:
source = await res.text() # 等待獲取文本
print(source)
if __name__ == '__main__':
url_format = "http://www.ireadweek.com/index.php/bookInfo/{}.html"
full_urllist = [url_format.format(i) for i in range(1,11394)] # 11394
loop = asyncio.get_event_loop()
tasks = [get_content(url) for url in full_urllist]
results = loop.run_until_complete(asyncio.wait(tasks))
上面的代碼可以同步開(kāi)啟N個(gè)多線(xiàn)程,但是這樣很容易導致其他人的服務(wù)器癱瘓。因此,我們必須限制并發(fā)數。對于以下代碼,請嘗試將其放在指定位置。
第2步
為了處理捕獲的 Web 源代碼并提取我們想要的元素,我添加了一個(gè)使用 lxml 提取數據的方法。
def async_content(tree):
title = tree.xpath("//div[@class='hanghang-za-title']")[0].text
# 如果頁(yè)面沒(méi)有信息,直接返回即可
if title == '':
return
else:
try:
description = tree.xpath("//div[@class='hanghang-shu-content-font']")
author = description[0].xpath("p[1]/text()")[0].replace("作者:","") if description[0].xpath("p[1]/text()")[0] is not None else None
cate = description[0].xpath("p[2]/text()")[0].replace("分類(lèi):","") if description[0].xpath("p[2]/text()")[0] is not None else None
douban = description[0].xpath("p[3]/text()")[0].replace("豆瓣評分:","") if description[0].xpath("p[3]/text()")[0] is not None else None
# 這部分內容不明確,不做記錄
#des = description[0].xpath("p[5]/text()")[0] if description[0].xpath("p[5]/text()")[0] is not None else None
download = tree.xpath("//a[@class='downloads']")
except Exception as e:
print(title)
return
ls = [
title,author,cate,douban,download[0].get('href')
]
return ls
第 3 步
數據格式化后,將其保存為 csv 文件,然后收工!
print(data)
with open('hang.csv', 'a+', encoding='utf-8') as fw:
writer = csv.writer(fw)
writer.writerow(data)
print("插入成功!")
Python資源分享qun 784758214 ,內有安裝包,PDF,學(xué)習視頻,這里是Python學(xué)習者的聚集地,零基礎,進(jìn)階,都歡迎
星星網(wǎng)電子書(shū)多線(xiàn)程爬取——運行代碼并查看結果
抓取網(wǎng)頁(yè)生成電子書(shū)(《網(wǎng)絡(luò )書(shū)籍抓取器》軟件特色特色介紹-上海怡健醫學(xué) )
網(wǎng)站優(yōu)化 ? 優(yōu)采云 發(fā)表了文章 ? 0 個(gè)評論 ? 126 次瀏覽 ? 2022-02-07 03:04
)
網(wǎng)絡(luò )圖書(shū)抓取器主要用于抓取網(wǎng)絡(luò )小說(shuō)生成文本文件。它可以提取指定小說(shuō)目錄頁(yè)面的章節信息并進(jìn)行調整,然后按照章節順序抓取小說(shuō)內容,然后將它們合并在一起。爬取過(guò)程可以隨時(shí)中斷,關(guān)閉程序后可以恢復上一個(gè)任務(wù)。
網(wǎng)絡(luò )圖書(shū)抓取軟件的特點(diǎn)
1、章節調整:提取目錄后,可以進(jìn)行移動(dòng)、刪除、反轉等調整操作。調整將直接影響調整后的章節順序中的最終書(shū)籍和輸出。
2、自動(dòng)重試:爬取過(guò)程中,可能由于網(wǎng)絡(luò )因素導致爬取失敗。這個(gè)程序可能會(huì )自動(dòng)重試直到成功,或者暫時(shí)中斷爬?。ㄖ袛嗪箨P(guān)閉程序不會(huì )影響進(jìn)度),等網(wǎng)絡(luò )好了再試。
3、停止和恢復:捕捉過(guò)程可以隨時(shí)停止,退出程序后不影響進(jìn)度(章節信息會(huì )保存在記錄中,程序結束后可以恢復捕捉下次運行。注意:需要先用停止鍵中斷,然后退出程序,如果直接退出,將無(wú)法恢復)。
4、一鍵抓?。河址Q(chēng)“傻瓜模式”,基本可以實(shí)現全自動(dòng)抓取合并功能,直接輸出最終的文本文件。前面可能需要輸入最基本的URL、save bit等信息(會(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ū):可以在設置文件中添加每章名稱(chēng)的前綴和后綴,為后期制作電子書(shū)的編目帶來(lái)極大的方便。
查看全部
抓取網(wǎng)頁(yè)生成電子書(shū)(《網(wǎng)絡(luò )書(shū)籍抓取器》軟件特色特色介紹-上海怡健醫學(xué)
)
網(wǎng)絡(luò )圖書(shū)抓取器主要用于抓取網(wǎng)絡(luò )小說(shuō)生成文本文件。它可以提取指定小說(shuō)目錄頁(yè)面的章節信息并進(jìn)行調整,然后按照章節順序抓取小說(shuō)內容,然后將它們合并在一起。爬取過(guò)程可以隨時(shí)中斷,關(guān)閉程序后可以恢復上一個(gè)任務(wù)。

網(wǎng)絡(luò )圖書(shū)抓取軟件的特點(diǎn)
1、章節調整:提取目錄后,可以進(jìn)行移動(dòng)、刪除、反轉等調整操作。調整將直接影響調整后的章節順序中的最終書(shū)籍和輸出。
2、自動(dòng)重試:爬取過(guò)程中,可能由于網(wǎng)絡(luò )因素導致爬取失敗。這個(gè)程序可能會(huì )自動(dòng)重試直到成功,或者暫時(shí)中斷爬?。ㄖ袛嗪箨P(guān)閉程序不會(huì )影響進(jìn)度),等網(wǎng)絡(luò )好了再試。
3、停止和恢復:捕捉過(guò)程可以隨時(shí)停止,退出程序后不影響進(jìn)度(章節信息會(huì )保存在記錄中,程序結束后可以恢復捕捉下次運行。注意:需要先用停止鍵中斷,然后退出程序,如果直接退出,將無(wú)法恢復)。
4、一鍵抓?。河址Q(chēng)“傻瓜模式”,基本可以實(shí)現全自動(dòng)抓取合并功能,直接輸出最終的文本文件。前面可能需要輸入最基本的URL、save bit等信息(會(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ū):可以在設置文件中添加每章名稱(chēng)的前綴和后綴,為后期制作電子書(shū)的編目帶來(lái)極大的方便。
抓取網(wǎng)頁(yè)生成電子書(shū)(《修真小主播》使用Scrapy抓取電子書(shū)爬蟲(chóng)思路怎么抓取數據 )
網(wǎng)站優(yōu)化 ? 優(yōu)采云 發(fā)表了文章 ? 0 個(gè)評論 ? 144 次瀏覽 ? 2022-02-05 17:04
)
使用 Scrapy 抓取電子書(shū)
爬行動(dòng)物的想法
如何抓取數據,首先我們需要看看從哪里獲取數據,打開(kāi)“小耕主播”的頁(yè)面,如下:
有一個(gè)目錄選項卡,單擊此選項卡可以查看目錄。使用瀏覽器的元素查看工具,我們可以找到每章的目錄和相關(guān)信息。根據這些信息,我們可以爬取到特定頁(yè)面:
獲取章節地址
現在我們打開(kāi) xzxzb.py 文件,也就是我們剛剛創(chuàng )建的爬蟲(chóng):
# -*- coding: utf-8 -*-
import scrapy
'''
更多Python學(xué)習資料以及源碼教程資料,可以在群1136201545免費獲取
'''
class 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在讓我們編寫(xiě)處理目錄數據的代碼,首先爬取小說(shuō)首頁(yè)獲取目錄列表:
def parse(self, response):
pages = response.xpath('//div[@id="j-catalogWrap"]//ul[@class="cf"]/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)知識請自行學(xué)習,看上面代碼,首先我們通過(guò)ID獲取目錄框,獲取類(lèi)cf獲取目錄列表:
pages = response.xpath('//div[@id="j-catalogWrap"]//ul[@class="cf"]/li')
接下來(lái)遍歷子節點(diǎn),查詢(xún)li標簽中a子節點(diǎn)的href屬性,最后打印出來(lái):
for page in pages:
url = page.xpath('./child::a/attribute::href').extract()
print url
這樣,可以說(shuō)爬取章節路徑的小爬蟲(chóng)已經(jīng)寫(xiě)好了。使用以下命令運行xzxzb爬蟲(chóng)查看結果:
scrapy crawl xzxzb
這時(shí)候我們的程序可能會(huì )出現如下錯誤:
…
ImportError: No module named win32api
…
只需運行以下語(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ě)了,但是我們的目的不僅如此,我們會(huì )使用這些地址來(lái)爬取內容:
章節頁(yè)面分析
接下來(lái)我們分析章節頁(yè)面,我們要從中獲取標題和內容。
如果說(shuō)用于章節信息爬取的parser方法,那么我們可以寫(xiě)一個(gè)爬取每個(gè)章節內容的方法,比如:parser_chapter,先看章節頁(yè)面的具體情況:
可以看到,章節的全部?jì)热菰陬?lèi)名main-text-wrap的div標簽中,標題是類(lèi)名j_chapterName的h3標簽,具體內容是類(lèi)名的div標簽讀取內容 j_readContent。
嘗試打印出來(lái):
# -*- coding: utf-8 -*-
import scrapy
class 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[@class="cf"]/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[@class="main-text-wrap"]//h3[@class="j_chapterName"]/text()').extract_first().strip()
content = response.xpath('//div[@class="main-text-wrap"]//div[@class="read-content j_readContent"]').extract_first().strip()
print title
# print content
pass
上一步我們得到了一個(gè)章節地址,這是從輸出內容的相對路徑,所以我們使用了yield response.follow(url, callback=self.parse_chapter),第二個(gè)參數是一個(gè)回調函數來(lái)處理章節頁(yè)面,爬取到章節頁(yè)面后,我們解析頁(yè)面并將標題保存到文件中。
next_page = response.urljoin(url)
yield scrapy.Request(next_page, callback=self.parse_chapter)
與使用 response.follow 不同,scrapy.Request 需要通過(guò)相對路徑來(lái)構造絕對路徑。Response.follow 可以直接使用相對路徑,所以不需要調用 urljoin 方法。
注意response.follow直接返回一個(gè)Request實(shí)例,可以直接通過(guò)yield返回。
獲取數據后,將其存儲。由于我們想要一個(gè) html 頁(yè)面,我們可以按標題存儲它。代碼如下:
def parse_chapter(self, response):
title = response.xpath('//div[@class="main-text-wrap"]//h3[@class="j_chapterName"]/text()').extract_first().strip()
content = response.xpath('//div[@class="main-text-wrap"]//div[@class="read-content j_readContent"]').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)化。
數據管理
首先,我們爬取的章節頁(yè)面的排序不是很好,手動(dòng)排列太費時(shí)間精力;另外,章節內容收錄很多多余的東西,閱讀體驗不好,需要優(yōu)化內容的排版和可讀性。
我們先對章節進(jìn)行排序,因為目錄中的章節列表是按順序排列的,所以只需在下載頁(yè)面名稱(chēng)中加上序號即可。
但是保存網(wǎng)頁(yè)的代碼是一個(gè)回調函數,只有在處理目錄時(shí)才能確定順序?;卣{函數怎么知道順序?因此,我們需要告訴回調函數它處理章節的序號,并且我們需要向回調函數傳遞參數。修改后的代碼如下:
'''
更多Python學(xué)習資料以及源碼教程資料,可以在群1136201545免費獲取
'''
def parse(self, response):
pages = response.xpath('//div[@id="j-catalogWrap"]//ul[@class="cf"]/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[@class="main-text-wrap"]//h3[@class="j_chapterName"]/text()').extract_first().strip()
content = response.xpath('//div[@class="main-text-wrap"]//div[@class="read-content j_readContent"]').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 創(chuàng )建電子書(shū)
加載html文件
要制作 ePub 電子書(shū),我們首先通過(guò) Sigil 將抓取的文件加載到程序中,然后在“添加文件”對話(huà)框中選擇所有文件:
制作目錄
當文件中存在 HTML h 標簽時(shí),單擊 Generate Directory 按鈕自動(dòng)生成目錄。我們在之前的數據捕獲中自動(dòng)添加了 h1 標簽:
做一個(gè)封面
封面本質(zhì)上是HTML,可以編輯或者從頁(yè)面爬取,所以我留給你自己實(shí)現。
查看全部
抓取網(wǎng)頁(yè)生成電子書(shū)(《修真小主播》使用Scrapy抓取電子書(shū)爬蟲(chóng)思路怎么抓取數據
)
使用 Scrapy 抓取電子書(shū)
爬行動(dòng)物的想法
如何抓取數據,首先我們需要看看從哪里獲取數據,打開(kāi)“小耕主播”的頁(yè)面,如下:

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

獲取章節地址
現在我們打開(kāi) xzxzb.py 文件,也就是我們剛剛創(chuàng )建的爬蟲(chóng):
# -*- coding: utf-8 -*-
import scrapy
'''
更多Python學(xué)習資料以及源碼教程資料,可以在群1136201545免費獲取
'''
class 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在讓我們編寫(xiě)處理目錄數據的代碼,首先爬取小說(shuō)首頁(yè)獲取目錄列表:
def parse(self, response):
pages = response.xpath('//div[@id="j-catalogWrap"]//ul[@class="cf"]/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)知識請自行學(xué)習,看上面代碼,首先我們通過(guò)ID獲取目錄框,獲取類(lèi)cf獲取目錄列表:
pages = response.xpath('//div[@id="j-catalogWrap"]//ul[@class="cf"]/li')
接下來(lái)遍歷子節點(diǎn),查詢(xún)li標簽中a子節點(diǎn)的href屬性,最后打印出來(lái):
for page in pages:
url = page.xpath('./child::a/attribute::href').extract()
print url
這樣,可以說(shuō)爬取章節路徑的小爬蟲(chóng)已經(jīng)寫(xiě)好了。使用以下命令運行xzxzb爬蟲(chóng)查看結果:
scrapy crawl xzxzb
這時(shí)候我們的程序可能會(huì )出現如下錯誤:
…
ImportError: No module named win32api
…
只需運行以下語(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ě)了,但是我們的目的不僅如此,我們會(huì )使用這些地址來(lái)爬取內容:
章節頁(yè)面分析
接下來(lái)我們分析章節頁(yè)面,我們要從中獲取標題和內容。
如果說(shuō)用于章節信息爬取的parser方法,那么我們可以寫(xiě)一個(gè)爬取每個(gè)章節內容的方法,比如:parser_chapter,先看章節頁(yè)面的具體情況:

可以看到,章節的全部?jì)热菰陬?lèi)名main-text-wrap的div標簽中,標題是類(lèi)名j_chapterName的h3標簽,具體內容是類(lèi)名的div標簽讀取內容 j_readContent。
嘗試打印出來(lái):
# -*- coding: utf-8 -*-
import scrapy
class 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[@class="cf"]/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[@class="main-text-wrap"]//h3[@class="j_chapterName"]/text()').extract_first().strip()
content = response.xpath('//div[@class="main-text-wrap"]//div[@class="read-content j_readContent"]').extract_first().strip()
print title
# print content
pass
上一步我們得到了一個(gè)章節地址,這是從輸出內容的相對路徑,所以我們使用了yield response.follow(url, callback=self.parse_chapter),第二個(gè)參數是一個(gè)回調函數來(lái)處理章節頁(yè)面,爬取到章節頁(yè)面后,我們解析頁(yè)面并將標題保存到文件中。
next_page = response.urljoin(url)
yield scrapy.Request(next_page, callback=self.parse_chapter)
與使用 response.follow 不同,scrapy.Request 需要通過(guò)相對路徑來(lái)構造絕對路徑。Response.follow 可以直接使用相對路徑,所以不需要調用 urljoin 方法。
注意response.follow直接返回一個(gè)Request實(shí)例,可以直接通過(guò)yield返回。
獲取數據后,將其存儲。由于我們想要一個(gè) html 頁(yè)面,我們可以按標題存儲它。代碼如下:
def parse_chapter(self, response):
title = response.xpath('//div[@class="main-text-wrap"]//h3[@class="j_chapterName"]/text()').extract_first().strip()
content = response.xpath('//div[@class="main-text-wrap"]//div[@class="read-content j_readContent"]').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)化。
數據管理
首先,我們爬取的章節頁(yè)面的排序不是很好,手動(dòng)排列太費時(shí)間精力;另外,章節內容收錄很多多余的東西,閱讀體驗不好,需要優(yōu)化內容的排版和可讀性。
我們先對章節進(jìn)行排序,因為目錄中的章節列表是按順序排列的,所以只需在下載頁(yè)面名稱(chēng)中加上序號即可。
但是保存網(wǎng)頁(yè)的代碼是一個(gè)回調函數,只有在處理目錄時(shí)才能確定順序?;卣{函數怎么知道順序?因此,我們需要告訴回調函數它處理章節的序號,并且我們需要向回調函數傳遞參數。修改后的代碼如下:
'''
更多Python學(xué)習資料以及源碼教程資料,可以在群1136201545免費獲取
'''
def parse(self, response):
pages = response.xpath('//div[@id="j-catalogWrap"]//ul[@class="cf"]/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[@class="main-text-wrap"]//h3[@class="j_chapterName"]/text()').extract_first().strip()
content = response.xpath('//div[@class="main-text-wrap"]//div[@class="read-content j_readContent"]').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 創(chuàng )建電子書(shū)
加載html文件
要制作 ePub 電子書(shū),我們首先通過(guò) Sigil 將抓取的文件加載到程序中,然后在“添加文件”對話(huà)框中選擇所有文件:

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

做一個(gè)封面

封面本質(zhì)上是HTML,可以編輯或者從頁(yè)面爬取,所以我留給你自己實(shí)現。
抓取網(wǎng)頁(yè)生成電子書(shū)(Requests-html快速指南發(fā)送一個(gè)GET請求:html的方便!)
網(wǎng)站優(yōu)化 ? 優(yōu)采云 發(fā)表了文章 ? 0 個(gè)評論 ? 107 次瀏覽 ? 2022-02-05 17:04
安裝
安裝很簡(jiǎn)單,只需執行:
pip install requests-html
而已。
分析頁(yè)面結構
通過(guò)在瀏覽器中查看元素,可以發(fā)現這本電子書(shū)網(wǎng)站是用WordPress搭建的,首頁(yè)列表元素非常簡(jiǎn)潔利落。
所以我們可以通過(guò)查找 .entry-title > a 得到所有圖書(shū)詳情頁(yè)的鏈接,然后我們到詳情頁(yè)找到下載鏈接,如下圖
可以發(fā)現.download-links > a中的鏈接就是該書(shū)的下載鏈接?;氐搅斜眄?yè)面,可以發(fā)現站點(diǎn)有700多個(gè)頁(yè)面,所以我們可以循環(huán)列表獲取所有的下載鏈接。
Requests-html 快速指南
發(fā)送 GET 請求:
from requests_html import HTMLSession
session = HTMLSession()
r = session.get('https://python.org/')
Requests-html 的方便之處在于它解析 html 就像使用 jQuery 一樣容易,例如:
# 獲取頁(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))
運行結果:
以上就是我用Python抓到的7000多本電子書(shū)的詳細講解和整合。我希望它對你有幫助。如有任何問(wèn)題,請給我留言,小編會(huì )及時(shí)回復您。還要感謝大家對腳本之家網(wǎng)站的支持! 查看全部
抓取網(wǎng)頁(yè)生成電子書(shū)(Requests-html快速指南發(fā)送一個(gè)GET請求:html的方便!)
安裝
安裝很簡(jiǎn)單,只需執行:
pip install requests-html
而已。
分析頁(yè)面結構
通過(guò)在瀏覽器中查看元素,可以發(fā)現這本電子書(shū)網(wǎng)站是用WordPress搭建的,首頁(yè)列表元素非常簡(jiǎn)潔利落。
所以我們可以通過(guò)查找 .entry-title > a 得到所有圖書(shū)詳情頁(yè)的鏈接,然后我們到詳情頁(yè)找到下載鏈接,如下圖
可以發(fā)現.download-links > a中的鏈接就是該書(shū)的下載鏈接?;氐搅斜眄?yè)面,可以發(fā)現站點(diǎn)有700多個(gè)頁(yè)面,所以我們可以循環(huán)列表獲取所有的下載鏈接。
Requests-html 快速指南
發(fā)送 GET 請求:
from requests_html import HTMLSession
session = HTMLSession()
r = session.get('https://python.org/')
Requests-html 的方便之處在于它解析 html 就像使用 jQuery 一樣容易,例如:
# 獲取頁(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))
運行結果:
以上就是我用Python抓到的7000多本電子書(shū)的詳細講解和整合。我希望它對你有幫助。如有任何問(wèn)題,請給我留言,小編會(huì )及時(shí)回復您。還要感謝大家對腳本之家網(wǎng)站的支持!
抓取網(wǎng)頁(yè)生成電子書(shū)(主流電子書(shū)格式大家最為熟知的電子書(shū)熟知格式(圖))
網(wǎng)站優(yōu)化 ? 優(yōu)采云 發(fā)表了文章 ? 0 個(gè)評論 ? 120 次瀏覽 ? 2022-02-05 17:03
編者注(@Minja):在編寫(xiě)文章時(shí),經(jīng)常需要引用和回溯。對各種存檔和剪輯工具的不滿(mǎn),讓我萌生了自己制作電子書(shū)的念頭。正好@Spencerwoo在這方面有扎實(shí)的折騰能力,于是擺脫了他,研究了一套簡(jiǎn)單易行的方法,寫(xiě)成文章分享給大家。
雖然網(wǎng)絡(luò )世界有很多有價(jià)值的文章,但并不是每一次閱讀體驗都令人滿(mǎn)意。如果你想擁有出色的文章閱讀體驗,至少要確保我們正在閱讀文章:
很多時(shí)候,我們依靠瀏覽器的閱讀方式,或者Pocket和RSS客戶(hù)端來(lái)閱讀。但是,閱讀模式后期無(wú)法整理,而且大部分閱讀服務(wù)的全文搜索功能都需要付費,網(wǎng)上的文章可能一天都找不到?;蛟S,將 文章 保存為本地電子書(shū)是一種更方便的回顧選擇。
如果我們在網(wǎng)上看到一個(gè)網(wǎng)頁(yè)形式的電子書(shū),想直接把整個(gè)網(wǎng)頁(yè)保存到本地(俗稱(chēng)“剪輯”),那簡(jiǎn)直是麻煩大了?,F有的網(wǎng)頁(yè)剪輯工具不僅會(huì )攜帶無(wú)用的、影響體驗的廣告和其他冗余區域,還會(huì )丟失重要和有價(jià)值的內容。不僅如此,幾乎沒(méi)有工具可以輕松抓取圖片并自定義保存到本地的文章樣式。那么,讓我向您介紹一組免費制作個(gè)性化電子書(shū)的方法。
本文主要使用開(kāi)源工具 Pandoc。對于需要MOBI或PDF格式電子書(shū)的讀者,文章后半部分也有簡(jiǎn)單的轉換方法。
ePub 電子書(shū)的突破
目前主流的電子書(shū)格式有很多,但本文主要推薦ePub,它比較開(kāi)放統一,可以很方便的轉換成其他格式。
主流電子書(shū)格式
最廣為人知的電子書(shū)格式可能是純文本TXT格式,但TXT之所以被稱(chēng)為“純文本”,是因為它不支持章節、圖片、封面和超鏈接。為了讓電子書(shū)有格式、有圖片、有內容,目前常見(jiàn)的電子書(shū)通常有PDF、ePub、MOBI三種格式。在:
我們文章文章的主要目的是利用接下來(lái)要介紹的工具,制作一個(gè)內嵌圖片、目錄、外觀(guān)清晰美觀(guān)的電子書(shū)。相對而言,ePub 更加靈活,有完整的目錄和自定義布局,也很容易轉換成其他兩種格式。本文從它開(kāi)始。
制作的電子書(shū)效果
[…] 查看全部
抓取網(wǎng)頁(yè)生成電子書(shū)(主流電子書(shū)格式大家最為熟知的電子書(shū)熟知格式(圖))
編者注(@Minja):在編寫(xiě)文章時(shí),經(jīng)常需要引用和回溯。對各種存檔和剪輯工具的不滿(mǎn),讓我萌生了自己制作電子書(shū)的念頭。正好@Spencerwoo在這方面有扎實(shí)的折騰能力,于是擺脫了他,研究了一套簡(jiǎn)單易行的方法,寫(xiě)成文章分享給大家。
雖然網(wǎng)絡(luò )世界有很多有價(jià)值的文章,但并不是每一次閱讀體驗都令人滿(mǎn)意。如果你想擁有出色的文章閱讀體驗,至少要確保我們正在閱讀文章:
很多時(shí)候,我們依靠瀏覽器的閱讀方式,或者Pocket和RSS客戶(hù)端來(lái)閱讀。但是,閱讀模式后期無(wú)法整理,而且大部分閱讀服務(wù)的全文搜索功能都需要付費,網(wǎng)上的文章可能一天都找不到?;蛟S,將 文章 保存為本地電子書(shū)是一種更方便的回顧選擇。
如果我們在網(wǎng)上看到一個(gè)網(wǎng)頁(yè)形式的電子書(shū),想直接把整個(gè)網(wǎng)頁(yè)保存到本地(俗稱(chēng)“剪輯”),那簡(jiǎn)直是麻煩大了?,F有的網(wǎng)頁(yè)剪輯工具不僅會(huì )攜帶無(wú)用的、影響體驗的廣告和其他冗余區域,還會(huì )丟失重要和有價(jià)值的內容。不僅如此,幾乎沒(méi)有工具可以輕松抓取圖片并自定義保存到本地的文章樣式。那么,讓我向您介紹一組免費制作個(gè)性化電子書(shū)的方法。
本文主要使用開(kāi)源工具 Pandoc。對于需要MOBI或PDF格式電子書(shū)的讀者,文章后半部分也有簡(jiǎn)單的轉換方法。
ePub 電子書(shū)的突破
目前主流的電子書(shū)格式有很多,但本文主要推薦ePub,它比較開(kāi)放統一,可以很方便的轉換成其他格式。

主流電子書(shū)格式
最廣為人知的電子書(shū)格式可能是純文本TXT格式,但TXT之所以被稱(chēng)為“純文本”,是因為它不支持章節、圖片、封面和超鏈接。為了讓電子書(shū)有格式、有圖片、有內容,目前常見(jiàn)的電子書(shū)通常有PDF、ePub、MOBI三種格式。在:
我們文章文章的主要目的是利用接下來(lái)要介紹的工具,制作一個(gè)內嵌圖片、目錄、外觀(guān)清晰美觀(guān)的電子書(shū)。相對而言,ePub 更加靈活,有完整的目錄和自定義布局,也很容易轉換成其他兩種格式。本文從它開(kāi)始。

制作的電子書(shū)效果
[…]
抓取網(wǎng)頁(yè)生成電子書(shū)(網(wǎng)絡(luò )書(shū)籍抓取器是一款幫助用戶(hù)下載指定網(wǎng)頁(yè)的某)
網(wǎng)站優(yōu)化 ? 優(yōu)采云 發(fā)表了文章 ? 0 個(gè)評論 ? 196 次瀏覽 ? 2022-02-05 03:22
在線(xiàn)圖書(shū)抓取器是一款可以幫助用戶(hù)下載指定網(wǎng)頁(yè)的某本書(shū)和某章的軟件。通過(guò)在線(xiàn)圖書(shū)抓取器,可以快速下載小說(shuō)。同時(shí)軟件支持斷點(diǎn)續傳功能,非常方便??梢韵螺d使用。
網(wǎng)絡(luò )圖書(shū)采集器功能介紹
可以提取指定小說(shuō)目錄頁(yè)面的章節信息并進(jìn)行調整,然后按照章節順序抓取小說(shuō)內容,在最合適的時(shí)候進(jìn)行合并。爬取過(guò)程可以隨時(shí)中斷,關(guān)閉程序后可以恢復上一個(gè)任務(wù)。
網(wǎng)絡(luò )圖書(shū)抓取軟件的特點(diǎn)
1、章節調整:提取目錄后,可以進(jìn)行移動(dòng)、刪除、反轉等調整操作。調整將直接影響調整后的章節順序中的最終書(shū)籍和輸出。
2、自動(dòng)重試:爬取過(guò)程中,可能由于網(wǎng)絡(luò )因素導致爬取失敗。這個(gè)程序可能會(huì )自動(dòng)重試直到成功,或者暫時(shí)中斷爬?。ㄖ袛嗪箨P(guān)閉程序不會(huì )影響進(jìn)度),等網(wǎng)絡(luò )好了再試。
3、停止和恢復:可以隨時(shí)停止捕捉過(guò)程,退出程序后不影響進(jìn)度(章節信息會(huì )保存在記錄中,程序結束后可以恢復捕捉下次運行。注意:需要先用停止鍵中斷,然后退出程序,如果直接退出,將無(wú)法恢復)。
4、一鍵抓?。河址Q(chēng)“傻瓜模式”,基本可以實(shí)現全自動(dòng)抓取合并功能,直接輸出最終的文本文件。前面可能需要輸入最基本的URL、save bit等信息(會(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ū):可以在設置文件中添加每章名稱(chēng)的前綴和后綴,為后期制作電子書(shū)的編目帶來(lái)極大的方便。
如何使用在線(xiàn)圖書(shū)抓取器
一、首先進(jìn)入你要下載的小說(shuō)的網(wǎng)頁(yè)。
二、輸入書(shū)名,點(diǎn)擊目錄提取。
三、設置保存路徑,點(diǎn)擊Start Grab開(kāi)始下載。 查看全部
抓取網(wǎng)頁(yè)生成電子書(shū)(網(wǎng)絡(luò )書(shū)籍抓取器是一款幫助用戶(hù)下載指定網(wǎng)頁(yè)的某)
在線(xiàn)圖書(shū)抓取器是一款可以幫助用戶(hù)下載指定網(wǎng)頁(yè)的某本書(shū)和某章的軟件。通過(guò)在線(xiàn)圖書(shū)抓取器,可以快速下載小說(shuō)。同時(shí)軟件支持斷點(diǎn)續傳功能,非常方便??梢韵螺d使用。

網(wǎng)絡(luò )圖書(shū)采集器功能介紹
可以提取指定小說(shuō)目錄頁(yè)面的章節信息并進(jìn)行調整,然后按照章節順序抓取小說(shuō)內容,在最合適的時(shí)候進(jìn)行合并。爬取過(guò)程可以隨時(shí)中斷,關(guān)閉程序后可以恢復上一個(gè)任務(wù)。
網(wǎng)絡(luò )圖書(shū)抓取軟件的特點(diǎn)
1、章節調整:提取目錄后,可以進(jìn)行移動(dòng)、刪除、反轉等調整操作。調整將直接影響調整后的章節順序中的最終書(shū)籍和輸出。
2、自動(dòng)重試:爬取過(guò)程中,可能由于網(wǎng)絡(luò )因素導致爬取失敗。這個(gè)程序可能會(huì )自動(dòng)重試直到成功,或者暫時(shí)中斷爬?。ㄖ袛嗪箨P(guān)閉程序不會(huì )影響進(jìn)度),等網(wǎng)絡(luò )好了再試。
3、停止和恢復:可以隨時(shí)停止捕捉過(guò)程,退出程序后不影響進(jìn)度(章節信息會(huì )保存在記錄中,程序結束后可以恢復捕捉下次運行。注意:需要先用停止鍵中斷,然后退出程序,如果直接退出,將無(wú)法恢復)。
4、一鍵抓?。河址Q(chēng)“傻瓜模式”,基本可以實(shí)現全自動(dòng)抓取合并功能,直接輸出最終的文本文件。前面可能需要輸入最基本的URL、save bit等信息(會(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ū):可以在設置文件中添加每章名稱(chēng)的前綴和后綴,為后期制作電子書(shū)的編目帶來(lái)極大的方便。
如何使用在線(xiàn)圖書(shū)抓取器
一、首先進(jìn)入你要下載的小說(shuō)的網(wǎng)頁(yè)。
二、輸入書(shū)名,點(diǎn)擊目錄提取。

三、設置保存路徑,點(diǎn)擊Start Grab開(kāi)始下載。
抓取網(wǎng)頁(yè)生成電子書(shū)(基于Node.js開(kāi)發(fā)的開(kāi)源工具,GitBook版)
網(wǎng)站優(yōu)化 ? 優(yōu)采云 發(fā)表了文章 ? 0 個(gè)評論 ? 107 次瀏覽 ? 2022-02-04 07:14
GitBook 是一個(gè)基于 Node.js 開(kāi)發(fā)的開(kāi)源工具。它可以通過(guò)命令行創(chuàng )建電子書(shū)項目,然后使用MarkDown編寫(xiě)電子書(shū)內容,然后生成PDF、ePub、mobi格式的電子書(shū),或者生成靜態(tài)站點(diǎn)。
此外,您還可以使用 Git 命令來(lái)管理電子書(shū)版本。如果你是 GitHub 的重度用戶(hù),你也可以將你的 GitBook 賬號和你的 GitHub 賬號綁定,這樣無(wú)論兩邊修改什么,都可以相互同步。
一、安裝 Node.js
由于 GitBook 是基于 Node.js 開(kāi)發(fā)的,所以它依賴(lài)于 Node.js 環(huán)境。如果您的系統沒(méi)有安裝Node.js,請根據您使用的系統點(diǎn)擊下方鏈接下載對應版本。如果已經(jīng)安裝,請跳過(guò)此步驟。
Node.js 下載頁(yè)面:
Node.js的Windows版和Mac版都是常規安裝包,下一步即可安裝。Luunix版本可以參考官方文檔通過(guò)yum、apt-get等工具安裝,也可以通過(guò)源碼包安裝,如下圖:
$ wget https://nodejs.org/dist/v5.4.1/node-v5.4.1.tar.gz
$ tar zxvf node-v5.4.1.tar.gz
$ cd node-v5.4.1
$ ./configure
$ make
$ make install
二、安裝 GitBook
打開(kāi)命令提示符(在 Mac 上打開(kāi)終端)并輸入以下命令安裝 GitBook:
$ npm install gitbook-cli -g
由于網(wǎng)絡(luò )原因,安裝時(shí)間可能會(huì )較長(cháng),請耐心等待安裝完成。安裝完成后,可以輸入以下命令,通過(guò)查看GitBook的版本來(lái)判斷是否安裝成功:
$ gitbook -V
三、創(chuàng )建一個(gè)電子書(shū)項目
新建目錄,進(jìn)入目錄,用gitbook命令初始化電子書(shū)項目。例如,現在讓我們創(chuàng )建一個(gè)名為“MyFirstBook”的空白電子書(shū)項目,如下所示:
$ mkdir MyFirstBook
$ cd MyFirstBook
$ gitbook init
四、編輯電子書(shū)內容
初始化目錄中會(huì )出現“README.md(電子書(shū)介紹文件)”和“SUMMARY.md(導航目錄文件)”兩個(gè)基本文件。此外,您還可以手動(dòng)創(chuàng )建其他“Glossary.md(書(shū)末詞匯)”、“book.json(電子書(shū)配置文件)”??梢愿鶕约旱南埠脼殡娮訒?shū)的文本內容新建一個(gè).md文件,比如“chapter01.md”,然后使用MarkDown編寫(xiě)具體的文本內容。這些文件將在下面詳細描述。
1、README.md
這個(gè)文件是一個(gè)簡(jiǎn)單的電子書(shū)介紹,你可以對你制作的電子書(shū)做一個(gè)簡(jiǎn)單的描述:
# 簡(jiǎn)介
這是我的第一本使用 GitBook 制作的電子書(shū)。
2、SUMMARY.md
這是電子書(shū)的導航目錄文件。每當添加章節文件時(shí),都需要在該文件中添加一條記錄。對于 Kindle 書(shū)籍,該文件呈現的目錄結構是開(kāi)頭的目錄內容和“轉到”目錄導航。
# Summary
* [簡(jiǎn)介](README.md)
* [第一章](section1/README.md)
* [第二章](section2/README.md)
如果需要“小節”,可以使用Tab縮進(jìn)(最多支持三級標題),如下:
# Summary
* [第一章](section1/README.md)
* [第一節](section1/example1.md)
* [第二節](section1/example2.md)
* [第二章](section2/README.md)
* [第一節](section2/example1.md)
3、詞匯表.md
電子書(shū)內容中需要解釋的術(shù)語(yǔ)可以在本文檔中定義。詞匯表將放在電子書(shū)的末尾。其格式如下:
# 電子書(shū)
電子書(shū)是指將文字、圖片、聲音、影像等訊息內容數字化的出版物和植入或下載數字化文字、圖片、聲音、影像等訊息內容的集存儲和顯示終端于一體的手持閱讀器。
# Kindle
Amazon Kindle 是由 Amazon 設計和銷(xiāo)售的電子書(shū)閱讀器(以及軟件平臺)。用戶(hù)可以通過(guò)無(wú)線(xiàn)網(wǎng)絡(luò )使用 Amazon Kindle 購買(mǎi)、下載和閱讀電子書(shū)、報紙、雜志、博客及其他電子媒體。
4、book.json
“book.json”是電子書(shū)的配置文件,可以看作是電子書(shū)的“原創(chuàng )數據”,如書(shū)名、描述、isbn、語(yǔ)言、方向、風(fēng)格等。點(diǎn)此查看更多信息。其基本結構如下:
{
"title": "我的第一本電子書(shū)",
"description": "用 GitBook 制作的第一本電子書(shū)!",
"isbn": "978-3-16-148410-0",
"language": "zh-tw",
"direction": "ltr"
}
5、普通章節.md文件
普通章節 .md 文件可以使用您喜歡的文本編輯器編寫(xiě)。MarkDown的編寫(xiě),可以點(diǎn)擊這里查看相關(guān)示例。每次編寫(xiě) .md 文件時(shí),不要忘記在“SUMMARY.md”文件中添加一條記錄。
6、電子書(shū)封面圖片
GitBook 幫助文檔建議封面圖片大小為 1800*2360 像素,并遵循以下建議:
圖片格式為jpg格式。將圖片重命名為“cover.jpg”,放入電子書(shū)項目文件夾。
五、預覽電子書(shū)內容
電子書(shū)內容編寫(xiě)完成后,可以使用瀏覽器進(jìn)行預覽。首先輸入以下命令,從 .md 文件生成 HTML 文檔:
$ gitbook build
構建完成后,eBook項目目錄中會(huì )出現一個(gè)名為“_book”的文件夾。進(jìn)入文件夾,直接用瀏覽器打開(kāi)“index.html”,或者先輸入以下命令:
$ gitbook serve
然后在瀏覽器中輸入“:4000”預覽電子書(shū)的內容,按Ctrl+C結束預覽。
六、生成電子書(shū)文件
確認電子書(shū)沒(méi)有問(wèn)題后,輸入以下命令即可生成mobi電子書(shū):
$ gitbook mobi ./ ./MyFirstBook.mobi
如果出現以下錯誤信息,則說(shuō)明您尚未安裝 Calibre。由于 GitBook 依賴(lài) Calibre 的 ebook-convert 生成 mobi 格式的電子書(shū),請先下載并安裝 Calibre。
Error: Need to install ebook-convert from Calibre
Calibre安裝后,對于Mac OS X系統,需要先設置軟鏈接:
$ ln -s /Applications/calibre.app/Contents/MacOS/ebook-convert /usr/local/bin
再次運行轉換命令,生成 mobi 格式的電子書(shū)。
七、將項目托管到
以上所有步驟均在本地執行。如果需要實(shí)現電子書(shū)的版本管理,或者將電子書(shū)發(fā)布到網(wǎng)絡(luò ),也可以通過(guò) Git 命令在 Git 上托管本地項目。
1、注冊一個(gè)賬號
首先去注冊一個(gè)帳戶(hù)并創(chuàng )建一個(gè)新項目。在“設置”頁(yè)面獲取“Git URL(Git鏈接)”,鏈接如下:
https://git.gitbook.com/kindlefere/myfirstbook.git
2、安裝 Git 軟件
在開(kāi)始以下步驟之前,請確保您的系統上安裝了 Git。一般Mac和Lunix都自帶Git功能,可以在終端運行g(shù)it --version查看Git版本。Windows一般不自帶Git功能,請先點(diǎn)擊這里下載安裝。
安裝適用于 Windows 的 Git 時(shí),您將看到兩個(gè)選項:“僅從 Git Bash 使用 Git”和“從 Windows 命令提示符使用 Git”。前者是指在程序自帶的單獨終端中使用Git。后者意味著(zhù)你可以通過(guò)系統自帶的“命令提示符”來(lái)使用 Git 命令。大家可以根據自己的喜好來(lái)選擇,我個(gè)人推薦使用后者。
3、上傳現有的電子書(shū)項目
在本地新建一個(gè)文件夾,通過(guò)Git命令在本地抓取新創(chuàng )建的遠程項目,如下圖:
$ mkdir MyFirstBook-Git
$ cd MyFirstBook-Git
$ git init
$ git pull https://git.gitbook.com/kindlefere/myfirstbook.git
然后將本地項目“MyFirstBook”的所有內容復制到新創(chuàng )建的文件夾中,如上面的“MyFirstBook-Git”。然后使用Git命令將本地項目上傳到遠程,如下:
$ git add -A
$ git commit -m "提交說(shuō)明"
$ git remote add gitbook https://git.gitbook.com/kindlefere/myfirstbook.git
$ git push -u gitbook master
在此期間,您需要輸入您的 GitBook 注冊郵箱和密碼。以后修改內容后,只需要輸入如下Git命令即可:
$ git add [修改的文件]
$ git commit -m "提交說(shuō)明"
$ git push -u gitbook master
八、將項目鏈接到 GitHub 帳戶(hù)
如果你喜歡使用 GitHub 來(lái)管理你的項目。您還可以將您的 GitBook 帳戶(hù)鏈接到您的 GitHub 帳戶(hù),以便您的更改可以相互同步。
1、鏈接 GitBook 和 GitHub 帳戶(hù)
關(guān)聯(lián)設置也很簡(jiǎn)單,首先進(jìn)入GitBook的“賬戶(hù)設置”頁(yè)面,在“Profile(個(gè)人數據)”選項卡中找到“GitHub”選項卡,點(diǎn)擊【Connect to GitHub】按鈕轉至GitHub的“Authorize” “申請”頁(yè)面,點(diǎn)擊【授權申請】按鈕完成關(guān)聯(lián)。
2、將 GitBook 項目導入 GitHub
關(guān)聯(lián)完成后,您可以設置同步的電子書(shū)項目。以電子書(shū)項目“MyFirstBook”為例,首先需要將項目導入GitHub。轉到電子書(shū)項目的設置頁(yè)面并切換到“GitHub”選項卡。在“GitHub Repository”中,點(diǎn)擊[Export to GitHub]按鈕,按照向導中的步驟將項目導入GitHub。
3、設置 GitBook 和 GitHub 同步
導出成功后,回到GitBook項目設置頁(yè)面的“GitHub”選項卡,在“GitHub Repository”的輸入框中填寫(xiě)GitHub Repository名稱(chēng),如“GitHub username/myfirstbook”,點(diǎn)擊【保存]按鈕保存。
保存后,當前頁(yè)面會(huì )出現一個(gè)名為“集成”的選項卡。點(diǎn)擊里面的【添加 webhook】按鈕,讓 GitBook 可以接收來(lái)自 Github 的內容更新。這會(huì )將 GitBook 上的項目與 GitHub 上的相應項目鏈接起來(lái)。
之后就可以使用 GitHub 來(lái)管理電子書(shū)項目,GitBook 上電子書(shū)內容的修改也會(huì )自動(dòng)同步到 GitHub。 查看全部
抓取網(wǎng)頁(yè)生成電子書(shū)(基于Node.js開(kāi)發(fā)的開(kāi)源工具,GitBook版)
GitBook 是一個(gè)基于 Node.js 開(kāi)發(fā)的開(kāi)源工具。它可以通過(guò)命令行創(chuàng )建電子書(shū)項目,然后使用MarkDown編寫(xiě)電子書(shū)內容,然后生成PDF、ePub、mobi格式的電子書(shū),或者生成靜態(tài)站點(diǎn)。
此外,您還可以使用 Git 命令來(lái)管理電子書(shū)版本。如果你是 GitHub 的重度用戶(hù),你也可以將你的 GitBook 賬號和你的 GitHub 賬號綁定,這樣無(wú)論兩邊修改什么,都可以相互同步。
一、安裝 Node.js
由于 GitBook 是基于 Node.js 開(kāi)發(fā)的,所以它依賴(lài)于 Node.js 環(huán)境。如果您的系統沒(méi)有安裝Node.js,請根據您使用的系統點(diǎn)擊下方鏈接下載對應版本。如果已經(jīng)安裝,請跳過(guò)此步驟。
Node.js 下載頁(yè)面:
Node.js的Windows版和Mac版都是常規安裝包,下一步即可安裝。Luunix版本可以參考官方文檔通過(guò)yum、apt-get等工具安裝,也可以通過(guò)源碼包安裝,如下圖:
$ wget https://nodejs.org/dist/v5.4.1/node-v5.4.1.tar.gz
$ tar zxvf node-v5.4.1.tar.gz
$ cd node-v5.4.1
$ ./configure
$ make
$ make install
二、安裝 GitBook
打開(kāi)命令提示符(在 Mac 上打開(kāi)終端)并輸入以下命令安裝 GitBook:
$ npm install gitbook-cli -g
由于網(wǎng)絡(luò )原因,安裝時(shí)間可能會(huì )較長(cháng),請耐心等待安裝完成。安裝完成后,可以輸入以下命令,通過(guò)查看GitBook的版本來(lái)判斷是否安裝成功:
$ gitbook -V
三、創(chuàng )建一個(gè)電子書(shū)項目
新建目錄,進(jìn)入目錄,用gitbook命令初始化電子書(shū)項目。例如,現在讓我們創(chuàng )建一個(gè)名為“MyFirstBook”的空白電子書(shū)項目,如下所示:
$ mkdir MyFirstBook
$ cd MyFirstBook
$ gitbook init
四、編輯電子書(shū)內容
初始化目錄中會(huì )出現“README.md(電子書(shū)介紹文件)”和“SUMMARY.md(導航目錄文件)”兩個(gè)基本文件。此外,您還可以手動(dòng)創(chuàng )建其他“Glossary.md(書(shū)末詞匯)”、“book.json(電子書(shū)配置文件)”??梢愿鶕约旱南埠脼殡娮訒?shū)的文本內容新建一個(gè).md文件,比如“chapter01.md”,然后使用MarkDown編寫(xiě)具體的文本內容。這些文件將在下面詳細描述。
1、README.md
這個(gè)文件是一個(gè)簡(jiǎn)單的電子書(shū)介紹,你可以對你制作的電子書(shū)做一個(gè)簡(jiǎn)單的描述:
# 簡(jiǎn)介
這是我的第一本使用 GitBook 制作的電子書(shū)。
2、SUMMARY.md
這是電子書(shū)的導航目錄文件。每當添加章節文件時(shí),都需要在該文件中添加一條記錄。對于 Kindle 書(shū)籍,該文件呈現的目錄結構是開(kāi)頭的目錄內容和“轉到”目錄導航。
# Summary
* [簡(jiǎn)介](README.md)
* [第一章](section1/README.md)
* [第二章](section2/README.md)
如果需要“小節”,可以使用Tab縮進(jìn)(最多支持三級標題),如下:
# Summary
* [第一章](section1/README.md)
* [第一節](section1/example1.md)
* [第二節](section1/example2.md)
* [第二章](section2/README.md)
* [第一節](section2/example1.md)
3、詞匯表.md
電子書(shū)內容中需要解釋的術(shù)語(yǔ)可以在本文檔中定義。詞匯表將放在電子書(shū)的末尾。其格式如下:
# 電子書(shū)
電子書(shū)是指將文字、圖片、聲音、影像等訊息內容數字化的出版物和植入或下載數字化文字、圖片、聲音、影像等訊息內容的集存儲和顯示終端于一體的手持閱讀器。
# Kindle
Amazon Kindle 是由 Amazon 設計和銷(xiāo)售的電子書(shū)閱讀器(以及軟件平臺)。用戶(hù)可以通過(guò)無(wú)線(xiàn)網(wǎng)絡(luò )使用 Amazon Kindle 購買(mǎi)、下載和閱讀電子書(shū)、報紙、雜志、博客及其他電子媒體。
4、book.json
“book.json”是電子書(shū)的配置文件,可以看作是電子書(shū)的“原創(chuàng )數據”,如書(shū)名、描述、isbn、語(yǔ)言、方向、風(fēng)格等。點(diǎn)此查看更多信息。其基本結構如下:
{
"title": "我的第一本電子書(shū)",
"description": "用 GitBook 制作的第一本電子書(shū)!",
"isbn": "978-3-16-148410-0",
"language": "zh-tw",
"direction": "ltr"
}
5、普通章節.md文件
普通章節 .md 文件可以使用您喜歡的文本編輯器編寫(xiě)。MarkDown的編寫(xiě),可以點(diǎn)擊這里查看相關(guān)示例。每次編寫(xiě) .md 文件時(shí),不要忘記在“SUMMARY.md”文件中添加一條記錄。
6、電子書(shū)封面圖片
GitBook 幫助文檔建議封面圖片大小為 1800*2360 像素,并遵循以下建議:
圖片格式為jpg格式。將圖片重命名為“cover.jpg”,放入電子書(shū)項目文件夾。
五、預覽電子書(shū)內容
電子書(shū)內容編寫(xiě)完成后,可以使用瀏覽器進(jìn)行預覽。首先輸入以下命令,從 .md 文件生成 HTML 文檔:
$ gitbook build
構建完成后,eBook項目目錄中會(huì )出現一個(gè)名為“_book”的文件夾。進(jìn)入文件夾,直接用瀏覽器打開(kāi)“index.html”,或者先輸入以下命令:
$ gitbook serve
然后在瀏覽器中輸入“:4000”預覽電子書(shū)的內容,按Ctrl+C結束預覽。
六、生成電子書(shū)文件
確認電子書(shū)沒(méi)有問(wèn)題后,輸入以下命令即可生成mobi電子書(shū):
$ gitbook mobi ./ ./MyFirstBook.mobi
如果出現以下錯誤信息,則說(shuō)明您尚未安裝 Calibre。由于 GitBook 依賴(lài) Calibre 的 ebook-convert 生成 mobi 格式的電子書(shū),請先下載并安裝 Calibre。
Error: Need to install ebook-convert from Calibre
Calibre安裝后,對于Mac OS X系統,需要先設置軟鏈接:
$ ln -s /Applications/calibre.app/Contents/MacOS/ebook-convert /usr/local/bin
再次運行轉換命令,生成 mobi 格式的電子書(shū)。
七、將項目托管到
以上所有步驟均在本地執行。如果需要實(shí)現電子書(shū)的版本管理,或者將電子書(shū)發(fā)布到網(wǎng)絡(luò ),也可以通過(guò) Git 命令在 Git 上托管本地項目。
1、注冊一個(gè)賬號
首先去注冊一個(gè)帳戶(hù)并創(chuàng )建一個(gè)新項目。在“設置”頁(yè)面獲取“Git URL(Git鏈接)”,鏈接如下:
https://git.gitbook.com/kindlefere/myfirstbook.git
2、安裝 Git 軟件
在開(kāi)始以下步驟之前,請確保您的系統上安裝了 Git。一般Mac和Lunix都自帶Git功能,可以在終端運行g(shù)it --version查看Git版本。Windows一般不自帶Git功能,請先點(diǎn)擊這里下載安裝。
安裝適用于 Windows 的 Git 時(shí),您將看到兩個(gè)選項:“僅從 Git Bash 使用 Git”和“從 Windows 命令提示符使用 Git”。前者是指在程序自帶的單獨終端中使用Git。后者意味著(zhù)你可以通過(guò)系統自帶的“命令提示符”來(lái)使用 Git 命令。大家可以根據自己的喜好來(lái)選擇,我個(gè)人推薦使用后者。
3、上傳現有的電子書(shū)項目
在本地新建一個(gè)文件夾,通過(guò)Git命令在本地抓取新創(chuàng )建的遠程項目,如下圖:
$ mkdir MyFirstBook-Git
$ cd MyFirstBook-Git
$ git init
$ git pull https://git.gitbook.com/kindlefere/myfirstbook.git
然后將本地項目“MyFirstBook”的所有內容復制到新創(chuàng )建的文件夾中,如上面的“MyFirstBook-Git”。然后使用Git命令將本地項目上傳到遠程,如下:
$ git add -A
$ git commit -m "提交說(shuō)明"
$ git remote add gitbook https://git.gitbook.com/kindlefere/myfirstbook.git
$ git push -u gitbook master
在此期間,您需要輸入您的 GitBook 注冊郵箱和密碼。以后修改內容后,只需要輸入如下Git命令即可:
$ git add [修改的文件]
$ git commit -m "提交說(shuō)明"
$ git push -u gitbook master
八、將項目鏈接到 GitHub 帳戶(hù)
如果你喜歡使用 GitHub 來(lái)管理你的項目。您還可以將您的 GitBook 帳戶(hù)鏈接到您的 GitHub 帳戶(hù),以便您的更改可以相互同步。
1、鏈接 GitBook 和 GitHub 帳戶(hù)
關(guān)聯(lián)設置也很簡(jiǎn)單,首先進(jìn)入GitBook的“賬戶(hù)設置”頁(yè)面,在“Profile(個(gè)人數據)”選項卡中找到“GitHub”選項卡,點(diǎn)擊【Connect to GitHub】按鈕轉至GitHub的“Authorize” “申請”頁(yè)面,點(diǎn)擊【授權申請】按鈕完成關(guān)聯(lián)。
2、將 GitBook 項目導入 GitHub
關(guān)聯(lián)完成后,您可以設置同步的電子書(shū)項目。以電子書(shū)項目“MyFirstBook”為例,首先需要將項目導入GitHub。轉到電子書(shū)項目的設置頁(yè)面并切換到“GitHub”選項卡。在“GitHub Repository”中,點(diǎn)擊[Export to GitHub]按鈕,按照向導中的步驟將項目導入GitHub。
3、設置 GitBook 和 GitHub 同步
導出成功后,回到GitBook項目設置頁(yè)面的“GitHub”選項卡,在“GitHub Repository”的輸入框中填寫(xiě)GitHub Repository名稱(chēng),如“GitHub username/myfirstbook”,點(diǎn)擊【保存]按鈕保存。
保存后,當前頁(yè)面會(huì )出現一個(gè)名為“集成”的選項卡。點(diǎn)擊里面的【添加 webhook】按鈕,讓 GitBook 可以接收來(lái)自 Github 的內容更新。這會(huì )將 GitBook 上的項目與 GitHub 上的相應項目鏈接起來(lái)。
之后就可以使用 GitHub 來(lái)管理電子書(shū)項目,GitBook 上電子書(shū)內容的修改也會(huì )自動(dòng)同步到 GitHub。
抓取網(wǎng)頁(yè)生成電子書(shū)(用urllib來(lái)爬取網(wǎng)頁(yè)生成電子書(shū)的方法有哪些)
網(wǎng)站優(yōu)化 ? 優(yōu)采云 發(fā)表了文章 ? 0 個(gè)評論 ? 101 次瀏覽 ? 2022-02-04 07:06
抓取網(wǎng)頁(yè)生成電子書(shū),我目前想到的方法有,爬蟲(chóng)爬取圖片,然后根據圖片文件名轉換,將出版社獲取并保存數據庫。甚至可以爬取網(wǎng)站服務(wù)器的頁(yè)面等等。另外,圖片比較多的話(huà),可以使用gimp、photoshop等軟件。比如這個(gè)。
建議安裝一個(gè)可以爬取網(wǎng)頁(yè)的搜索引擎,比如urllib.request。
你可以用國外軟件bookscombiy[]
用urllib來(lái)爬,chrome有插件taobaoui可以選取網(wǎng)頁(yè)里每個(gè)鏈接的信息,獲取電子書(shū)名和作者,
通過(guò)scrapy抓取網(wǎng)頁(yè),然后利用javascript,然后利用數據庫等,
<p>我的方法:建一個(gè)反爬蟲(chóng)系統,找到客戶(hù)端的地址,發(fā)給爬蟲(chóng)。爬蟲(chóng)爬這個(gè)頁(yè)面,發(fā)給網(wǎng)站,再發(fā)回去??蛻?hù)端地址就是所爬過(guò)頁(yè)面。具體代碼: 查看全部
抓取網(wǎng)頁(yè)生成電子書(shū)(用urllib來(lái)爬取網(wǎng)頁(yè)生成電子書(shū)的方法有哪些)
抓取網(wǎng)頁(yè)生成電子書(shū),我目前想到的方法有,爬蟲(chóng)爬取圖片,然后根據圖片文件名轉換,將出版社獲取并保存數據庫。甚至可以爬取網(wǎng)站服務(wù)器的頁(yè)面等等。另外,圖片比較多的話(huà),可以使用gimp、photoshop等軟件。比如這個(gè)。
建議安裝一個(gè)可以爬取網(wǎng)頁(yè)的搜索引擎,比如urllib.request。
你可以用國外軟件bookscombiy[]
用urllib來(lái)爬,chrome有插件taobaoui可以選取網(wǎng)頁(yè)里每個(gè)鏈接的信息,獲取電子書(shū)名和作者,
通過(guò)scrapy抓取網(wǎng)頁(yè),然后利用javascript,然后利用數據庫等,
<p>我的方法:建一個(gè)反爬蟲(chóng)系統,找到客戶(hù)端的地址,發(fā)給爬蟲(chóng)。爬蟲(chóng)爬這個(gè)頁(yè)面,發(fā)給網(wǎng)站,再發(fā)回去??蛻?hù)端地址就是所爬過(guò)頁(yè)面。具體代碼:
抓取網(wǎng)頁(yè)生成電子書(shū)(搜狗收錄應該怎么做?搜狗SEO工程師收錄方法,搜狗推送 )
網(wǎng)站優(yōu)化 ? 優(yōu)采云 發(fā)表了文章 ? 0 個(gè)評論 ? 108 次瀏覽 ? 2022-02-03 22:18
)
搜狗收錄應該怎么做?下面我們來(lái)看看搜狗的SEO工程師搜狗收錄的方法。做好搜狗網(wǎng)站收錄,必須具備以下幾個(gè)維度。否則,搜狗將很難收錄你的域名。
搜狗推
一、 服務(wù)器穩定
任何網(wǎng)站收錄或者排名都需要穩定的服務(wù)器,好的服務(wù)器是SEO優(yōu)化的基礎,尤其是網(wǎng)站,服務(wù)器出錯會(huì )導致搜狗搜索引擎無(wú)法捕捉?jīng)]有 收錄 排名。
二、搜狗老域名
老域名對于搜狗搜索引擎具有得天獨厚的優(yōu)勢。搜狗搜索引擎對老域名的信任度很高(被稱(chēng)為有中國歷史的老域名)。只要老域名沒(méi)有錯誤,很容易收錄首頁(yè)或者內頁(yè),比新域名更穩定。所以懂搜狗搜索引擎的SEO人員會(huì )選擇老域名,但是老搜狗域名也是有風(fēng)險的。購買(mǎi)舊域名時(shí),請仔細查看。如果舊域名已經(jīng)被處罰,那么你就不應該購買(mǎi)這樣的域名,因為如果你買(mǎi)了,就不會(huì )有更大的改善!
三、 搜狗節目選擇
搜狗蜘蛛對網(wǎng)頁(yè)的抓取是通過(guò)網(wǎng)頁(yè)之間的鏈接實(shí)現的。在選擇程序的時(shí)候,一定要選擇內置的鏈接功能,網(wǎng)頁(yè)之間有更多的推薦或鏈接。強大的聯(lián)動(dòng)功能讓搜狗蜘蛛對網(wǎng)站的抓取更加全面。自動(dòng)生成Sitemap地圖可以更好的讓搜狗了解你的網(wǎng)站結構和布局。搜狗更喜歡靜態(tài)頁(yè)面。選擇課程時(shí),盡量選擇原創(chuàng )學(xué)位模板過(guò)高的靜態(tài)網(wǎng)站課程。
四、 網(wǎng)站內容
網(wǎng)站未被搜狗列出收錄,請提交新的網(wǎng)站鏈接到搜狗站長(cháng)平臺,搜狗搜索引擎更注重標題+描述。因此,在填寫(xiě)網(wǎng)站的內容時(shí),標題+第一段盡量是原創(chuàng )或偽原創(chuàng )。
五、搜狗投稿收錄
搜狗推送有用嗎?絕對有用!毫無(wú)疑問(wèn)!搜狗官方:(為了讓搜狗蜘蛛更快發(fā)現你的網(wǎng)站,你也可以通過(guò)網(wǎng)站收錄收錄提交單頁(yè)申請)
搜狗官方有幾種提交方式:
搜狗投稿工具
有2種類(lèi)型的提交:
1、 驗證站點(diǎn)提交(每個(gè)站點(diǎn)每天 200 個(gè)項目)
2、 未經(jīng)驗證的網(wǎng)站提交。(單個(gè)賬號每日限制200個(gè)未驗證站點(diǎn))
3、sitemap.xml提交(包括搜狗邀請系統,大部分人沒(méi)有權限,只能選擇驗證推送或者非驗證推送來(lái)改進(jìn)收錄)
六、搜狗收錄時(shí)間
搜狗蜘蛛只與同一IP地址的服務(wù)器主機建立一個(gè)連接,爬取間隔速度控制在幾秒內。一個(gè)網(wǎng)頁(yè)在收錄之后,最快也要幾天才會(huì )更新。如果您不斷地抓取您的 網(wǎng)站,請注意您的 網(wǎng)站 上的頁(yè)面會(huì )在每次訪(fǎng)問(wèn)時(shí)生成新鏈接。
搜狗收錄
以上小編搜狗網(wǎng)站的收錄的效果。這就是今天的分享!看完這篇文章,如果你覺(jué)得不錯,不妨采集起來(lái),或者發(fā)給需要的朋友和同事!你的一舉一動(dòng)都會(huì )成為小編源源不斷的動(dòng)力!
查看全部
抓取網(wǎng)頁(yè)生成電子書(shū)(搜狗收錄應該怎么做?搜狗SEO工程師收錄方法,搜狗推送
)
搜狗收錄應該怎么做?下面我們來(lái)看看搜狗的SEO工程師搜狗收錄的方法。做好搜狗網(wǎng)站收錄,必須具備以下幾個(gè)維度。否則,搜狗將很難收錄你的域名。
搜狗推
一、 服務(wù)器穩定
任何網(wǎng)站收錄或者排名都需要穩定的服務(wù)器,好的服務(wù)器是SEO優(yōu)化的基礎,尤其是網(wǎng)站,服務(wù)器出錯會(huì )導致搜狗搜索引擎無(wú)法捕捉?jīng)]有 收錄 排名。
二、搜狗老域名
老域名對于搜狗搜索引擎具有得天獨厚的優(yōu)勢。搜狗搜索引擎對老域名的信任度很高(被稱(chēng)為有中國歷史的老域名)。只要老域名沒(méi)有錯誤,很容易收錄首頁(yè)或者內頁(yè),比新域名更穩定。所以懂搜狗搜索引擎的SEO人員會(huì )選擇老域名,但是老搜狗域名也是有風(fēng)險的。購買(mǎi)舊域名時(shí),請仔細查看。如果舊域名已經(jīng)被處罰,那么你就不應該購買(mǎi)這樣的域名,因為如果你買(mǎi)了,就不會(huì )有更大的改善!
三、 搜狗節目選擇
搜狗蜘蛛對網(wǎng)頁(yè)的抓取是通過(guò)網(wǎng)頁(yè)之間的鏈接實(shí)現的。在選擇程序的時(shí)候,一定要選擇內置的鏈接功能,網(wǎng)頁(yè)之間有更多的推薦或鏈接。強大的聯(lián)動(dòng)功能讓搜狗蜘蛛對網(wǎng)站的抓取更加全面。自動(dòng)生成Sitemap地圖可以更好的讓搜狗了解你的網(wǎng)站結構和布局。搜狗更喜歡靜態(tài)頁(yè)面。選擇課程時(shí),盡量選擇原創(chuàng )學(xué)位模板過(guò)高的靜態(tài)網(wǎng)站課程。
四、 網(wǎng)站內容
網(wǎng)站未被搜狗列出收錄,請提交新的網(wǎng)站鏈接到搜狗站長(cháng)平臺,搜狗搜索引擎更注重標題+描述。因此,在填寫(xiě)網(wǎng)站的內容時(shí),標題+第一段盡量是原創(chuàng )或偽原創(chuàng )。
五、搜狗投稿收錄
搜狗推送有用嗎?絕對有用!毫無(wú)疑問(wèn)!搜狗官方:(為了讓搜狗蜘蛛更快發(fā)現你的網(wǎng)站,你也可以通過(guò)網(wǎng)站收錄收錄提交單頁(yè)申請)
搜狗官方有幾種提交方式:
搜狗投稿工具
有2種類(lèi)型的提交:
1、 驗證站點(diǎn)提交(每個(gè)站點(diǎn)每天 200 個(gè)項目)
2、 未經(jīng)驗證的網(wǎng)站提交。(單個(gè)賬號每日限制200個(gè)未驗證站點(diǎn))
3、sitemap.xml提交(包括搜狗邀請系統,大部分人沒(méi)有權限,只能選擇驗證推送或者非驗證推送來(lái)改進(jìn)收錄)
六、搜狗收錄時(shí)間
搜狗蜘蛛只與同一IP地址的服務(wù)器主機建立一個(gè)連接,爬取間隔速度控制在幾秒內。一個(gè)網(wǎng)頁(yè)在收錄之后,最快也要幾天才會(huì )更新。如果您不斷地抓取您的 網(wǎng)站,請注意您的 網(wǎng)站 上的頁(yè)面會(huì )在每次訪(fǎng)問(wèn)時(shí)生成新鏈接。
搜狗收錄
以上小編搜狗網(wǎng)站的收錄的效果。這就是今天的分享!看完這篇文章,如果你覺(jué)得不錯,不妨采集起來(lái),或者發(fā)給需要的朋友和同事!你的一舉一動(dòng)都會(huì )成為小編源源不斷的動(dòng)力!
抓取網(wǎng)頁(yè)生成電子書(shū)(僅以界面操作方式-RSS功能模塊)
網(wǎng)站優(yōu)化 ? 優(yōu)采云 發(fā)表了文章 ? 0 個(gè)評論 ? 136 次瀏覽 ? 2022-02-01 13:15
Kindle Companion之前寫(xiě)過(guò)一篇文章文章——在Google Developer Console上使用KindleEar搭建RSS推送服務(wù)器。安裝成功后,您可以添加自己喜歡的RSS feed,KindleEar會(huì )自動(dòng)抓取最新的文章,并以期刊的形式定期推送到您的Kindle。那么除此之外,還有其他方法可以抓取 RSS 提要嗎?當然有!Calibre 本身有一個(gè) RSS 捕獲功能模塊,KindleEar 就是基于這個(gè)模塊編寫(xiě)的。Calibre雖然有命令行操作方式,但對普通用戶(hù)不是很友好,所以本文僅以界面操作方式為例。
一、準備提要
RSS訂閱地址多種多樣,沒(méi)有一定的規則,獲取RSS地址的方法也不同。一般提供RSS訂閱的網(wǎng)站都會(huì )提供一個(gè)RSS圖標,點(diǎn)擊即可獲取該網(wǎng)站的RSS訂閱地址。如果頁(yè)面上沒(méi)有這個(gè)圖標,可以查看網(wǎng)頁(yè)的源碼,找到類(lèi)似“href=""/>這樣的一行,就是RSS地址。另外,一些瀏覽器如火狐、Opera等會(huì )自動(dòng)獲取網(wǎng)站 RSS訂閱地址,并在地址欄標出RSS小圖標,也可以輕松獲取本站RSS地址。
二、添加提要
準備好 RSS 提要后,您可以在 Calibre 中添加它們。打開(kāi)Calibre,在Calibre主界面頂部的功能圖標中找到“抓取新聞”,點(diǎn)擊右側的向下箭頭,在彈出的菜單中點(diǎn)擊“添加自定義新聞源”。
在彈出的對話(huà)框中,點(diǎn)擊【新建配方】按鈕,切換到“添加自定義新聞源”對話(huà)框。在“訂閱列表標題”中輸入一個(gè)名稱(chēng),例如“我的訂閱”(此名稱(chēng)是一個(gè)類(lèi)別名稱(chēng),將收錄一組 RSS 提要地址)。
“最老的文章”可以設置抓取文章的及時(shí)性。默認情況下,Calibre 只會(huì )在過(guò)去 7 天內抓取 文章。如果你想搶更多,你可以自定義更改天數?!懊總€(gè)源的最大 文章 秒數”設置要抓取的最大 文章 秒數。不過(guò)需要注意的是,這兩個(gè)設置受限于網(wǎng)站 RSS的輸出方式。比如有些網(wǎng)站的RSS只輸出有限個(gè)最新的文章,所以無(wú)論在Calibre中如何設置都受這個(gè)限制,可能無(wú)法獲取到指定的文章 的數量;
接下來(lái),我們需要在“將新聞添加到訂閱”中添加我們想要保留的 RSS 地址。同樣在“Source Name”中輸入RSS訂閱的名稱(chēng),如“Kindle Companion”;然后在“Source URL”中輸入RSS地址,如“”;最后,點(diǎn)擊【添加來(lái)源】按鈕,在“訂閱列表中的新聞”中添加一個(gè)RSS訂閱。在一個(gè)訂閱列表中可以抓取多個(gè)RSS訂閱,因此您可以重復輸入多個(gè)RSS訂閱名稱(chēng)和來(lái)源網(wǎng)址并添加多次。
添加RSS提要地址后。點(diǎn)擊右下角的【保存】按鈕保存并返回“添加自定義動(dòng)態(tài)消息”界面。如需修改,可在左側列表中選擇一項,然后點(diǎn)擊【編輯此配方】按鈕進(jìn)行修改。如果要修改它,請單擊[刪除此配方]按鈕將其刪除。如果沒(méi)有問(wèn)題,可以點(diǎn)擊【關(guān)閉】按鈕返回Calibre主界面。
三、獲取和推送
設置好 Feed 后,您就可以抓取新聞了。同樣,在Calibre主界面上方的功能圖標中找到“抓取新聞”,點(diǎn)擊,彈出“定期新聞下載”對話(huà)框。在左側列表中找到“自定義”類(lèi)別,點(diǎn)擊展開(kāi),可以找到剛剛添加的訂閱列表。選擇好之后,點(diǎn)擊界面下方的【立即下載】按鈕,Calibre就會(huì )開(kāi)始爬取RSS內容。
抓取成功后,Calibre 會(huì )生成一本期刊格式的電子書(shū),并自動(dòng)存入圖書(shū)館。如果您設置了電子郵件推送,Calibre 還會(huì )自動(dòng)將生成的電子書(shū)推送到云端,以便自動(dòng)同步到您的 Kindle。
當然,除了這種手動(dòng)爬取方式,你還可以通過(guò)“定時(shí)下載”來(lái)定時(shí)爬取,比如每周、每月或者每隔指定天數爬取RSS內容,但前提是你要保持電腦開(kāi)機,讓您的計算機保持在線(xiàn)狀態(tài)。
另外需要注意的是,網(wǎng)站的一些RSS只輸出摘要,所以Calibre只能抓取摘要內容;如果您訂閱的 RSS 被屏蔽并且您的網(wǎng)絡(luò )沒(méi)有使用代理,則 Failed to crawl 成功。
Kindle Companion之前寫(xiě)過(guò)一篇文章文章——在Google Developer Console上使用KindleEar搭建RSS推送服務(wù)器。安裝成功后,您可以添加自己喜歡的RSS feed,KindleEar會(huì )自動(dòng)抓取最新的文章,并以期刊的形式定期推送到您的Kindle。那么除此之外,還有其他方法可以抓取 RSS 提要嗎?當然有!Calibre 本身有一個(gè) RSS 捕獲功能模塊,KindleEar 就是基于這個(gè)模塊編寫(xiě)的。Calibre雖然有命令行操作方式,但對普通用戶(hù)不是很友好,所以本文僅以界面操作方式為例。
一、準備提要
RSS訂閱地址多種多樣,沒(méi)有一定的規則,獲取RSS地址的方法也不同。一般提供RSS訂閱的網(wǎng)站都會(huì )提供一個(gè)RSS圖標,點(diǎn)擊即可獲取該網(wǎng)站的RSS訂閱地址。如果頁(yè)面上沒(méi)有這個(gè)圖標,可以查看網(wǎng)頁(yè)的源碼,找到類(lèi)似“href=""/>這樣的一行,就是RSS地址。另外,一些瀏覽器如火狐、Opera等會(huì )自動(dòng)獲取網(wǎng)站 RSS訂閱地址,并在地址欄標出RSS小圖標,也可以輕松獲取本站RSS地址。
二、添加提要
準備好 RSS 提要后,您可以在 Calibre 中添加它們。打開(kāi)Calibre,在Calibre主界面頂部的功能圖標中找到“抓取新聞”,點(diǎn)擊右側的向下箭頭,在彈出的菜單中點(diǎn)擊“添加自定義新聞源”。
在彈出的對話(huà)框中,點(diǎn)擊【新建配方】按鈕,切換到“添加自定義新聞源”對話(huà)框。在“訂閱列表標題”中輸入一個(gè)名稱(chēng),例如“我的訂閱”(此名稱(chēng)是一個(gè)類(lèi)別名稱(chēng),將收錄一組 RSS 提要地址)。
“最老的文章”可以設置抓取文章的及時(shí)性。默認情況下,Calibre 只會(huì )在過(guò)去 7 天內抓取 文章。如果你想搶更多,你可以自定義更改天數?!懊總€(gè)源的最大 文章 秒數”設置要抓取的最大 文章 秒數。不過(guò)需要注意的是,這兩個(gè)設置受限于網(wǎng)站 RSS的輸出方式。比如有些網(wǎng)站的RSS只輸出有限個(gè)最新的文章,所以無(wú)論在Calibre中如何設置都受這個(gè)限制,可能無(wú)法獲取到指定的文章 的數量;
接下來(lái),我們需要在“將新聞添加到訂閱”中添加我們想要保留的 RSS 地址。同樣在“Source Name”中輸入RSS訂閱的名稱(chēng),如“Kindle Companion”;然后在“Source URL”中輸入RSS地址,如“”;最后,點(diǎn)擊【添加來(lái)源】按鈕,在“訂閱列表中的新聞”中添加一個(gè)RSS訂閱。在一個(gè)訂閱列表中可以抓取多個(gè)RSS訂閱,因此您可以重復輸入多個(gè)RSS訂閱名稱(chēng)和來(lái)源網(wǎng)址并添加多次。
添加RSS提要地址后。點(diǎn)擊右下角的【保存】按鈕保存并返回“添加自定義動(dòng)態(tài)消息”界面。如需修改,可在左側列表中選擇一項,然后點(diǎn)擊【編輯此配方】按鈕進(jìn)行修改。如果要修改它,請單擊[刪除此配方]按鈕將其刪除。如果沒(méi)有問(wèn)題,可以點(diǎn)擊【關(guān)閉】按鈕返回Calibre主界面。
三、獲取和推送
設置好 Feed 后,您就可以抓取新聞了。同樣,在Calibre主界面上方的功能圖標中找到“抓取新聞”,點(diǎn)擊,彈出“定期新聞下載”對話(huà)框。在左側列表中找到“自定義”類(lèi)別,點(diǎn)擊展開(kāi),可以找到剛剛添加的訂閱列表。選擇好之后,點(diǎn)擊界面下方的【立即下載】按鈕,Calibre就會(huì )開(kāi)始爬取RSS內容。
抓取成功后,Calibre 會(huì )生成一本期刊格式的電子書(shū),并自動(dòng)存入圖書(shū)館。如果您設置了電子郵件推送,Calibre 還會(huì )自動(dòng)將生成的電子書(shū)推送到云端,以便自動(dòng)同步到您的 Kindle。
當然,除了這種手動(dòng)爬取方式,你還可以通過(guò)“定時(shí)下載”來(lái)定時(shí)爬取,比如每周、每月或者每隔指定天數爬取RSS內容,但前提是你要保持電腦開(kāi)機,讓您的計算機保持在線(xiàn)狀態(tài)。
另外需要注意的是,網(wǎng)站的一些RSS只輸出摘要,所以Calibre只能抓取摘要內容;如果您訂閱的 RSS 被屏蔽并且您的網(wǎng)絡(luò )沒(méi)有使用代理,則 Failed to crawl 成功。 查看全部
抓取網(wǎng)頁(yè)生成電子書(shū)(僅以界面操作方式-RSS功能模塊)
Kindle Companion之前寫(xiě)過(guò)一篇文章文章——在Google Developer Console上使用KindleEar搭建RSS推送服務(wù)器。安裝成功后,您可以添加自己喜歡的RSS feed,KindleEar會(huì )自動(dòng)抓取最新的文章,并以期刊的形式定期推送到您的Kindle。那么除此之外,還有其他方法可以抓取 RSS 提要嗎?當然有!Calibre 本身有一個(gè) RSS 捕獲功能模塊,KindleEar 就是基于這個(gè)模塊編寫(xiě)的。Calibre雖然有命令行操作方式,但對普通用戶(hù)不是很友好,所以本文僅以界面操作方式為例。
一、準備提要
RSS訂閱地址多種多樣,沒(méi)有一定的規則,獲取RSS地址的方法也不同。一般提供RSS訂閱的網(wǎng)站都會(huì )提供一個(gè)RSS圖標,點(diǎn)擊即可獲取該網(wǎng)站的RSS訂閱地址。如果頁(yè)面上沒(méi)有這個(gè)圖標,可以查看網(wǎng)頁(yè)的源碼,找到類(lèi)似“href=""/>這樣的一行,就是RSS地址。另外,一些瀏覽器如火狐、Opera等會(huì )自動(dòng)獲取網(wǎng)站 RSS訂閱地址,并在地址欄標出RSS小圖標,也可以輕松獲取本站RSS地址。
二、添加提要
準備好 RSS 提要后,您可以在 Calibre 中添加它們。打開(kāi)Calibre,在Calibre主界面頂部的功能圖標中找到“抓取新聞”,點(diǎn)擊右側的向下箭頭,在彈出的菜單中點(diǎn)擊“添加自定義新聞源”。

在彈出的對話(huà)框中,點(diǎn)擊【新建配方】按鈕,切換到“添加自定義新聞源”對話(huà)框。在“訂閱列表標題”中輸入一個(gè)名稱(chēng),例如“我的訂閱”(此名稱(chēng)是一個(gè)類(lèi)別名稱(chēng),將收錄一組 RSS 提要地址)。
“最老的文章”可以設置抓取文章的及時(shí)性。默認情況下,Calibre 只會(huì )在過(guò)去 7 天內抓取 文章。如果你想搶更多,你可以自定義更改天數?!懊總€(gè)源的最大 文章 秒數”設置要抓取的最大 文章 秒數。不過(guò)需要注意的是,這兩個(gè)設置受限于網(wǎng)站 RSS的輸出方式。比如有些網(wǎng)站的RSS只輸出有限個(gè)最新的文章,所以無(wú)論在Calibre中如何設置都受這個(gè)限制,可能無(wú)法獲取到指定的文章 的數量;
接下來(lái),我們需要在“將新聞添加到訂閱”中添加我們想要保留的 RSS 地址。同樣在“Source Name”中輸入RSS訂閱的名稱(chēng),如“Kindle Companion”;然后在“Source URL”中輸入RSS地址,如“”;最后,點(diǎn)擊【添加來(lái)源】按鈕,在“訂閱列表中的新聞”中添加一個(gè)RSS訂閱。在一個(gè)訂閱列表中可以抓取多個(gè)RSS訂閱,因此您可以重復輸入多個(gè)RSS訂閱名稱(chēng)和來(lái)源網(wǎng)址并添加多次。

添加RSS提要地址后。點(diǎn)擊右下角的【保存】按鈕保存并返回“添加自定義動(dòng)態(tài)消息”界面。如需修改,可在左側列表中選擇一項,然后點(diǎn)擊【編輯此配方】按鈕進(jìn)行修改。如果要修改它,請單擊[刪除此配方]按鈕將其刪除。如果沒(méi)有問(wèn)題,可以點(diǎn)擊【關(guān)閉】按鈕返回Calibre主界面。
三、獲取和推送
設置好 Feed 后,您就可以抓取新聞了。同樣,在Calibre主界面上方的功能圖標中找到“抓取新聞”,點(diǎn)擊,彈出“定期新聞下載”對話(huà)框。在左側列表中找到“自定義”類(lèi)別,點(diǎn)擊展開(kāi),可以找到剛剛添加的訂閱列表。選擇好之后,點(diǎn)擊界面下方的【立即下載】按鈕,Calibre就會(huì )開(kāi)始爬取RSS內容。

抓取成功后,Calibre 會(huì )生成一本期刊格式的電子書(shū),并自動(dòng)存入圖書(shū)館。如果您設置了電子郵件推送,Calibre 還會(huì )自動(dòng)將生成的電子書(shū)推送到云端,以便自動(dòng)同步到您的 Kindle。

當然,除了這種手動(dòng)爬取方式,你還可以通過(guò)“定時(shí)下載”來(lái)定時(shí)爬取,比如每周、每月或者每隔指定天數爬取RSS內容,但前提是你要保持電腦開(kāi)機,讓您的計算機保持在線(xiàn)狀態(tài)。
另外需要注意的是,網(wǎng)站的一些RSS只輸出摘要,所以Calibre只能抓取摘要內容;如果您訂閱的 RSS 被屏蔽并且您的網(wǎng)絡(luò )沒(méi)有使用代理,則 Failed to crawl 成功。
Kindle Companion之前寫(xiě)過(guò)一篇文章文章——在Google Developer Console上使用KindleEar搭建RSS推送服務(wù)器。安裝成功后,您可以添加自己喜歡的RSS feed,KindleEar會(huì )自動(dòng)抓取最新的文章,并以期刊的形式定期推送到您的Kindle。那么除此之外,還有其他方法可以抓取 RSS 提要嗎?當然有!Calibre 本身有一個(gè) RSS 捕獲功能模塊,KindleEar 就是基于這個(gè)模塊編寫(xiě)的。Calibre雖然有命令行操作方式,但對普通用戶(hù)不是很友好,所以本文僅以界面操作方式為例。
一、準備提要
RSS訂閱地址多種多樣,沒(méi)有一定的規則,獲取RSS地址的方法也不同。一般提供RSS訂閱的網(wǎng)站都會(huì )提供一個(gè)RSS圖標,點(diǎn)擊即可獲取該網(wǎng)站的RSS訂閱地址。如果頁(yè)面上沒(méi)有這個(gè)圖標,可以查看網(wǎng)頁(yè)的源碼,找到類(lèi)似“href=""/>這樣的一行,就是RSS地址。另外,一些瀏覽器如火狐、Opera等會(huì )自動(dòng)獲取網(wǎng)站 RSS訂閱地址,并在地址欄標出RSS小圖標,也可以輕松獲取本站RSS地址。
二、添加提要
準備好 RSS 提要后,您可以在 Calibre 中添加它們。打開(kāi)Calibre,在Calibre主界面頂部的功能圖標中找到“抓取新聞”,點(diǎn)擊右側的向下箭頭,在彈出的菜單中點(diǎn)擊“添加自定義新聞源”。

在彈出的對話(huà)框中,點(diǎn)擊【新建配方】按鈕,切換到“添加自定義新聞源”對話(huà)框。在“訂閱列表標題”中輸入一個(gè)名稱(chēng),例如“我的訂閱”(此名稱(chēng)是一個(gè)類(lèi)別名稱(chēng),將收錄一組 RSS 提要地址)。
“最老的文章”可以設置抓取文章的及時(shí)性。默認情況下,Calibre 只會(huì )在過(guò)去 7 天內抓取 文章。如果你想搶更多,你可以自定義更改天數?!懊總€(gè)源的最大 文章 秒數”設置要抓取的最大 文章 秒數。不過(guò)需要注意的是,這兩個(gè)設置受限于網(wǎng)站 RSS的輸出方式。比如有些網(wǎng)站的RSS只輸出有限個(gè)最新的文章,所以無(wú)論在Calibre中如何設置都受這個(gè)限制,可能無(wú)法獲取到指定的文章 的數量;
接下來(lái),我們需要在“將新聞添加到訂閱”中添加我們想要保留的 RSS 地址。同樣在“Source Name”中輸入RSS訂閱的名稱(chēng),如“Kindle Companion”;然后在“Source URL”中輸入RSS地址,如“”;最后,點(diǎn)擊【添加來(lái)源】按鈕,在“訂閱列表中的新聞”中添加一個(gè)RSS訂閱。在一個(gè)訂閱列表中可以抓取多個(gè)RSS訂閱,因此您可以重復輸入多個(gè)RSS訂閱名稱(chēng)和來(lái)源網(wǎng)址并添加多次。

添加RSS提要地址后。點(diǎn)擊右下角的【保存】按鈕保存并返回“添加自定義動(dòng)態(tài)消息”界面。如需修改,可在左側列表中選擇一項,然后點(diǎn)擊【編輯此配方】按鈕進(jìn)行修改。如果要修改它,請單擊[刪除此配方]按鈕將其刪除。如果沒(méi)有問(wèn)題,可以點(diǎn)擊【關(guān)閉】按鈕返回Calibre主界面。
三、獲取和推送
設置好 Feed 后,您就可以抓取新聞了。同樣,在Calibre主界面上方的功能圖標中找到“抓取新聞”,點(diǎn)擊,彈出“定期新聞下載”對話(huà)框。在左側列表中找到“自定義”類(lèi)別,點(diǎn)擊展開(kāi),可以找到剛剛添加的訂閱列表。選擇好之后,點(diǎn)擊界面下方的【立即下載】按鈕,Calibre就會(huì )開(kāi)始爬取RSS內容。

抓取成功后,Calibre 會(huì )生成一本期刊格式的電子書(shū),并自動(dòng)存入圖書(shū)館。如果您設置了電子郵件推送,Calibre 還會(huì )自動(dòng)將生成的電子書(shū)推送到云端,以便自動(dòng)同步到您的 Kindle。

當然,除了這種手動(dòng)爬取方式,你還可以通過(guò)“定時(shí)下載”來(lái)定時(shí)爬取,比如每周、每月或者每隔指定天數爬取RSS內容,但前提是你要保持電腦開(kāi)機,讓您的計算機保持在線(xiàn)狀態(tài)。
另外需要注意的是,網(wǎng)站的一些RSS只輸出摘要,所以Calibre只能抓取摘要內容;如果您訂閱的 RSS 被屏蔽并且您的網(wǎng)絡(luò )沒(méi)有使用代理,則 Failed to crawl 成功。
抓取網(wǎng)頁(yè)生成電子書(shū)(微信朋友圈效果[外鏈圖片轉存失敗(img-Q117HJ9K-25) )
網(wǎng)站優(yōu)化 ? 優(yōu)采云 發(fā)表了文章 ? 0 個(gè)評論 ? 85 次瀏覽 ? 2022-02-01 13:11
)
介紹
朋友圈留著(zhù)你的數據,留著(zhù)美好的回憶,記錄著(zhù)我們的每一點(diǎn)成長(cháng)。從某種意義上說(shuō),發(fā)朋友圈就是記錄生活,感受生活,見(jiàn)證每個(gè)人每一步的成長(cháng)。
如此珍貴的記憶,何不保存呢?只需一杯咖啡時(shí)間,即可一鍵打印朋友圈??梢允羌堎|(zhì)書(shū)也可以是電子書(shū),可以長(cháng)期保存,比拍照好,有時(shí)間足跡記憶。
現在,您可以選擇打印電子書(shū)或紙質(zhì)書(shū)。如果印刷紙質(zhì)書(shū),可以找第三方機構購買(mǎi);如果你打印一本電子書(shū),我們可以自己生成,這樣可以節省很多錢(qián)。
部分截圖
在開(kāi)始編寫(xiě)代碼思路之前,我們先來(lái)看看最終生成的效果。
電子書(shū)效果
[外鏈圖片傳輸失敗(img-TH9tBgCt-24)(%E4%B8%80%E9%94%AE%E7%94%9F%E6%88%90%E4%B8%AA% E4 %BA%BA%E5%BE%AE%E4%BF%A1%E6%9C%8B%E5%8F%8B%E5%9C%88%E6%95%B0%E6%8D%AE%E7% 94 %B5%E5%AD%90%E4%B9%A6/圖像/頁(yè)面1.png)]
[外鏈圖片傳輸失敗(img-Q117HJ9K-25)(%E4%B8%80%E9%94%AE%E7%94%9F%E6%88%90%E4%B8%AA% E4 %BA%BA%E5%BE%AE%E4%BF%A1%E6%9C%8B%E5%8F%8B%E5%9C%88%E6%95%B0%E6%8D%AE%E7% 94 %B5%E5%AD%90%E4%B9%A6/圖像/頁(yè)面2.png)]
紙書(shū)效果
【外鏈圖片傳輸失敗(img-eyuaB4P-27)(%E4%B8%80%E9%94%AE%E7%94%9F%E6%88%90%E4%B8%AA% E4 %BA%BA%E5%BE%AE%E4%BF%A1%E6%9C%8B%E5%8F%8B%E5%9C%88%E6%95%B0%E6%8D%AE%E7% 94 %B5%E5%AD%90%E4%B9%A6/圖像/頁(yè)面3.jpeg)]
獲取微信書(shū)籍鏈接的代碼思路
看完效果圖,開(kāi)始進(jìn)入代碼編寫(xiě)部分。首先,由于朋友圈數據的隱私性較高,如果手動(dòng)獲取,需要使用root安卓手機解密或解密PC機備份的聊天記錄數據庫,很難大多數人。所以我們的想法是根據現有數據打印電子書(shū)。
目前已經(jīng)有第三方服務(wù)支持導出朋友圈數據,微信公眾號【出版圖書(shū)】提供了這樣的服務(wù)。這種服務(wù)很有可能是基于安卓模擬器自動(dòng)化的,我就不贅述了。
先關(guān)注公眾號,然后開(kāi)始制作微信書(shū)籍。這個(gè)過(guò)程將你添加為編輯的朋友,然后你向他打開(kāi)朋友圈。過(guò)一會(huì )采集,小編會(huì )給你發(fā)一個(gè)專(zhuān)屬鏈接,這個(gè)鏈接里的內容就是你的Personal Moments。
生成電子書(shū)
有了這個(gè)鏈接,我們開(kāi)始打印頁(yè)面的內容。
整個(gè)過(guò)程基于 selenium 自動(dòng)化。如果你知道 selenium,那么這個(gè)過(guò)程其實(shí)很簡(jiǎn)單。
首先,為了引導用戶(hù)輸入微信圖書(shū)鏈接,我們采用在瀏覽器中彈出輸入文本框的形式,讓用戶(hù)輸入數據。
首先在selenium中執行js代碼,完成js代碼中彈出輸入文本框的功能。
進(jìn)入微信圖書(shū)鏈接
'''
遇到問(wèn)題沒(méi)人解答?小編創(chuàng )建了一個(gè)Python學(xué)習交流QQ群:857662006
尋找有志同道合的小伙伴,互幫互助,群里還有不錯的視頻學(xué)習教程和PDF電子書(shū)!
'''
# 以網(wǎng)頁(yè)輸入文本框形式提示用戶(hù)輸入url地址
def input_url():
# js腳本
random_id = [str(random.randint(0, 9)) for i in range(0,10)]
random_id = "".join(random_id)
random_id = 'id_input_target_url_' + random_id
js = """
// 彈出文本輸入框,輸入微信書(shū)的完整鏈接地址
target_url = prompt("請輸入微信書(shū)的完整鏈接地址","https://");
// 動(dòng)態(tài)創(chuàng )建一個(gè)input元素
input_target_url = document.createElement("input");
// 為其設置id,以便在程序中能夠獲取到它的值
input_target_url.id = "id_input_target_url";
// 插入到當前網(wǎng)頁(yè)中
document.getElementsByTagName("body")[0].appendChild(input_target_url);
// 設置不可見(jiàn)
document.getElementById("id_input_target_url").style.display = 'none';
// 設置value為target_url的值
document.getElementById("id_input_target_url").value = target_url
"""
js = js.replace('id_input_target_url', random_id)
# 執行以上js腳本
driver.execute_script(js)
上述js代碼的具體步驟為:彈出一個(gè)輸入文本框,創(chuàng )建一個(gè)動(dòng)態(tài)元素,隨機命名元素的id,將動(dòng)態(tài)元素插入到當前頁(yè)面,這樣就可以通過(guò)python 內容中的硒。
接下來(lái)檢測selenium中是否存在彈框,如果沒(méi)有,獲取彈框的內容,進(jìn)行下一步,流程代碼如下:
'''
遇到問(wèn)題沒(méi)人解答?小編創(chuàng )建了一個(gè)Python學(xué)習交流QQ群:857662006
尋找有志同道合的小伙伴,互幫互助,群里還有不錯的視頻學(xué)習教程和PDF電子書(shū)!
'''
# 執行以上js腳本
driver.execute_script(js)
# 判斷彈出框是否存在
while(True):
try:
# 檢測是否存在彈出框
alert = driver.switch_to.alert
time.sleep(0.5)
except:
# 如果拋異常,說(shuō)明當前頁(yè)面不存在彈出框,即用戶(hù)點(diǎn)擊了取消或者確定
break
# 獲取用戶(hù)輸入的鏈接地址
target_url = WebDriverWait(driver, 20).until(EC.presence_of_element_located((By.ID, random_id)))
value = target_url.get_attribute('value')
# 刪除空格
value = value.strip()
此時(shí)value的值就是彈出框返回的內容。(你可能會(huì )問(wèn),直接加value=微信書(shū)鏈接可以嗎?其實(shí)>*header確實(shí)是可以的,通過(guò)selenium隱藏這個(gè)元素的代碼如下:
# 隱藏導航欄,防止影響截圖效果
js = 'document.querySelector("body > header").style.display="none";'
driver.execute_script(js)
我們也發(fā)現當前頁(yè)面顯示的數據只收錄某月的朋友圈數據,而不是所有的朋友圈數據,那么如何顯示所有的朋友圈數據呢?通過(guò)分析可以看出,當點(diǎn)擊“下個(gè)月”按鈕時(shí),會(huì )顯示一個(gè)新的元素,而原來(lái)的元素會(huì )被隱藏,隱藏的元素就是上個(gè)月的數據。所以我們只需要遍歷到上個(gè)月,顯示之前的所有元素,然后打印出來(lái)。那么,如何判斷是上個(gè)月呢?我們也可以通過(guò)分析得知,當不是上個(gè)月時(shí),“下個(gè)月”的類(lèi)名是下個(gè)月,當是上個(gè)月時(shí),“下個(gè)月”的類(lèi)名是下個(gè)月禁用,所以我們可以檢測它的類(lèi)名,就知道是不是在上個(gè)月了。
'''
遇到問(wèn)題沒(méi)人解答?小編創(chuàng )建了一個(gè)Python學(xué)習交流QQ群:857662006
尋找有志同道合的小伙伴,互幫互助,群里還有不錯的視頻學(xué)習教程和PDF電子書(shū)!
'''
# 判斷當下一月控件的class name 是否為next-month disable,如果是,則說(shuō)明翻到最后一月了
page_source = driver.page_source
# 每一個(gè)element代表每一頁(yè),將每一頁(yè)中style的display屬性改成block,即可見(jiàn)狀態(tài)
for index, element in enumerate(element_left_list):
# ..在xpath中表示上一級的元素,也就是父元素
parent_element = element.find_element_by_xpath('..')
# 獲取這個(gè)父元素的完整id
parent_element_id = parent_element.get_attribute('id')
# 將該父元素更改為可見(jiàn)狀態(tài)
js = 'document.getElementById("{}").style.display="block";'.format(parent_element_id)
driver.execute_script(js)
但是,這種方式會(huì )出現問(wèn)題。即使我們打印成功,我們也不難保證頁(yè)面上的所有元素都加載完畢,所以有些元素可能打印后顯示不出來(lái),導致不太好看。因此,需要判斷加載何時(shí)結束。
【外鏈圖片傳輸失敗(img-gi8vJWty-31)(%E4%B8%80%E9%94%AE%E7%94%9F%E6%88%90%E4%B8%AA% E4 %BA%BA%E5%BE%AE%E4%BF%A1%E6%9C%8B%E5%8F%8B%E5%9C%88%E6%95%B0%E6%8D%AE%E7% 94 %B5%E5%AD%90%E4%B9%A6/圖像/頁(yè)面5.png)]
通過(guò)分析我們知道,網(wǎng)頁(yè)元素未加載時(shí),會(huì )出現“加載中”的提示,而網(wǎng)頁(yè)元素加載時(shí),該元素是隱藏的。因此,我們可以通過(guò)判斷元素是否隱藏來(lái)知道當前頁(yè)面元素是否被加載。這部分代碼如下:
# 等待當前頁(yè)面所有數據加載完畢,正常情況下數據加載完畢后,這個(gè)‘加載中’元素會(huì )隱藏起來(lái)
while (True):
loading_status = WebDriverWait(driver, 20).until(
EC.presence_of_element_located((By.CSS_SELECTOR, 'div.j-save-popup.save-popup')))
if (loading_status.is_displayed() == False):
break
但是我們也發(fā)現,在等待頁(yè)面元素及時(shí)加載后,還是有一些圖片沒(méi)有顯示出來(lái)。
【外鏈圖片傳輸失敗(img-aj7nf5ck-34)(%E4%B8%80%E9%94%AE%E7%94%9F%E6%88%90%E4%B8%AA% E4 %BA%BA%E5%BE%AE%E4%BF%A1%E6%9C%8B%E5%8F%8B%E5%9C%88%E6%95%B0%E6%8D%AE%E7% 94 %B5%E5%AD%90%E4%B9%A6/圖像/頁(yè)面6.png)]
這很令人困惑,為什么?通過(guò)分析我們還了解到,當這些圖片處于加載狀態(tài)時(shí),類(lèi)名是lazy-img。從字面意思上,我們大概可以猜到是延遲加載的意思,也就是用戶(hù)在那里滑動(dòng)頁(yè)面,直到加載完畢。,以節省服務(wù)器壓力。
所以我們可以通過(guò)一個(gè)名為lazy-img的類(lèi)滑動(dòng)到每個(gè)元素來(lái)加載它。所以?一個(gè)合適的方法是通過(guò)js定位元素,直到所有類(lèi)名為lazy-img的元素都不存在。
while(True):
try:
lazy_img = driver.find_elements_by_css_selector('img.lazy-img')
js = 'document.getElementsByClassName("lazy-img")[0].scrollIntoView();'
driver.execute_script(js)
time.sleep(3)
except:
# 找不到控件img.lazy-img,所以退出循環(huán)
break
其中document.getElementsByClassName("lazy-img")[0]是指document.getElementsByClassName("lazy-img")的第一個(gè)元素,scrollIntoView()是指滾動(dòng)到該元素的位置
打印電子書(shū)
通過(guò)以上步驟,我們成功隱藏了一些可能影響外觀(guān)的元素,同時(shí)也顯示了所有需要的元素。接下來(lái),是時(shí)候打印零件了。瀏覽器打印功能可以直接通過(guò)js代碼調用,而且我們之前已經(jīng)設置為自動(dòng)打印pdf格式,所以會(huì )自動(dòng)打印為pdf。但它打印到哪里?這里需要設置瀏覽器的默認存儲位置,保存位置為當前目錄。此步驟的代碼如下:
# 默認下載、打印保存路徑
'savefile.default_directory': os.getcwd()
# 調用chrome打印功能
driver.execute_script('window.print();')
打印后設置退出瀏覽器 driver.quit()
經(jīng)測試,電子書(shū)為超清版,大小約為16MB,質(zhì)量還不錯。
如何運行
# 跳轉到當前目錄
cd 目錄名
# 先卸載依賴(lài)庫
pip uninstall -y -r requirement.txt
# 再重新安裝依賴(lài)庫
pip install -r requirement.txt
# 開(kāi)始運行
python main.py 查看全部
抓取網(wǎng)頁(yè)生成電子書(shū)(微信朋友圈效果[外鏈圖片轉存失敗(img-Q117HJ9K-25)
)
介紹
朋友圈留著(zhù)你的數據,留著(zhù)美好的回憶,記錄著(zhù)我們的每一點(diǎn)成長(cháng)。從某種意義上說(shuō),發(fā)朋友圈就是記錄生活,感受生活,見(jiàn)證每個(gè)人每一步的成長(cháng)。
如此珍貴的記憶,何不保存呢?只需一杯咖啡時(shí)間,即可一鍵打印朋友圈??梢允羌堎|(zhì)書(shū)也可以是電子書(shū),可以長(cháng)期保存,比拍照好,有時(shí)間足跡記憶。
現在,您可以選擇打印電子書(shū)或紙質(zhì)書(shū)。如果印刷紙質(zhì)書(shū),可以找第三方機構購買(mǎi);如果你打印一本電子書(shū),我們可以自己生成,這樣可以節省很多錢(qián)。
部分截圖
在開(kāi)始編寫(xiě)代碼思路之前,我們先來(lái)看看最終生成的效果。
電子書(shū)效果
[外鏈圖片傳輸失敗(img-TH9tBgCt-24)(%E4%B8%80%E9%94%AE%E7%94%9F%E6%88%90%E4%B8%AA% E4 %BA%BA%E5%BE%AE%E4%BF%A1%E6%9C%8B%E5%8F%8B%E5%9C%88%E6%95%B0%E6%8D%AE%E7% 94 %B5%E5%AD%90%E4%B9%A6/圖像/頁(yè)面1.png)]
[外鏈圖片傳輸失敗(img-Q117HJ9K-25)(%E4%B8%80%E9%94%AE%E7%94%9F%E6%88%90%E4%B8%AA% E4 %BA%BA%E5%BE%AE%E4%BF%A1%E6%9C%8B%E5%8F%8B%E5%9C%88%E6%95%B0%E6%8D%AE%E7% 94 %B5%E5%AD%90%E4%B9%A6/圖像/頁(yè)面2.png)]
紙書(shū)效果
【外鏈圖片傳輸失敗(img-eyuaB4P-27)(%E4%B8%80%E9%94%AE%E7%94%9F%E6%88%90%E4%B8%AA% E4 %BA%BA%E5%BE%AE%E4%BF%A1%E6%9C%8B%E5%8F%8B%E5%9C%88%E6%95%B0%E6%8D%AE%E7% 94 %B5%E5%AD%90%E4%B9%A6/圖像/頁(yè)面3.jpeg)]
獲取微信書(shū)籍鏈接的代碼思路
看完效果圖,開(kāi)始進(jìn)入代碼編寫(xiě)部分。首先,由于朋友圈數據的隱私性較高,如果手動(dòng)獲取,需要使用root安卓手機解密或解密PC機備份的聊天記錄數據庫,很難大多數人。所以我們的想法是根據現有數據打印電子書(shū)。
目前已經(jīng)有第三方服務(wù)支持導出朋友圈數據,微信公眾號【出版圖書(shū)】提供了這樣的服務(wù)。這種服務(wù)很有可能是基于安卓模擬器自動(dòng)化的,我就不贅述了。
先關(guān)注公眾號,然后開(kāi)始制作微信書(shū)籍。這個(gè)過(guò)程將你添加為編輯的朋友,然后你向他打開(kāi)朋友圈。過(guò)一會(huì )采集,小編會(huì )給你發(fā)一個(gè)專(zhuān)屬鏈接,這個(gè)鏈接里的內容就是你的Personal Moments。
生成電子書(shū)
有了這個(gè)鏈接,我們開(kāi)始打印頁(yè)面的內容。
整個(gè)過(guò)程基于 selenium 自動(dòng)化。如果你知道 selenium,那么這個(gè)過(guò)程其實(shí)很簡(jiǎn)單。
首先,為了引導用戶(hù)輸入微信圖書(shū)鏈接,我們采用在瀏覽器中彈出輸入文本框的形式,讓用戶(hù)輸入數據。
首先在selenium中執行js代碼,完成js代碼中彈出輸入文本框的功能。
進(jìn)入微信圖書(shū)鏈接
'''
遇到問(wèn)題沒(méi)人解答?小編創(chuàng )建了一個(gè)Python學(xué)習交流QQ群:857662006
尋找有志同道合的小伙伴,互幫互助,群里還有不錯的視頻學(xué)習教程和PDF電子書(shū)!
'''
# 以網(wǎng)頁(yè)輸入文本框形式提示用戶(hù)輸入url地址
def input_url():
# js腳本
random_id = [str(random.randint(0, 9)) for i in range(0,10)]
random_id = "".join(random_id)
random_id = 'id_input_target_url_' + random_id
js = """
// 彈出文本輸入框,輸入微信書(shū)的完整鏈接地址
target_url = prompt("請輸入微信書(shū)的完整鏈接地址","https://");
// 動(dòng)態(tài)創(chuàng )建一個(gè)input元素
input_target_url = document.createElement("input");
// 為其設置id,以便在程序中能夠獲取到它的值
input_target_url.id = "id_input_target_url";
// 插入到當前網(wǎng)頁(yè)中
document.getElementsByTagName("body")[0].appendChild(input_target_url);
// 設置不可見(jiàn)
document.getElementById("id_input_target_url").style.display = 'none';
// 設置value為target_url的值
document.getElementById("id_input_target_url").value = target_url
"""
js = js.replace('id_input_target_url', random_id)
# 執行以上js腳本
driver.execute_script(js)
上述js代碼的具體步驟為:彈出一個(gè)輸入文本框,創(chuàng )建一個(gè)動(dòng)態(tài)元素,隨機命名元素的id,將動(dòng)態(tài)元素插入到當前頁(yè)面,這樣就可以通過(guò)python 內容中的硒。
接下來(lái)檢測selenium中是否存在彈框,如果沒(méi)有,獲取彈框的內容,進(jìn)行下一步,流程代碼如下:
'''
遇到問(wèn)題沒(méi)人解答?小編創(chuàng )建了一個(gè)Python學(xué)習交流QQ群:857662006
尋找有志同道合的小伙伴,互幫互助,群里還有不錯的視頻學(xué)習教程和PDF電子書(shū)!
'''
# 執行以上js腳本
driver.execute_script(js)
# 判斷彈出框是否存在
while(True):
try:
# 檢測是否存在彈出框
alert = driver.switch_to.alert
time.sleep(0.5)
except:
# 如果拋異常,說(shuō)明當前頁(yè)面不存在彈出框,即用戶(hù)點(diǎn)擊了取消或者確定
break
# 獲取用戶(hù)輸入的鏈接地址
target_url = WebDriverWait(driver, 20).until(EC.presence_of_element_located((By.ID, random_id)))
value = target_url.get_attribute('value')
# 刪除空格
value = value.strip()
此時(shí)value的值就是彈出框返回的內容。(你可能會(huì )問(wèn),直接加value=微信書(shū)鏈接可以嗎?其實(shí)>*header確實(shí)是可以的,通過(guò)selenium隱藏這個(gè)元素的代碼如下:
# 隱藏導航欄,防止影響截圖效果
js = 'document.querySelector("body > header").style.display="none";'
driver.execute_script(js)
我們也發(fā)現當前頁(yè)面顯示的數據只收錄某月的朋友圈數據,而不是所有的朋友圈數據,那么如何顯示所有的朋友圈數據呢?通過(guò)分析可以看出,當點(diǎn)擊“下個(gè)月”按鈕時(shí),會(huì )顯示一個(gè)新的元素,而原來(lái)的元素會(huì )被隱藏,隱藏的元素就是上個(gè)月的數據。所以我們只需要遍歷到上個(gè)月,顯示之前的所有元素,然后打印出來(lái)。那么,如何判斷是上個(gè)月呢?我們也可以通過(guò)分析得知,當不是上個(gè)月時(shí),“下個(gè)月”的類(lèi)名是下個(gè)月,當是上個(gè)月時(shí),“下個(gè)月”的類(lèi)名是下個(gè)月禁用,所以我們可以檢測它的類(lèi)名,就知道是不是在上個(gè)月了。
'''
遇到問(wèn)題沒(méi)人解答?小編創(chuàng )建了一個(gè)Python學(xué)習交流QQ群:857662006
尋找有志同道合的小伙伴,互幫互助,群里還有不錯的視頻學(xué)習教程和PDF電子書(shū)!
'''
# 判斷當下一月控件的class name 是否為next-month disable,如果是,則說(shuō)明翻到最后一月了
page_source = driver.page_source
# 每一個(gè)element代表每一頁(yè),將每一頁(yè)中style的display屬性改成block,即可見(jiàn)狀態(tài)
for index, element in enumerate(element_left_list):
# ..在xpath中表示上一級的元素,也就是父元素
parent_element = element.find_element_by_xpath('..')
# 獲取這個(gè)父元素的完整id
parent_element_id = parent_element.get_attribute('id')
# 將該父元素更改為可見(jiàn)狀態(tài)
js = 'document.getElementById("{}").style.display="block";'.format(parent_element_id)
driver.execute_script(js)
但是,這種方式會(huì )出現問(wèn)題。即使我們打印成功,我們也不難保證頁(yè)面上的所有元素都加載完畢,所以有些元素可能打印后顯示不出來(lái),導致不太好看。因此,需要判斷加載何時(shí)結束。
【外鏈圖片傳輸失敗(img-gi8vJWty-31)(%E4%B8%80%E9%94%AE%E7%94%9F%E6%88%90%E4%B8%AA% E4 %BA%BA%E5%BE%AE%E4%BF%A1%E6%9C%8B%E5%8F%8B%E5%9C%88%E6%95%B0%E6%8D%AE%E7% 94 %B5%E5%AD%90%E4%B9%A6/圖像/頁(yè)面5.png)]
通過(guò)分析我們知道,網(wǎng)頁(yè)元素未加載時(shí),會(huì )出現“加載中”的提示,而網(wǎng)頁(yè)元素加載時(shí),該元素是隱藏的。因此,我們可以通過(guò)判斷元素是否隱藏來(lái)知道當前頁(yè)面元素是否被加載。這部分代碼如下:
# 等待當前頁(yè)面所有數據加載完畢,正常情況下數據加載完畢后,這個(gè)‘加載中’元素會(huì )隱藏起來(lái)
while (True):
loading_status = WebDriverWait(driver, 20).until(
EC.presence_of_element_located((By.CSS_SELECTOR, 'div.j-save-popup.save-popup')))
if (loading_status.is_displayed() == False):
break
但是我們也發(fā)現,在等待頁(yè)面元素及時(shí)加載后,還是有一些圖片沒(méi)有顯示出來(lái)。
【外鏈圖片傳輸失敗(img-aj7nf5ck-34)(%E4%B8%80%E9%94%AE%E7%94%9F%E6%88%90%E4%B8%AA% E4 %BA%BA%E5%BE%AE%E4%BF%A1%E6%9C%8B%E5%8F%8B%E5%9C%88%E6%95%B0%E6%8D%AE%E7% 94 %B5%E5%AD%90%E4%B9%A6/圖像/頁(yè)面6.png)]
這很令人困惑,為什么?通過(guò)分析我們還了解到,當這些圖片處于加載狀態(tài)時(shí),類(lèi)名是lazy-img。從字面意思上,我們大概可以猜到是延遲加載的意思,也就是用戶(hù)在那里滑動(dòng)頁(yè)面,直到加載完畢。,以節省服務(wù)器壓力。
所以我們可以通過(guò)一個(gè)名為lazy-img的類(lèi)滑動(dòng)到每個(gè)元素來(lái)加載它。所以?一個(gè)合適的方法是通過(guò)js定位元素,直到所有類(lèi)名為lazy-img的元素都不存在。
while(True):
try:
lazy_img = driver.find_elements_by_css_selector('img.lazy-img')
js = 'document.getElementsByClassName("lazy-img")[0].scrollIntoView();'
driver.execute_script(js)
time.sleep(3)
except:
# 找不到控件img.lazy-img,所以退出循環(huán)
break
其中document.getElementsByClassName("lazy-img")[0]是指document.getElementsByClassName("lazy-img")的第一個(gè)元素,scrollIntoView()是指滾動(dòng)到該元素的位置
打印電子書(shū)
通過(guò)以上步驟,我們成功隱藏了一些可能影響外觀(guān)的元素,同時(shí)也顯示了所有需要的元素。接下來(lái),是時(shí)候打印零件了。瀏覽器打印功能可以直接通過(guò)js代碼調用,而且我們之前已經(jīng)設置為自動(dòng)打印pdf格式,所以會(huì )自動(dòng)打印為pdf。但它打印到哪里?這里需要設置瀏覽器的默認存儲位置,保存位置為當前目錄。此步驟的代碼如下:
# 默認下載、打印保存路徑
'savefile.default_directory': os.getcwd()
# 調用chrome打印功能
driver.execute_script('window.print();')
打印后設置退出瀏覽器 driver.quit()
經(jīng)測試,電子書(shū)為超清版,大小約為16MB,質(zhì)量還不錯。
如何運行
# 跳轉到當前目錄
cd 目錄名
# 先卸載依賴(lài)庫
pip uninstall -y -r requirement.txt
# 再重新安裝依賴(lài)庫
pip install -r requirement.txt
# 開(kāi)始運行
python main.py
抓取網(wǎng)頁(yè)生成電子書(shū)(網(wǎng)文快捕軟件特色介紹的應用)
網(wǎng)站優(yōu)化 ? 優(yōu)采云 發(fā)表了文章 ? 0 個(gè)評論 ? 126 次瀏覽 ? 2022-01-30 23:12
Nettext Quick Capture是一款功能實(shí)用的網(wǎng)頁(yè)保存管理軟件。本軟件可以幫助用戶(hù)輕松批量保存和管理網(wǎng)頁(yè)內容,并幫助制作成電子書(shū)格式,方便用戶(hù)獲取和提取網(wǎng)頁(yè)內容。該軟件具有超強的穩定性。最大程度保障數據安全,滿(mǎn)足用戶(hù)各種網(wǎng)頁(yè)內容獲取和保存需求。
軟件功能
1、超強穩定性:數據管理,最重要的是數據安全,可以提供穩定的程序和安全的數據存儲方式。經(jīng)過(guò)嚴格測試的程序具有高度的穩定性。同時(shí),所有數據都存儲在數據庫中,這也提供了一種安全可靠的數據存儲方式。
2、豐富的導入導出功能:可以導入你的郵件、各種Office文檔、PDF、源代碼、圖片等。同時(shí),您還可以將數據導出為 HTML 文件制作電子書(shū),無(wú)需 Cyber??Article 即可使用。以后即使不再使用,也可以使用您的數據,不用擔心數據丟失。
3、便捷的數據共享:讓您輕松共享數據。無(wú)論您是在公司還是在家里,您都可以同時(shí)使用局域網(wǎng)來(lái)管理您的數據。所有操作都自動(dòng)保存到數據庫中,無(wú)需任何同步工作。您也可以使用WebShare 組件,您可以將您的數據發(fā)布到瀏覽器上面。這樣,即使其他人沒(méi)有安裝該軟件,只要有瀏覽器,就可以查看數據。
4、強大的開(kāi)放性:公開(kāi)數據的存儲方式,提供豐富的二次開(kāi)發(fā)接口。您可以使用腳本語(yǔ)言來(lái)擴展 Cyber??Article 的功能,也可以使用高級語(yǔ)言編寫(xiě)各種插件以更好地滿(mǎn)足您的需求。
5、完全支持各種瀏覽器:支持IE、火狐、谷歌Chrome瀏覽器、蘋(píng)果safari瀏覽器、Opera。各類(lèi)主流瀏覽器一網(wǎng)打盡,各類(lèi)網(wǎng)頁(yè)一網(wǎng)打盡。
6、PDF 支持:您可以導入 PDF 文件。導入的PDF文件可以輕松統一搜索。
7、統一管理功能:將所有導入的文檔統一轉換為HTML文件,采用統一的管理、檢索、編輯方式,讓您不再關(guān)心格式。
8、提供谷歌桌面搜索和IFilter插件,讓你使用桌面搜索軟件統一進(jìn)行全文搜索。
9、提供版本控制功能,可以保存每一個(gè)歷史修改記錄。
軟件功能
保存頁(yè)面
1. 網(wǎng)頁(yè)中的任何資源都可以在IE(包括IE核心瀏覽器)、火狐、谷歌瀏覽器、Safari和Opera等支持的瀏覽器中完整無(wú)瑕地保存,特別是還可以保存一些資源,例如 YouTube 上的視頻。它已成為網(wǎng)頁(yè)保存領(lǐng)域流行的優(yōu)秀軟件。
2. 網(wǎng)頁(yè)可以批量保存。
3. 可以導入Office文檔:doc、ppt、xls、rtf。
4. 可以通過(guò)全文搜索導入 PDF 文件。
5.可以導入源代碼文件,支持顏色標注。
5. 可以導入圖片、flash等,也支持導入任意文件的附件。
資源管理
1. 以 HTML 格式保存所有資源,您可以在全文搜索、批處理、輸出和電子書(shū)制作中以相同的方式管理它們。
2.設置一個(gè)文章為IE采集,可以添加多個(gè)書(shū)簽,輕松實(shí)現多級文檔管理。
3. 您還可以編輯書(shū)中的資源。
4.Nettext Quick Capture可以實(shí)現你書(shū)中的大量操作,比如分類(lèi)、標注顏色、批處理等。 查看全部
抓取網(wǎng)頁(yè)生成電子書(shū)(網(wǎng)文快捕軟件特色介紹的應用)
Nettext Quick Capture是一款功能實(shí)用的網(wǎng)頁(yè)保存管理軟件。本軟件可以幫助用戶(hù)輕松批量保存和管理網(wǎng)頁(yè)內容,并幫助制作成電子書(shū)格式,方便用戶(hù)獲取和提取網(wǎng)頁(yè)內容。該軟件具有超強的穩定性。最大程度保障數據安全,滿(mǎn)足用戶(hù)各種網(wǎng)頁(yè)內容獲取和保存需求。

軟件功能
1、超強穩定性:數據管理,最重要的是數據安全,可以提供穩定的程序和安全的數據存儲方式。經(jīng)過(guò)嚴格測試的程序具有高度的穩定性。同時(shí),所有數據都存儲在數據庫中,這也提供了一種安全可靠的數據存儲方式。
2、豐富的導入導出功能:可以導入你的郵件、各種Office文檔、PDF、源代碼、圖片等。同時(shí),您還可以將數據導出為 HTML 文件制作電子書(shū),無(wú)需 Cyber??Article 即可使用。以后即使不再使用,也可以使用您的數據,不用擔心數據丟失。
3、便捷的數據共享:讓您輕松共享數據。無(wú)論您是在公司還是在家里,您都可以同時(shí)使用局域網(wǎng)來(lái)管理您的數據。所有操作都自動(dòng)保存到數據庫中,無(wú)需任何同步工作。您也可以使用WebShare 組件,您可以將您的數據發(fā)布到瀏覽器上面。這樣,即使其他人沒(méi)有安裝該軟件,只要有瀏覽器,就可以查看數據。
4、強大的開(kāi)放性:公開(kāi)數據的存儲方式,提供豐富的二次開(kāi)發(fā)接口。您可以使用腳本語(yǔ)言來(lái)擴展 Cyber??Article 的功能,也可以使用高級語(yǔ)言編寫(xiě)各種插件以更好地滿(mǎn)足您的需求。
5、完全支持各種瀏覽器:支持IE、火狐、谷歌Chrome瀏覽器、蘋(píng)果safari瀏覽器、Opera。各類(lèi)主流瀏覽器一網(wǎng)打盡,各類(lèi)網(wǎng)頁(yè)一網(wǎng)打盡。
6、PDF 支持:您可以導入 PDF 文件。導入的PDF文件可以輕松統一搜索。
7、統一管理功能:將所有導入的文檔統一轉換為HTML文件,采用統一的管理、檢索、編輯方式,讓您不再關(guān)心格式。
8、提供谷歌桌面搜索和IFilter插件,讓你使用桌面搜索軟件統一進(jìn)行全文搜索。
9、提供版本控制功能,可以保存每一個(gè)歷史修改記錄。
軟件功能
保存頁(yè)面
1. 網(wǎng)頁(yè)中的任何資源都可以在IE(包括IE核心瀏覽器)、火狐、谷歌瀏覽器、Safari和Opera等支持的瀏覽器中完整無(wú)瑕地保存,特別是還可以保存一些資源,例如 YouTube 上的視頻。它已成為網(wǎng)頁(yè)保存領(lǐng)域流行的優(yōu)秀軟件。
2. 網(wǎng)頁(yè)可以批量保存。
3. 可以導入Office文檔:doc、ppt、xls、rtf。
4. 可以通過(guò)全文搜索導入 PDF 文件。
5.可以導入源代碼文件,支持顏色標注。
5. 可以導入圖片、flash等,也支持導入任意文件的附件。
資源管理
1. 以 HTML 格式保存所有資源,您可以在全文搜索、批處理、輸出和電子書(shū)制作中以相同的方式管理它們。
2.設置一個(gè)文章為IE采集,可以添加多個(gè)書(shū)簽,輕松實(shí)現多級文檔管理。
3. 您還可以編輯書(shū)中的資源。
4.Nettext Quick Capture可以實(shí)現你書(shū)中的大量操作,比如分類(lèi)、標注顏色、批處理等。
抓取網(wǎng)頁(yè)生成電子書(shū)(網(wǎng)絡(luò )書(shū)籍抓取器是一款能幫助用戶(hù)下載指定網(wǎng)頁(yè)的某)
網(wǎng)站優(yōu)化 ? 優(yōu)采云 發(fā)表了文章 ? 0 個(gè)評論 ? 148 次瀏覽 ? 2022-01-30 23:09
在線(xiàn)圖書(shū)抓取器是一款可以幫助用戶(hù)下載指定網(wǎng)頁(yè)的某本書(shū)和某章的軟件。通過(guò)在線(xiàn)圖書(shū)抓取器,可以快速下載小說(shuō)。同時(shí)軟件支持斷點(diǎn)續傳功能,非常方便??梢韵螺d使用。
特征
可以提取指定小說(shuō)目錄頁(yè)面的章節信息并進(jìn)行調整,然后按照章節順序抓取小說(shuō)內容,在最合適的時(shí)候進(jìn)行合并。爬取過(guò)程可以隨時(shí)中斷,關(guān)閉程序后可以恢復上一個(gè)任務(wù)。
軟件功能
1、章節調整:提取目錄后,可以進(jìn)行移動(dòng)、刪除、反轉等調整操作。調整將直接影響調整后的章節順序中的最終書(shū)籍和輸出。
2、自動(dòng)重試:爬取過(guò)程中,可能由于網(wǎng)絡(luò )因素導致爬取失敗。本程序可能會(huì )自動(dòng)重試直到成功,或者暫時(shí)中斷爬?。ㄖ袛嗪箨P(guān)閉程序不會(huì )影響進(jìn)度),等網(wǎng)絡(luò )好了再試。
3、停止和恢復:可以隨時(shí)停止捕捉過(guò)程,退出程序后不影響進(jìn)度(章節信息會(huì )保存在記錄中,程序結束后可以恢復捕捉下次運行。注意:需要先用停止鍵中斷,然后退出程序,如果直接退出,將無(wú)法恢復)。
4、一鍵抓?。河址Q(chēng)“傻瓜模式”,基本可以實(shí)現全自動(dòng)抓取合并功能,直接輸出最終的文本文件。前面可能需要輸入最基本的URL、save bit等信息(會(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ū):可以在設置文件中添加每章名稱(chēng)的前綴和后綴,為后期制作電子書(shū)的編目帶來(lái)極大的方便。
指示
1、首先進(jìn)入你要下載的小說(shuō)的網(wǎng)頁(yè)。
2、輸入書(shū)名,點(diǎn)擊目錄提取。
3、設置保存路徑,點(diǎn)擊Start Grab開(kāi)始下載。 查看全部
抓取網(wǎng)頁(yè)生成電子書(shū)(網(wǎng)絡(luò )書(shū)籍抓取器是一款能幫助用戶(hù)下載指定網(wǎng)頁(yè)的某)
在線(xiàn)圖書(shū)抓取器是一款可以幫助用戶(hù)下載指定網(wǎng)頁(yè)的某本書(shū)和某章的軟件。通過(guò)在線(xiàn)圖書(shū)抓取器,可以快速下載小說(shuō)。同時(shí)軟件支持斷點(diǎn)續傳功能,非常方便??梢韵螺d使用。

特征
可以提取指定小說(shuō)目錄頁(yè)面的章節信息并進(jìn)行調整,然后按照章節順序抓取小說(shuō)內容,在最合適的時(shí)候進(jìn)行合并。爬取過(guò)程可以隨時(shí)中斷,關(guān)閉程序后可以恢復上一個(gè)任務(wù)。
軟件功能
1、章節調整:提取目錄后,可以進(jìn)行移動(dòng)、刪除、反轉等調整操作。調整將直接影響調整后的章節順序中的最終書(shū)籍和輸出。
2、自動(dòng)重試:爬取過(guò)程中,可能由于網(wǎng)絡(luò )因素導致爬取失敗。本程序可能會(huì )自動(dòng)重試直到成功,或者暫時(shí)中斷爬?。ㄖ袛嗪箨P(guān)閉程序不會(huì )影響進(jìn)度),等網(wǎng)絡(luò )好了再試。
3、停止和恢復:可以隨時(shí)停止捕捉過(guò)程,退出程序后不影響進(jìn)度(章節信息會(huì )保存在記錄中,程序結束后可以恢復捕捉下次運行。注意:需要先用停止鍵中斷,然后退出程序,如果直接退出,將無(wú)法恢復)。
4、一鍵抓?。河址Q(chēng)“傻瓜模式”,基本可以實(shí)現全自動(dòng)抓取合并功能,直接輸出最終的文本文件。前面可能需要輸入最基本的URL、save bit等信息(會(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ū):可以在設置文件中添加每章名稱(chēng)的前綴和后綴,為后期制作電子書(shū)的編目帶來(lái)極大的方便。
指示
1、首先進(jìn)入你要下載的小說(shuō)的網(wǎng)頁(yè)。
2、輸入書(shū)名,點(diǎn)擊目錄提取。
3、設置保存路徑,點(diǎn)擊Start Grab開(kāi)始下載。
抓取網(wǎng)頁(yè)生成電子書(shū)(需要編輯的word文檔的模板全部做成HTML頁(yè)面,需要導入的jar包)
網(wǎng)站優(yōu)化 ? 優(yōu)采云 發(fā)表了文章 ? 0 個(gè)評論 ? 120 次瀏覽 ? 2022-01-28 03:06
本來(lái)應該用pageOffice在線(xiàn)編輯、保存、轉成PDF、完成簽名。因為公司預算不夠,無(wú)法購買(mǎi)pageOffice組件,只能想其他辦法。
需要編輯的word文檔的模板是固定的,數量不大,但是格式要求比較嚴格,所以我決定把所有的模板都做成HTML頁(yè)面,用iText組件來(lái)轉換將 HTML 轉換為 PDF。
需要導入的jar包:
首先,需要將模板制作成類(lèi)似如下的頁(yè)面。水平線(xiàn)上的數據可以動(dòng)態(tài)填充和編輯。 Freemarker可以用來(lái)填充數據。
要使頁(yè)面可編輯,您可以使用 Html 的 contenteditable="true"
因為頁(yè)面可以動(dòng)態(tài)編輯,所以我們需要獲取編輯頁(yè)面的源代碼
var outerHTML = document.documentElement.outerHTML;
這里需要注意的是頁(yè)面中的所有標簽都需要關(guān)閉。如果沒(méi)有關(guān)閉,iText組件在轉換過(guò)程中會(huì )報錯。頁(yè)面中的字體需要是Arial,因為iText的轉換需要字體文件的支持。所以你還需要在項目中或者服務(wù)器上準備好字體文件
身體{
邊距:20px;
字體系列:SimSun;
}
以下是后臺收到頁(yè)面源代碼后的處理
@RequestMapping("acceptPage")
@ResponseBody
public Map acceptPage(HttpServletRequest request) throws Exception {
Map map=new HashMap();
String text = request.getParameter("text");
//使用jsoup來(lái)對html源碼進(jìn)行解析,能夠校驗格式的完整性,并生成一個(gè)新的Document
org.jsoup.nodes.Document parse = Jsoup.parse(text);
Elements meta = parse.getElementsByTag("meta");
String html = parse.html();
for (Element link : meta) {//手動(dòng)為一些標簽添加閉合
String s = link.outerHtml();
String s1=s.replace("/>",">");
html=html.replace(s,s1+"");
}
Elements link1 = parse.getElementsByTag("link");
for (Element link : link1) {
String s = link.outerHtml();
String s1=s.replace("/>",">");
html=html.replace(s,s1+"");
}
html=html.replaceAll(" ","");
try {
String outputFile="E:\\test.pdf";
OutputStream os = new FileOutputStream(outputFile);
//中文宋體文件路徑
String fontPath=StringUtil.trimSufffix(fontUrl, File.separator)+File.separator+"simsun.ttc";
//String fontPath= "C:\\simsun.ttc";
ITextRenderer render = new ITextRenderer();
ITextFontResolver fontResolver = render.getFontResolver();
fontResolver.addFont(fontPath, BaseFont.IDENTITY_H, BaseFont.NOT_EMBEDDED);
render.setDocumentFromString(html);
render.layout();
render.createPDF(os);
os.close();
} catch (Exception e) {
e.printStackTrace();
map.put("state",1);
map.put("msg","文件轉換失??!請聯(lián)系管理員!");
return map;
}
}
以下是對生成的PDF文件進(jìn)行簽名的操作,不再贅述
這是最終生成的PDF,樣式?jīng)]問(wèn)題,還實(shí)現了編輯保存功能。 查看全部
抓取網(wǎng)頁(yè)生成電子書(shū)(需要編輯的word文檔的模板全部做成HTML頁(yè)面,需要導入的jar包)
本來(lái)應該用pageOffice在線(xiàn)編輯、保存、轉成PDF、完成簽名。因為公司預算不夠,無(wú)法購買(mǎi)pageOffice組件,只能想其他辦法。
需要編輯的word文檔的模板是固定的,數量不大,但是格式要求比較嚴格,所以我決定把所有的模板都做成HTML頁(yè)面,用iText組件來(lái)轉換將 HTML 轉換為 PDF。
需要導入的jar包:

首先,需要將模板制作成類(lèi)似如下的頁(yè)面。水平線(xiàn)上的數據可以動(dòng)態(tài)填充和編輯。 Freemarker可以用來(lái)填充數據。

要使頁(yè)面可編輯,您可以使用 Html 的 contenteditable="true"

因為頁(yè)面可以動(dòng)態(tài)編輯,所以我們需要獲取編輯頁(yè)面的源代碼
var outerHTML = document.documentElement.outerHTML;
這里需要注意的是頁(yè)面中的所有標簽都需要關(guān)閉。如果沒(méi)有關(guān)閉,iText組件在轉換過(guò)程中會(huì )報錯。頁(yè)面中的字體需要是Arial,因為iText的轉換需要字體文件的支持。所以你還需要在項目中或者服務(wù)器上準備好字體文件

身體{
邊距:20px;
字體系列:SimSun;
}
以下是后臺收到頁(yè)面源代碼后的處理
@RequestMapping("acceptPage")
@ResponseBody
public Map acceptPage(HttpServletRequest request) throws Exception {
Map map=new HashMap();
String text = request.getParameter("text");
//使用jsoup來(lái)對html源碼進(jìn)行解析,能夠校驗格式的完整性,并生成一個(gè)新的Document
org.jsoup.nodes.Document parse = Jsoup.parse(text);
Elements meta = parse.getElementsByTag("meta");
String html = parse.html();
for (Element link : meta) {//手動(dòng)為一些標簽添加閉合
String s = link.outerHtml();
String s1=s.replace("/>",">");
html=html.replace(s,s1+"");
}
Elements link1 = parse.getElementsByTag("link");
for (Element link : link1) {
String s = link.outerHtml();
String s1=s.replace("/>",">");
html=html.replace(s,s1+"");
}
html=html.replaceAll(" ","");
try {
String outputFile="E:\\test.pdf";
OutputStream os = new FileOutputStream(outputFile);
//中文宋體文件路徑
String fontPath=StringUtil.trimSufffix(fontUrl, File.separator)+File.separator+"simsun.ttc";
//String fontPath= "C:\\simsun.ttc";
ITextRenderer render = new ITextRenderer();
ITextFontResolver fontResolver = render.getFontResolver();
fontResolver.addFont(fontPath, BaseFont.IDENTITY_H, BaseFont.NOT_EMBEDDED);
render.setDocumentFromString(html);
render.layout();
render.createPDF(os);
os.close();
} catch (Exception e) {
e.printStackTrace();
map.put("state",1);
map.put("msg","文件轉換失??!請聯(lián)系管理員!");
return map;
}
}
以下是對生成的PDF文件進(jìn)行簽名的操作,不再贅述

這是最終生成的PDF,樣式?jīng)]問(wèn)題,還實(shí)現了編輯保存功能。
抓取網(wǎng)頁(yè)生成電子書(shū)(在線(xiàn)閱讀網(wǎng)站URL的規律編程實(shí)現的關(guān)鍵(圖) )
網(wǎng)站優(yōu)化 ? 優(yōu)采云 發(fā)表了文章 ? 0 個(gè)評論 ? 104 次瀏覽 ? 2022-01-27 23:23
)
@1.必知常識:
許多網(wǎng)站提供在線(xiàn)閱讀書(shū)籍,但不提供這些書(shū)籍的下載,有些頁(yè)面受Javascript保護,甚至不允許復制。但是下載這些書(shū)真的不是太難,一個(gè)小程序就可以了。
@2.注意在線(xiàn)閱讀規則網(wǎng)站URL,這是編程的關(guān)鍵:
要把網(wǎng)頁(yè)一個(gè)一個(gè)刮下來(lái)放到txt里,首先要找到網(wǎng)頁(yè)URL的規則。
以本書(shū)為例《成長(cháng)比成功更重要》——新浪閱讀鏈接為:[]
點(diǎn)擊序列的部分,它的地址是[]
點(diǎn)擊它的第二部分,地址又是[]
……
點(diǎn)擊最后一段,地址是[]
很容易驗證它們的地址都是連續的數字,因此很容易編程自動(dòng)生成鏈接地址,只需使用遞增的數字生成地址即可。
@3.下載頁(yè)面的編程實(shí)現:
Python中有一個(gè)urllib包,導入,有urllib.open('#39;),這個(gè)函數返回一個(gè)文件對象,只要用返回的文件對象調用read()方法,就會(huì )返回一個(gè)字符串
@4.得到的頁(yè)面根據html標簽找到對應的文本內容:
read() 得到的頁(yè)面是一個(gè)字符串。使用該字符串的 find() 方法查找對應的文本內容從 nIdxBeg 開(kāi)始到 nIdxEnd 結束的位置。您可以輕松地使用字符串切片 strContent[nIdxBeg:nIdxEnd] 在您想要的部分截取頁(yè)面
@5.將所有你想要的截取部分保存到一個(gè)文件中。
@6. 最后寫(xiě)一個(gè)程序來(lái)讀取之前寫(xiě)好的文件,使用string函數對html標簽進(jìn)行處理,然后將處理好的html標簽的內容寫(xiě)入另一個(gè)“電子書(shū)成品”文件:
先寫(xiě)一個(gè)字典(dict),將要替換的字符串寫(xiě)入到這個(gè)字典中,然后用一個(gè)for循環(huán)迭代使用str的replace()方法將字典中對應的每一項替換為字典。將記錄的每個(gè)html標簽替換為對應的字符串,寫(xiě)入“完成的文件”——另一個(gè)txt,就大功告成了。
代碼貼在這里供參考,變量值可以作為電子書(shū)從其他頁(yè)面下載,稍作修改:
-------------------------------------------------- -------------------------------------------------- --------------
makeBook.py 下載頁(yè)面并截取需要的部分(標題和文章內容,分別通過(guò)getTitle和getContent兩個(gè)函數獲?。?,并寫(xiě)入out.txt文件。
-------------------------------------------------- -------------------------------------------------- --------------
nBeg = 30970
nEnd = 31082
strPrefix = 'http://vip.book.sina.com.cn/bo ... 39%3B
strSurfix = '.html'
strTitleBeg = """"""
strTitleEnd = """"""
strContentBeg = """"""
strContentEnd = """"""
fout = file('out.txt', 'w')
import urllib
def makeUrl(i):
"""Make the url with a number"""
return strPrefix + str(i) + strSurfix
def getContent(strPage):
nIdxBeg = strPage.find(strContentBeg)
nIdxEnd = strPage.find(strContentEnd, nIdxBeg + len(strContentBeg))
if nIdxBeg == -1 or nIdxEnd == -1:
print 'Content Not Found!'
return ''
elif nIdxBeg > nIdxEnd:
print 'Content begin index larger than end index.'
return ''
else:
return strPage[nIdxBeg + len(strContentBeg): nIdxEnd]
def getTitle(strPage):
nIdxBeg = strPage.find(strTitleBeg)
nIdxEnd = strPage.find(strTitleEnd, nIdxBeg + len(strTitleBeg))
if nIdxBeg == -1 or nIdxEnd == -1:
print 'Title Not Found!'
return ''
elif nIdxBeg > nIdxEnd:
print 'Title begin index larger than end index.'
return ''
else:
return strPage[nIdxBeg + len(strTitleBeg): nIdxEnd]
def processPage(strPage):
fout.write(getTitle(strPage))
fout.write('\n\n')
fout.write(getContent(strPage))
fout.write('\n- - - - - - - - - - - - - - - - - - - - - - - - - - -\n\n')
def writeBook():
for i in range(nBeg, nEnd):
print 'Downloading file ' + str(i)
strUrl = makeUrl(i)
nRetry = 3
strPage = ''
while nRetry:
try:
strPage = urllib.urlopen(strUrl).read()
break
except:
nRetry -= 1
continue
if not nRetry:
print 'Failed downloading file ' + str(i)
fout.write('\n\n/#####' + str(i) + '#####\\\\\\n\n')
else:
processPage(strPage)
if __name__ == '__main__':
writeBook()
fout.close()
-------------------------------------------------- -------------------------------------------------- --------------
formatTxt.py 處理前面生成的“out.txt”文件中的html標簽,然后將格式化的內容寫(xiě)入“formated.txt”
-------------------------------------------------- -------------------------------------------------- --------------
matRep = {'<p>':' ? ?', '':'\n\n'}
def formatTxt(strContent):
?? ?for i in matRep:
?? ? ? ?strContent = strContent.replace(i, matRep[i])
?? ?return strContent
if __name__ == '__main__':
?? ?strContent = file('out.txt', 'r').read()
?? ?file('formated.txt', 'w').write(formatTxt(strContent))
</p> 查看全部
抓取網(wǎng)頁(yè)生成電子書(shū)(在線(xiàn)閱讀網(wǎng)站URL的規律編程實(shí)現的關(guān)鍵(圖)
)
@1.必知常識:
許多網(wǎng)站提供在線(xiàn)閱讀書(shū)籍,但不提供這些書(shū)籍的下載,有些頁(yè)面受Javascript保護,甚至不允許復制。但是下載這些書(shū)真的不是太難,一個(gè)小程序就可以了。
@2.注意在線(xiàn)閱讀規則網(wǎng)站URL,這是編程的關(guān)鍵:
要把網(wǎng)頁(yè)一個(gè)一個(gè)刮下來(lái)放到txt里,首先要找到網(wǎng)頁(yè)URL的規則。
以本書(shū)為例《成長(cháng)比成功更重要》——新浪閱讀鏈接為:[]
點(diǎn)擊序列的部分,它的地址是[]
點(diǎn)擊它的第二部分,地址又是[]
……
點(diǎn)擊最后一段,地址是[]
很容易驗證它們的地址都是連續的數字,因此很容易編程自動(dòng)生成鏈接地址,只需使用遞增的數字生成地址即可。
@3.下載頁(yè)面的編程實(shí)現:
Python中有一個(gè)urllib包,導入,有urllib.open('#39;),這個(gè)函數返回一個(gè)文件對象,只要用返回的文件對象調用read()方法,就會(huì )返回一個(gè)字符串
@4.得到的頁(yè)面根據html標簽找到對應的文本內容:
read() 得到的頁(yè)面是一個(gè)字符串。使用該字符串的 find() 方法查找對應的文本內容從 nIdxBeg 開(kāi)始到 nIdxEnd 結束的位置。您可以輕松地使用字符串切片 strContent[nIdxBeg:nIdxEnd] 在您想要的部分截取頁(yè)面
@5.將所有你想要的截取部分保存到一個(gè)文件中。
@6. 最后寫(xiě)一個(gè)程序來(lái)讀取之前寫(xiě)好的文件,使用string函數對html標簽進(jìn)行處理,然后將處理好的html標簽的內容寫(xiě)入另一個(gè)“電子書(shū)成品”文件:
先寫(xiě)一個(gè)字典(dict),將要替換的字符串寫(xiě)入到這個(gè)字典中,然后用一個(gè)for循環(huán)迭代使用str的replace()方法將字典中對應的每一項替換為字典。將記錄的每個(gè)html標簽替換為對應的字符串,寫(xiě)入“完成的文件”——另一個(gè)txt,就大功告成了。
代碼貼在這里供參考,變量值可以作為電子書(shū)從其他頁(yè)面下載,稍作修改:
-------------------------------------------------- -------------------------------------------------- --------------
makeBook.py 下載頁(yè)面并截取需要的部分(標題和文章內容,分別通過(guò)getTitle和getContent兩個(gè)函數獲?。?,并寫(xiě)入out.txt文件。
-------------------------------------------------- -------------------------------------------------- --------------
nBeg = 30970
nEnd = 31082
strPrefix = 'http://vip.book.sina.com.cn/bo ... 39%3B
strSurfix = '.html'
strTitleBeg = """"""
strTitleEnd = """"""
strContentBeg = """"""
strContentEnd = """"""
fout = file('out.txt', 'w')
import urllib
def makeUrl(i):
"""Make the url with a number"""
return strPrefix + str(i) + strSurfix
def getContent(strPage):
nIdxBeg = strPage.find(strContentBeg)
nIdxEnd = strPage.find(strContentEnd, nIdxBeg + len(strContentBeg))
if nIdxBeg == -1 or nIdxEnd == -1:
print 'Content Not Found!'
return ''
elif nIdxBeg > nIdxEnd:
print 'Content begin index larger than end index.'
return ''
else:
return strPage[nIdxBeg + len(strContentBeg): nIdxEnd]
def getTitle(strPage):
nIdxBeg = strPage.find(strTitleBeg)
nIdxEnd = strPage.find(strTitleEnd, nIdxBeg + len(strTitleBeg))
if nIdxBeg == -1 or nIdxEnd == -1:
print 'Title Not Found!'
return ''
elif nIdxBeg > nIdxEnd:
print 'Title begin index larger than end index.'
return ''
else:
return strPage[nIdxBeg + len(strTitleBeg): nIdxEnd]
def processPage(strPage):
fout.write(getTitle(strPage))
fout.write('\n\n')
fout.write(getContent(strPage))
fout.write('\n- - - - - - - - - - - - - - - - - - - - - - - - - - -\n\n')
def writeBook():
for i in range(nBeg, nEnd):
print 'Downloading file ' + str(i)
strUrl = makeUrl(i)
nRetry = 3
strPage = ''
while nRetry:
try:
strPage = urllib.urlopen(strUrl).read()
break
except:
nRetry -= 1
continue
if not nRetry:
print 'Failed downloading file ' + str(i)
fout.write('\n\n/#####' + str(i) + '#####\\\\\\n\n')
else:
processPage(strPage)
if __name__ == '__main__':
writeBook()
fout.close()
-------------------------------------------------- -------------------------------------------------- --------------
formatTxt.py 處理前面生成的“out.txt”文件中的html標簽,然后將格式化的內容寫(xiě)入“formated.txt”
-------------------------------------------------- -------------------------------------------------- --------------
matRep = {'<p>':' ? ?', '':'\n\n'}
def formatTxt(strContent):
?? ?for i in matRep:
?? ? ? ?strContent = strContent.replace(i, matRep[i])
?? ?return strContent
if __name__ == '__main__':
?? ?strContent = file('out.txt', 'r').read()
?? ?file('formated.txt', 'w').write(formatTxt(strContent))
</p>
抓取網(wǎng)頁(yè)生成電子書(shū)(幾個(gè)適合新入門(mén)學(xué)習Python爬蟲(chóng)的網(wǎng)頁(yè),總有一款適合你!)
網(wǎng)站優(yōu)化 ? 優(yōu)采云 發(fā)表了文章 ? 0 個(gè)評論 ? 139 次瀏覽 ? 2022-02-11 17:29
推薦幾個(gè)適合初學(xué)者學(xué)習Python爬蟲(chóng)的網(wǎng)頁(yè)??傆幸豢钸m合你!
廢話(huà)不多說(shuō),直接上干貨吧!
打開(kāi)今日頭條首頁(yè),搜索小姐姐,或者其他你感興趣的內容,然后點(diǎn)擊圖庫
動(dòng)態(tài)加載的json數據出來(lái),沒(méi)有反爬。注意,如果不想抓取內容中的圖片,只能抓取縮略圖,也就是本頁(yè)顯示的圖片。它在 json 數據的 image_list 中。注意,將 url 中的列表更改為 origin,這是大局!代碼顯示如下
圖片地址全部出!
全書(shū)網(wǎng):直接源碼匹配相關(guān)內容
直接搜索全書(shū),打開(kāi)首頁(yè),找到一本小說(shuō),比如《盜墓筆記》,點(diǎn)擊跳轉網(wǎng)頁(yè),點(diǎn)擊開(kāi)始閱讀,所有章節出現,小說(shuō)內容,網(wǎng)頁(yè)內容進(jìn)入章節后出現代碼。如下:
80本電子書(shū):匹配地址直接下載壓縮文件
80 與上面的全書(shū)網(wǎng)類(lèi)似,但它本身提供了下載功能,可以直接構造下載文件、頁(yè)面截圖和帶有小說(shuō)ID和名稱(chēng)的代碼:
其他類(lèi)似網(wǎng)站
類(lèi)似的網(wǎng)站還有:美子圖、美拓、筆趣閣、九九等,連百度圖片也可以通過(guò)抓包獲取數據!
以上代碼都是手寫(xiě)的,沒(méi)有排版,有興趣的可以自己打,或者比如小說(shuō)網(wǎng)站,可以先抓取大類(lèi),然后把小說(shuō)全部拿進(jìn)去每一類(lèi),最后把所有的小說(shuō)都抓出來(lái),小說(shuō)的內容,這就是全站爬蟲(chóng)?。?!
如果你還有其他合適的網(wǎng)站,希望你可以在評論區分享!一起交流吧! 查看全部
抓取網(wǎng)頁(yè)生成電子書(shū)(幾個(gè)適合新入門(mén)學(xué)習Python爬蟲(chóng)的網(wǎng)頁(yè),總有一款適合你!)
推薦幾個(gè)適合初學(xué)者學(xué)習Python爬蟲(chóng)的網(wǎng)頁(yè)??傆幸豢钸m合你!
廢話(huà)不多說(shuō),直接上干貨吧!
打開(kāi)今日頭條首頁(yè),搜索小姐姐,或者其他你感興趣的內容,然后點(diǎn)擊圖庫
動(dòng)態(tài)加載的json數據出來(lái),沒(méi)有反爬。注意,如果不想抓取內容中的圖片,只能抓取縮略圖,也就是本頁(yè)顯示的圖片。它在 json 數據的 image_list 中。注意,將 url 中的列表更改為 origin,這是大局!代碼顯示如下
圖片地址全部出!
全書(shū)網(wǎng):直接源碼匹配相關(guān)內容
直接搜索全書(shū),打開(kāi)首頁(yè),找到一本小說(shuō),比如《盜墓筆記》,點(diǎn)擊跳轉網(wǎng)頁(yè),點(diǎn)擊開(kāi)始閱讀,所有章節出現,小說(shuō)內容,網(wǎng)頁(yè)內容進(jìn)入章節后出現代碼。如下:
80本電子書(shū):匹配地址直接下載壓縮文件
80 與上面的全書(shū)網(wǎng)類(lèi)似,但它本身提供了下載功能,可以直接構造下載文件、頁(yè)面截圖和帶有小說(shuō)ID和名稱(chēng)的代碼:
其他類(lèi)似網(wǎng)站
類(lèi)似的網(wǎng)站還有:美子圖、美拓、筆趣閣、九九等,連百度圖片也可以通過(guò)抓包獲取數據!
以上代碼都是手寫(xiě)的,沒(méi)有排版,有興趣的可以自己打,或者比如小說(shuō)網(wǎng)站,可以先抓取大類(lèi),然后把小說(shuō)全部拿進(jìn)去每一類(lèi),最后把所有的小說(shuō)都抓出來(lái),小說(shuō)的內容,這就是全站爬蟲(chóng)?。?!
如果你還有其他合適的網(wǎng)站,希望你可以在評論區分享!一起交流吧!
抓取網(wǎng)頁(yè)生成電子書(shū)(為什么80%的碼農都做不了架構師?(圖))
網(wǎng)站優(yōu)化 ? 優(yōu)采云 發(fā)表了文章 ? 0 個(gè)評論 ? 98 次瀏覽 ? 2022-02-11 02:12
為什么 80% 的程序員不能成為架構師? >>>
####Calibre 制作電子書(shū)
Calibre支持用Python語(yǔ)言編寫(xiě)腳本,爬取網(wǎng)頁(yè)內容生成電子書(shū),默認為mobi格式
在爬取新聞下拉菜單中選擇添加自定義新聞源New Recipe---切換到高級模式,默認提供代碼模板,您只需添加自定義網(wǎng)頁(yè)源即可編寫(xiě)Recipe文件代碼抓取新聞,選擇自定義來(lái)源,下載即可
#!/usr/bin/env python
# vim:fileencoding=utf-8
from __future__ import unicode_literals, division, absolute_import, print_function
from calibre.web.feeds.news import BasicNewsRecipe
class liaoxuefeng_python(BasicNewsRecipe):
'''自定義的Recipe都繼承自Calibre提供的基類(lèi)BasicNewsRecipe,必須實(shí)現parse_index()方法
'''
#電子書(shū)名稱(chēng)
title = '廖雪峰Python教程3'
description = 'python教程'
max_articles_per_feed = 200
# 設置每隔1s下載一個(gè)章節,默認值為0,當網(wǎng)絡(luò )不好時(shí),可以把這個(gè)值調大點(diǎn)
delay = 1
url_prefix = 'http://www.liaoxuefeng.com'
no_stylesheets = True
#抓取每一個(gè)頁(yè)面中保留的tag
keep_only_tags = [{ 'class': 'x-content' }]
#頁(yè)面中刪除的Tag
remove_tags=[{'class':'x-wiki-info'}]
#指定Tag之后的元素都被刪除
remove_tags_after=[{'class':'x-wiki-content'}]
def get_title(self, link):
return link.contents[0].strip()
def parse_index(self):
#index_to_soup()由BasicNewsRecipe實(shí)現,使用Beautifulsoup抓取一個(gè)網(wǎng)址,并獲得這個(gè)網(wǎng)頁(yè)內容的soup對象
soup = self.index_to_soup('http://www.liaoxuefeng.com/wik ... %2339;)
# 左側導航欄
div = soup.find('div', { 'class': 'x-sidebar-left-content' })
# 找到每一個(gè)章節的標題和對應的URL,Calibre會(huì )下載每一個(gè)URL的html,使用上面的類(lèi)屬性進(jìn)行解析
articles = []
for link in div.findAll('a'):
til = self.get_title(link)
url = self.url_prefix + link['href']
a = { 'title': til, 'url': url }
articles.append(a)
#返回一個(gè)列表,這個(gè)列表中是多個(gè)元組,每個(gè)元組是書(shū)的一卷('廖雪峰python教程', articles),每一卷中又有多個(gè)章節articles
tutorial = [('廖雪峰python教程', articles)]
return tutorial
參考:使用calibre和python制作電子書(shū)---Python和Git教程
轉載于: 查看全部
抓取網(wǎng)頁(yè)生成電子書(shū)(為什么80%的碼農都做不了架構師?(圖))
為什么 80% 的程序員不能成為架構師? >>>

####Calibre 制作電子書(shū)
Calibre支持用Python語(yǔ)言編寫(xiě)腳本,爬取網(wǎng)頁(yè)內容生成電子書(shū),默認為mobi格式
在爬取新聞下拉菜單中選擇添加自定義新聞源New Recipe---切換到高級模式,默認提供代碼模板,您只需添加自定義網(wǎng)頁(yè)源即可編寫(xiě)Recipe文件代碼抓取新聞,選擇自定義來(lái)源,下載即可
#!/usr/bin/env python
# vim:fileencoding=utf-8
from __future__ import unicode_literals, division, absolute_import, print_function
from calibre.web.feeds.news import BasicNewsRecipe
class liaoxuefeng_python(BasicNewsRecipe):
'''自定義的Recipe都繼承自Calibre提供的基類(lèi)BasicNewsRecipe,必須實(shí)現parse_index()方法
'''
#電子書(shū)名稱(chēng)
title = '廖雪峰Python教程3'
description = 'python教程'
max_articles_per_feed = 200
# 設置每隔1s下載一個(gè)章節,默認值為0,當網(wǎng)絡(luò )不好時(shí),可以把這個(gè)值調大點(diǎn)
delay = 1
url_prefix = 'http://www.liaoxuefeng.com'
no_stylesheets = True
#抓取每一個(gè)頁(yè)面中保留的tag
keep_only_tags = [{ 'class': 'x-content' }]
#頁(yè)面中刪除的Tag
remove_tags=[{'class':'x-wiki-info'}]
#指定Tag之后的元素都被刪除
remove_tags_after=[{'class':'x-wiki-content'}]
def get_title(self, link):
return link.contents[0].strip()
def parse_index(self):
#index_to_soup()由BasicNewsRecipe實(shí)現,使用Beautifulsoup抓取一個(gè)網(wǎng)址,并獲得這個(gè)網(wǎng)頁(yè)內容的soup對象
soup = self.index_to_soup('http://www.liaoxuefeng.com/wik ... %2339;)
# 左側導航欄
div = soup.find('div', { 'class': 'x-sidebar-left-content' })
# 找到每一個(gè)章節的標題和對應的URL,Calibre會(huì )下載每一個(gè)URL的html,使用上面的類(lèi)屬性進(jìn)行解析
articles = []
for link in div.findAll('a'):
til = self.get_title(link)
url = self.url_prefix + link['href']
a = { 'title': til, 'url': url }
articles.append(a)
#返回一個(gè)列表,這個(gè)列表中是多個(gè)元組,每個(gè)元組是書(shū)的一卷('廖雪峰python教程', articles),每一卷中又有多個(gè)章節articles
tutorial = [('廖雪峰python教程', articles)]
return tutorial
參考:使用calibre和python制作電子書(shū)---Python和Git教程
轉載于:
抓取網(wǎng)頁(yè)生成電子書(shū)(廖雪峰的Python教程爬下來(lái)做成PDF電子書(shū)方便大家離線(xiàn)閱讀 )
網(wǎng)站優(yōu)化 ? 優(yōu)采云 發(fā)表了文章 ? 0 個(gè)評論 ? 134 次瀏覽 ? 2022-02-10 16:13
)
看來(lái)寫(xiě)爬蟲(chóng)并不比使用 Python 更合適。Python社區提供的爬蟲(chóng)工具琳瑯滿(mǎn)目,你可以分分鐘寫(xiě)一個(gè)爬蟲(chóng),里面有各種可以直接使用的庫。今天,我正在考慮寫(xiě)一個(gè)爬蟲(chóng)。,爬取廖雪峰的Python教程,制作成PDF電子書(shū),供大家離線(xiàn)閱讀。
在開(kāi)始寫(xiě)爬蟲(chóng)之前,我們先分析一下網(wǎng)站1的頁(yè)面結構。頁(yè)面左側是教程目錄的大綱,每個(gè)URL對應右側一個(gè)文章,右上角是文章的標題,中間是正文部分文章的,body的內容是我們關(guān)注的重點(diǎn),我們要爬取的數據是所有網(wǎng)頁(yè)的body部分,底部是用戶(hù)的評論區,評論區對我們來(lái)說(shuō)很重要它沒(méi)有用,所以可以忽略。
工具準備
搞清楚網(wǎng)站的基本結構后,就可以開(kāi)始準備爬蟲(chóng)所依賴(lài)的工具包了。request和beautifulsoup是爬蟲(chóng)的兩大神器,reuqests用于網(wǎng)絡(luò )請求,beautifulsoup用于操作html數據。有了這兩個(gè)穿梭機,工作敏捷,我們不需要像scrapy這樣的爬蟲(chóng)框架,有點(diǎn)像小程序殺雞。另外,既然html文件轉換成pdf,就必須有相應的庫支持,wkhtmltopdf是一個(gè)很好的工具,可以用于多平臺html到pdf的轉換,pdfkit是wkhtmltopdf的Python包。先安裝以下依賴(lài),再安裝wkhtmltopdf
pip install requests
pip install beautifulsoup
pip install pdfkit
安裝 wkhtmltopdf
Windows平臺,直接從wkhtmltopdf 2官網(wǎng)下載穩定版進(jìn)行安裝。安裝完成后,將程序的執行路徑添加到系統環(huán)境的$PATH變量中。否則,如果pdfkit找不到wkhtmltopdf,就會(huì )出現“No wkhtmltopdf executable found”的錯誤。Ubuntu和CentOS可以直接從命令行安裝
$ sudo apt-get install wkhtmltopdf # ubuntu
$ sudo yum intsall wkhtmltopdf # centos
爬蟲(chóng)實(shí)現
一切準備就緒后,就可以開(kāi)始編碼了,不過(guò)最好在寫(xiě)代碼之前整理一下思路。該程序的目的是將所有URL對應的html正文部分保存在本地,然后使用pdfkit將這些文件轉換成pdf文件。讓我們拆分任務(wù)。首先將一個(gè)URL對應的html body保存到本地,然后找到所有的URL,進(jìn)行同樣的操作。
使用Chrome瀏覽器找到頁(yè)面body部分的標簽,按F12找到文字對應的div標簽:
, div 是頁(yè)面的正文內容。在本地使用請求加載整個(gè)頁(yè)面后,您可以使用 beautifulsoup 操作 HTML dom 元素以提取正文內容。
具體實(shí)現代碼如下:使用soup.find_all函數找到body標簽,然后將body部分的內容保存到a.html文件中。
def parse_url_to_html(url):
response = requests.get(url)
soup = BeautifulSoup(response.content, "html5lib")
body = soup.find_all(class_="x-wiki-content")[0]
html = str(body)
with open("a.html", 'wb') as f:
f.write(html)
第二步是解析頁(yè)面左側的所有URL。同樣的方法,找到左側的菜單選項卡
具體代碼實(shí)現邏輯:因為頁(yè)面上有uk-nav uk-nav-side的兩個(gè)類(lèi)屬性,真正的目錄列表是第二個(gè)。獲取所有的url,第一步也寫(xiě)了url轉html的功能。
def get_url_list():
"""
獲取所有URL目錄列表
"""
response = requests.get("http://www.liaoxuefeng.com/wik ... 6quot;)
soup = BeautifulSoup(response.content, "html5lib")
menu_tag = soup.find_all(class_="uk-nav uk-nav-side")[1]
urls = []
for li in menu_tag.find_all("li"):
url = "http://www.liaoxuefeng.com" + li.a.get('href')
urls.append(url)
return urls
最后一步是將html轉換為pdf文件。轉換成pdf文件很簡(jiǎn)單,因為pdfkit封裝了所有的邏輯,只需要調用函數pdfkit.from_file
def save_pdf(htmls):
"""
把所有html文件轉換成pdf文件
"""
options = {
'page-size': 'Letter',
'encoding': "UTF-8",
'custom-header': [
('Accept-Encoding', 'gzip')
]
}
pdfkit.from_file(htmls, file_name, options=options)
執行save_pdf函數,生成電子書(shū)pdf文件,效果圖為:
總結
總代碼量不到 50 行,但是,等等,上面給出的代碼省略了一些細節,比如如何獲取 文章 的標題,body 內容的 img 標簽使用相對路徑,如果如果要在pdf中正常顯示圖片,需要將相對路徑改為絕對路徑,并刪除保存的html臨時(shí)文件。這些細節都在github上。
完整代碼可以在 github 上下載。該代碼適用于Windows平臺的個(gè)人測試。歡迎 fork 下載并改進(jìn)它。GitHub地址3,無(wú)法訪(fǎng)問(wèn)GitHub的同學(xué)可以使用碼云4,關(guān)注公眾號“程序員微站”并回復可以免費下載閱讀《廖雪峰Python教程》電子書(shū)PDF文件“PDF”。
本文首發(fā)于公眾號“程序員的微站”(id:VTtalk),分享Python干貨的溫暖內容
博客地址:
查看全部
抓取網(wǎng)頁(yè)生成電子書(shū)(廖雪峰的Python教程爬下來(lái)做成PDF電子書(shū)方便大家離線(xiàn)閱讀
)
看來(lái)寫(xiě)爬蟲(chóng)并不比使用 Python 更合適。Python社區提供的爬蟲(chóng)工具琳瑯滿(mǎn)目,你可以分分鐘寫(xiě)一個(gè)爬蟲(chóng),里面有各種可以直接使用的庫。今天,我正在考慮寫(xiě)一個(gè)爬蟲(chóng)。,爬取廖雪峰的Python教程,制作成PDF電子書(shū),供大家離線(xiàn)閱讀。
在開(kāi)始寫(xiě)爬蟲(chóng)之前,我們先分析一下網(wǎng)站1的頁(yè)面結構。頁(yè)面左側是教程目錄的大綱,每個(gè)URL對應右側一個(gè)文章,右上角是文章的標題,中間是正文部分文章的,body的內容是我們關(guān)注的重點(diǎn),我們要爬取的數據是所有網(wǎng)頁(yè)的body部分,底部是用戶(hù)的評論區,評論區對我們來(lái)說(shuō)很重要它沒(méi)有用,所以可以忽略。

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

具體實(shí)現代碼如下:使用soup.find_all函數找到body標簽,然后將body部分的內容保存到a.html文件中。
def parse_url_to_html(url):
response = requests.get(url)
soup = BeautifulSoup(response.content, "html5lib")
body = soup.find_all(class_="x-wiki-content")[0]
html = str(body)
with open("a.html", 'wb') as f:
f.write(html)
第二步是解析頁(yè)面左側的所有URL。同樣的方法,找到左側的菜單選項卡

具體代碼實(shí)現邏輯:因為頁(yè)面上有uk-nav uk-nav-side的兩個(gè)類(lèi)屬性,真正的目錄列表是第二個(gè)。獲取所有的url,第一步也寫(xiě)了url轉html的功能。
def get_url_list():
"""
獲取所有URL目錄列表
"""
response = requests.get("http://www.liaoxuefeng.com/wik ... 6quot;)
soup = BeautifulSoup(response.content, "html5lib")
menu_tag = soup.find_all(class_="uk-nav uk-nav-side")[1]
urls = []
for li in menu_tag.find_all("li"):
url = "http://www.liaoxuefeng.com" + li.a.get('href')
urls.append(url)
return urls
最后一步是將html轉換為pdf文件。轉換成pdf文件很簡(jiǎn)單,因為pdfkit封裝了所有的邏輯,只需要調用函數pdfkit.from_file
def save_pdf(htmls):
"""
把所有html文件轉換成pdf文件
"""
options = {
'page-size': 'Letter',
'encoding': "UTF-8",
'custom-header': [
('Accept-Encoding', 'gzip')
]
}
pdfkit.from_file(htmls, file_name, options=options)
執行save_pdf函數,生成電子書(shū)pdf文件,效果圖為:

總結
總代碼量不到 50 行,但是,等等,上面給出的代碼省略了一些細節,比如如何獲取 文章 的標題,body 內容的 img 標簽使用相對路徑,如果如果要在pdf中正常顯示圖片,需要將相對路徑改為絕對路徑,并刪除保存的html臨時(shí)文件。這些細節都在github上。
完整代碼可以在 github 上下載。該代碼適用于Windows平臺的個(gè)人測試。歡迎 fork 下載并改進(jìn)它。GitHub地址3,無(wú)法訪(fǎng)問(wèn)GitHub的同學(xué)可以使用碼云4,關(guān)注公眾號“程序員微站”并回復可以免費下載閱讀《廖雪峰Python教程》電子書(shū)PDF文件“PDF”。
本文首發(fā)于公眾號“程序員的微站”(id:VTtalk),分享Python干貨的溫暖內容
博客地址:
抓取網(wǎng)頁(yè)生成電子書(shū)(行行網(wǎng)電子書(shū)多線(xiàn)程爬取-擼代碼代碼非常簡(jiǎn)單-寫(xiě)在前面 )
網(wǎng)站優(yōu)化 ? 優(yōu)采云 發(fā)表了文章 ? 0 個(gè)評論 ? 117 次瀏覽 ? 2022-02-09 10:07
)
星星網(wǎng)電子書(shū)多線(xiàn)程爬取——寫(xiě)在前面
最近想找幾本電子書(shū)看,翻了翻,然后找到了一個(gè)叫周渡的網(wǎng)站,網(wǎng)站很好,簡(jiǎn)單清爽,有書(shū)很多,而且都是在百度上打開(kāi)的,網(wǎng)盤(pán)可以直接下載,更新速度也還行,就爬了上去。這篇文章可以文章學(xué)習,這么好的分享網(wǎng)站,盡量不要爬,會(huì )影響別人訪(fǎng)問(wèn)速度。需要數據的可以在我的博客下評論,我會(huì )發(fā)給你,QQ,郵箱什么的。
這個(gè)網(wǎng)站頁(yè)面的邏輯很簡(jiǎn)單。我翻閱了圖書(shū)詳情頁(yè)面,它看起來(lái)是這樣的。我們只需要循環(huán)生成這些頁(yè)面的鏈接,然后就可以爬取了。為了速度,我使用多線(xiàn)程。, 你可以試試看。如果想爬取后面的數據,就在本博客下方發(fā)表評論,不要亂搞別人的服務(wù)器。
11393.html11.html?!?br /> 星星網(wǎng)電子書(shū)多線(xiàn)程爬取-代碼
代碼非常簡(jiǎn)單。以我們之前的教程做鋪墊,用很少的代碼就可以實(shí)現完整的功能。最后將采集的內容寫(xiě)入csv文件,(什么是csv,百度知道)這段代碼是IO密集型操作,我們使用aiohttp模塊來(lái)編寫(xiě)。
步驟1
連接 URL 并啟動(dòng)線(xiàn)程。
上面的代碼可以同步開(kāi)啟N個(gè)多線(xiàn)程,但是這樣很容易導致其他人的服務(wù)器癱瘓。因此,我們必須限制并發(fā)數。對于以下代碼,請嘗試將其放在指定位置。
第2步
為了處理捕獲的 Web 源代碼并提取我們想要的元素,我添加了一個(gè)使用 lxml 提取數據的方法。
第 3 步
數據格式化后,將其保存為 csv 文件,然后收工!
星星網(wǎng)電子書(shū)多線(xiàn)程爬取——運行代碼并查看結果
查看全部
抓取網(wǎng)頁(yè)生成電子書(shū)(行行網(wǎng)電子書(shū)多線(xiàn)程爬取-擼代碼代碼非常簡(jiǎn)單-寫(xiě)在前面
)
星星網(wǎng)電子書(shū)多線(xiàn)程爬取——寫(xiě)在前面
最近想找幾本電子書(shū)看,翻了翻,然后找到了一個(gè)叫周渡的網(wǎng)站,網(wǎng)站很好,簡(jiǎn)單清爽,有書(shū)很多,而且都是在百度上打開(kāi)的,網(wǎng)盤(pán)可以直接下載,更新速度也還行,就爬了上去。這篇文章可以文章學(xué)習,這么好的分享網(wǎng)站,盡量不要爬,會(huì )影響別人訪(fǎng)問(wèn)速度。需要數據的可以在我的博客下評論,我會(huì )發(fā)給你,QQ,郵箱什么的。


這個(gè)網(wǎng)站頁(yè)面的邏輯很簡(jiǎn)單。我翻閱了圖書(shū)詳情頁(yè)面,它看起來(lái)是這樣的。我們只需要循環(huán)生成這些頁(yè)面的鏈接,然后就可以爬取了。為了速度,我使用多線(xiàn)程。, 你可以試試看。如果想爬取后面的數據,就在本博客下方發(fā)表評論,不要亂搞別人的服務(wù)器。
11393.html11.html?!?br /> 星星網(wǎng)電子書(shū)多線(xiàn)程爬取-代碼
代碼非常簡(jiǎn)單。以我們之前的教程做鋪墊,用很少的代碼就可以實(shí)現完整的功能。最后將采集的內容寫(xiě)入csv文件,(什么是csv,百度知道)這段代碼是IO密集型操作,我們使用aiohttp模塊來(lái)編寫(xiě)。
步驟1
連接 URL 并啟動(dòng)線(xiàn)程。

上面的代碼可以同步開(kāi)啟N個(gè)多線(xiàn)程,但是這樣很容易導致其他人的服務(wù)器癱瘓。因此,我們必須限制并發(fā)數。對于以下代碼,請嘗試將其放在指定位置。

第2步
為了處理捕獲的 Web 源代碼并提取我們想要的元素,我添加了一個(gè)使用 lxml 提取數據的方法。

第 3 步
數據格式化后,將其保存為 csv 文件,然后收工!

星星網(wǎng)電子書(shū)多線(xiàn)程爬取——運行代碼并查看結果

抓取網(wǎng)頁(yè)生成電子書(shū)(國家數據國家統計數據庫全新改版,提供了哪些服務(wù)? )
網(wǎng)站優(yōu)化 ? 優(yōu)采云 發(fā)表了文章 ? 0 個(gè)評論 ? 97 次瀏覽 ? 2022-02-09 09:25
)
給大家推薦一些有趣又好用的網(wǎng)站。
如在線(xiàn)古籍圖書(shū)館、全國數據網(wǎng)站、地球大數據共享服務(wù)平臺、在線(xiàn)街道設計共享平臺-Streetmix、在線(xiàn)問(wèn)卷調查工具-Golden data、開(kāi)源地圖下載-OpenStreetMap、騰訊位置大數據、快速訪(fǎng)問(wèn)Site SU模型-CAD Mapper、上海1949年與2019年對比-歷史航拍圖、在線(xiàn)詞云生成工具-微詞云等。
標簽系統
規劃資源和工具相冊頁(yè)面
電子書(shū)搜索引擎 - Kumo Search
聚魔搜書(shū)是一個(gè)電子書(shū)搜索引擎,使用這個(gè)搜索引擎你可以找到各種格式的電子書(shū),包括mobi、epub、pdf、azw3等。
網(wǎng)址:
?。c(diǎn)擊圖片進(jìn)入網(wǎng)站)
網(wǎng)上古籍圖書(shū)館 - 書(shū)柜
Shuge() 是一個(gè)免費開(kāi)放的在線(xiàn)古籍圖書(shū)館。致力于開(kāi)放分享、介紹、推薦珍貴古籍、善本,鼓勵文化藝術(shù)作品數字化歸檔。分享內容僅限于公共版權領(lǐng)域的書(shū)籍(參考標準伯爾尼公約);最大限度地還原圖書(shū)的質(zhì)量和內容;這個(gè)計劃讓大家可以自由自在地享受那些來(lái)之不易的書(shū)籍。讓大家感受人類(lèi)文明的進(jìn)步。
BookGrid出版的書(shū)籍以PDF格式為主,帶有高清彩色圖片。大多數書(shū)籍的單頁(yè)寬度超過(guò)1400像素,雙頁(yè)寬度超過(guò)2400像素。宋元時(shí)期出版書(shū)籍,明清珍本至現代版。
網(wǎng)址:
?。c(diǎn)擊圖片進(jìn)入網(wǎng)站)
國家數據
新版國家統計數據庫提供以下服務(wù):
網(wǎng)址:
?。c(diǎn)擊圖片進(jìn)入網(wǎng)站)
地球大數據共享服務(wù)平臺
中科院發(fā)布的“地球大數據科學(xué)工程”A類(lèi)戰略性先導科技項目——地球大數據共享服務(wù)平臺2018年度成果。
地球大數據共享服務(wù)平臺是一個(gè)整合多領(lǐng)域海量數據,服務(wù)于數據驅動(dòng)的科學(xué)發(fā)現和決策支持的科學(xué)平臺。該平臺以共享的方式為全球用戶(hù)提供具有全球唯一標識的系統化、多樣化、動(dòng)態(tài)化、連續化、標準化的地球大數據。目前共享數據總量約5PB,包括地球觀(guān)測數據1.8PB、生物生態(tài)數據2.6PB、大氣海洋數據0.4PB、基礎地理數據和地面觀(guān)測數據0.2PB;地層和古生物數據庫有49萬(wàn)條數據記錄,360萬(wàn)種中國生物物種目錄,42萬(wàn)條微生物資源庫,10億組學(xué)數據目前在線(xiàn)?,F在,用戶(hù)可以在線(xiàn)檢索 40% 的數據。隨著(zhù)硬件條件的不斷提升,平臺數據將陸續上線(xiàn),每年更新3PB的數據量。
數據共享服務(wù)系統網(wǎng)址:
?。c(diǎn)擊圖片進(jìn)入網(wǎng)站)
在線(xiàn)問(wèn)卷調查工具 - Gold Data
這是一款在線(xiàn)表單工具,直接在瀏覽器中搜索即可找到,可以大大提高我們日常工作的效率。相信做新媒體運營(yíng)的小伙伴一定會(huì )遇到一些活動(dòng)報名、問(wèn)卷調查、反饋等問(wèn)題。讓我們談?wù)勛畛R?jiàn)的事件注冊案例之一。
網(wǎng)址:
?。c(diǎn)擊圖片進(jìn)入網(wǎng)站)
在線(xiàn)街道設計分享平臺-Streetmix
Streetmix 是一個(gè)免費的在線(xiàn)街道設計分享平臺,提供基本街道設計元素和拖放功能作為基本街道設計模板,允許用戶(hù)選擇道路寬度并添加或刪除所有街道元素,從輕軌到公路標志,并提供了多項調整功能來(lái)滿(mǎn)足用戶(hù)的需求,其扁平化的風(fēng)格也會(huì )讓人愛(ài)不釋手。
?。c(diǎn)擊圖片進(jìn)入網(wǎng)站)
日地圖
國家地理信息公共服務(wù)平臺“天圖”(以下簡(jiǎn)稱(chēng)“天圖”)是國家基礎地理信息中心建設的網(wǎng)絡(luò )化地理信息共享和服務(wù)門(mén)戶(hù)。信息部門(mén)以及相關(guān)政府部門(mén)、企事業(yè)單位、社會(huì )團體、公共地理信息公共服務(wù)資源,為各類(lèi)用戶(hù)提供權威、規范、統一的在線(xiàn)地理信息綜合服務(wù)。
網(wǎng)址:
?。c(diǎn)擊圖片進(jìn)入網(wǎng)站)
開(kāi)源地圖下載 - OpenStreetMap
開(kāi)源地圖——openstreetmap,簡(jiǎn)稱(chēng)OSM。它收錄的圖層包括公路、鐵路、水系、水域、建筑物、邊界、建筑物和其他圖層。我們不僅可以免費下載城市數據,還可以下載全球數據。
OSM提供四種主題地圖,分別對應標準地圖、自行車(chē)地圖、交通地圖和人道主義地圖,您可以根據需要選擇相應的主題地圖。
OSM主要提供四種下載方式:Simple、Overpass API、OSM Planet和Geofabrik下載。
?。c(diǎn)擊圖片進(jìn)入網(wǎng)站)
騰訊位置大數據
騰訊位置大數據官網(wǎng)包括區域人氣、位置流量、人口遷移、市政應急與決策、商鋪建設、個(gè)人出行、位置大數據應用等。
網(wǎng)址:
?。c(diǎn)擊圖片進(jìn)入網(wǎng)站)
百度地圖眼
百度地圖以海量時(shí)空大數據為基礎,結合人工智能技術(shù),為不同行業(yè)提供從宏觀(guān)到微觀(guān)的人、地、物的人口挖掘、客群分析、旅游研究、位置評估等研究。已深入應用于城市規劃、人口統計、政府、零售餐飲、廣告、文化旅游、高校智庫、公安應急等行業(yè)。
網(wǎng)址:
?。c(diǎn)擊圖片進(jìn)入網(wǎng)站)
快速獲取站點(diǎn)SU模型-CAD Mapper
這個(gè)網(wǎng)站可以在線(xiàn)生成站點(diǎn)模型,可下載的格式包括CAD、SU、RHINO。
?。c(diǎn)擊圖片進(jìn)入網(wǎng)站)
1949年與2019年的上海對比——歷史航拍
網(wǎng)站可以看到1949年到2019年、1979年到2019年的上海航拍圖對比。
網(wǎng)址:
?。c(diǎn)擊圖片進(jìn)入網(wǎng)站)
在線(xiàn)多媒體轉換工具 - CloudConvert
CloudConvert 是另一個(gè)強大的在線(xiàn)多媒體轉換工具。
支持215種文件的轉換,音頻、視頻、文檔、電子書(shū)、壓縮包、圖片、PPT、網(wǎng)頁(yè)等。反正就這么多,你自己查吧。
只需選擇本地文件(或指定網(wǎng)盤(pán)),然后選擇要轉換的文件,即可轉換。效率君實(shí)際測試了一下,速度很快。
它還有一個(gè)非常黑科技的功能。您可以選擇一個(gè)網(wǎng)盤(pán)來(lái)指定一個(gè)文件夾。添加新文件時(shí),它可以自動(dòng)轉換。沒(méi)有黑科技,真正解放了生產(chǎn)力。(但它似乎只適用于付費用戶(hù))
它還有一個(gè) Chrome 插件和一個(gè) iOS 應用程序。
網(wǎng)址:
?。c(diǎn)擊圖片進(jìn)入網(wǎng)站)
在線(xiàn)詞云生成器 - 微詞云
Mini Tag Cloud 是一個(gè)非常實(shí)用的應用程序。簡(jiǎn)單的在線(xiàn)詞云生成工具,無(wú)論你是設計師、操作員、學(xué)生還是數據分析師,都可以輕松制作出吸睛的詞云圖。
網(wǎng)址:
?。c(diǎn)擊圖片進(jìn)入網(wǎng)站)
網(wǎng)頁(yè)介紹:登錄,在首頁(yè)查看相冊?xún)热?br /> 或點(diǎn)擊網(wǎng)址直接進(jìn)入網(wǎng)頁(yè)相冊頁(yè)面
查看全部
抓取網(wǎng)頁(yè)生成電子書(shū)(國家數據國家統計數據庫全新改版,提供了哪些服務(wù)?
)
給大家推薦一些有趣又好用的網(wǎng)站。
如在線(xiàn)古籍圖書(shū)館、全國數據網(wǎng)站、地球大數據共享服務(wù)平臺、在線(xiàn)街道設計共享平臺-Streetmix、在線(xiàn)問(wèn)卷調查工具-Golden data、開(kāi)源地圖下載-OpenStreetMap、騰訊位置大數據、快速訪(fǎng)問(wèn)Site SU模型-CAD Mapper、上海1949年與2019年對比-歷史航拍圖、在線(xiàn)詞云生成工具-微詞云等。
標簽系統
規劃資源和工具相冊頁(yè)面
電子書(shū)搜索引擎 - Kumo Search
聚魔搜書(shū)是一個(gè)電子書(shū)搜索引擎,使用這個(gè)搜索引擎你可以找到各種格式的電子書(shū),包括mobi、epub、pdf、azw3等。
網(wǎng)址:
?。c(diǎn)擊圖片進(jìn)入網(wǎng)站)
網(wǎng)上古籍圖書(shū)館 - 書(shū)柜
Shuge() 是一個(gè)免費開(kāi)放的在線(xiàn)古籍圖書(shū)館。致力于開(kāi)放分享、介紹、推薦珍貴古籍、善本,鼓勵文化藝術(shù)作品數字化歸檔。分享內容僅限于公共版權領(lǐng)域的書(shū)籍(參考標準伯爾尼公約);最大限度地還原圖書(shū)的質(zhì)量和內容;這個(gè)計劃讓大家可以自由自在地享受那些來(lái)之不易的書(shū)籍。讓大家感受人類(lèi)文明的進(jìn)步。
BookGrid出版的書(shū)籍以PDF格式為主,帶有高清彩色圖片。大多數書(shū)籍的單頁(yè)寬度超過(guò)1400像素,雙頁(yè)寬度超過(guò)2400像素。宋元時(shí)期出版書(shū)籍,明清珍本至現代版。
網(wǎng)址:
?。c(diǎn)擊圖片進(jìn)入網(wǎng)站)
國家數據
新版國家統計數據庫提供以下服務(wù):
網(wǎng)址:
?。c(diǎn)擊圖片進(jìn)入網(wǎng)站)
地球大數據共享服務(wù)平臺
中科院發(fā)布的“地球大數據科學(xué)工程”A類(lèi)戰略性先導科技項目——地球大數據共享服務(wù)平臺2018年度成果。
地球大數據共享服務(wù)平臺是一個(gè)整合多領(lǐng)域海量數據,服務(wù)于數據驅動(dòng)的科學(xué)發(fā)現和決策支持的科學(xué)平臺。該平臺以共享的方式為全球用戶(hù)提供具有全球唯一標識的系統化、多樣化、動(dòng)態(tài)化、連續化、標準化的地球大數據。目前共享數據總量約5PB,包括地球觀(guān)測數據1.8PB、生物生態(tài)數據2.6PB、大氣海洋數據0.4PB、基礎地理數據和地面觀(guān)測數據0.2PB;地層和古生物數據庫有49萬(wàn)條數據記錄,360萬(wàn)種中國生物物種目錄,42萬(wàn)條微生物資源庫,10億組學(xué)數據目前在線(xiàn)?,F在,用戶(hù)可以在線(xiàn)檢索 40% 的數據。隨著(zhù)硬件條件的不斷提升,平臺數據將陸續上線(xiàn),每年更新3PB的數據量。
數據共享服務(wù)系統網(wǎng)址:
?。c(diǎn)擊圖片進(jìn)入網(wǎng)站)
在線(xiàn)問(wèn)卷調查工具 - Gold Data
這是一款在線(xiàn)表單工具,直接在瀏覽器中搜索即可找到,可以大大提高我們日常工作的效率。相信做新媒體運營(yíng)的小伙伴一定會(huì )遇到一些活動(dòng)報名、問(wèn)卷調查、反饋等問(wèn)題。讓我們談?wù)勛畛R?jiàn)的事件注冊案例之一。
網(wǎng)址:
?。c(diǎn)擊圖片進(jìn)入網(wǎng)站)
在線(xiàn)街道設計分享平臺-Streetmix
Streetmix 是一個(gè)免費的在線(xiàn)街道設計分享平臺,提供基本街道設計元素和拖放功能作為基本街道設計模板,允許用戶(hù)選擇道路寬度并添加或刪除所有街道元素,從輕軌到公路標志,并提供了多項調整功能來(lái)滿(mǎn)足用戶(hù)的需求,其扁平化的風(fēng)格也會(huì )讓人愛(ài)不釋手。
?。c(diǎn)擊圖片進(jìn)入網(wǎng)站)
日地圖
國家地理信息公共服務(wù)平臺“天圖”(以下簡(jiǎn)稱(chēng)“天圖”)是國家基礎地理信息中心建設的網(wǎng)絡(luò )化地理信息共享和服務(wù)門(mén)戶(hù)。信息部門(mén)以及相關(guān)政府部門(mén)、企事業(yè)單位、社會(huì )團體、公共地理信息公共服務(wù)資源,為各類(lèi)用戶(hù)提供權威、規范、統一的在線(xiàn)地理信息綜合服務(wù)。
網(wǎng)址:
?。c(diǎn)擊圖片進(jìn)入網(wǎng)站)
開(kāi)源地圖下載 - OpenStreetMap
開(kāi)源地圖——openstreetmap,簡(jiǎn)稱(chēng)OSM。它收錄的圖層包括公路、鐵路、水系、水域、建筑物、邊界、建筑物和其他圖層。我們不僅可以免費下載城市數據,還可以下載全球數據。
OSM提供四種主題地圖,分別對應標準地圖、自行車(chē)地圖、交通地圖和人道主義地圖,您可以根據需要選擇相應的主題地圖。
OSM主要提供四種下載方式:Simple、Overpass API、OSM Planet和Geofabrik下載。
?。c(diǎn)擊圖片進(jìn)入網(wǎng)站)
騰訊位置大數據
騰訊位置大數據官網(wǎng)包括區域人氣、位置流量、人口遷移、市政應急與決策、商鋪建設、個(gè)人出行、位置大數據應用等。
網(wǎng)址:
?。c(diǎn)擊圖片進(jìn)入網(wǎng)站)
百度地圖眼
百度地圖以海量時(shí)空大數據為基礎,結合人工智能技術(shù),為不同行業(yè)提供從宏觀(guān)到微觀(guān)的人、地、物的人口挖掘、客群分析、旅游研究、位置評估等研究。已深入應用于城市規劃、人口統計、政府、零售餐飲、廣告、文化旅游、高校智庫、公安應急等行業(yè)。
網(wǎng)址:
?。c(diǎn)擊圖片進(jìn)入網(wǎng)站)
快速獲取站點(diǎn)SU模型-CAD Mapper
這個(gè)網(wǎng)站可以在線(xiàn)生成站點(diǎn)模型,可下載的格式包括CAD、SU、RHINO。
?。c(diǎn)擊圖片進(jìn)入網(wǎng)站)
1949年與2019年的上海對比——歷史航拍
網(wǎng)站可以看到1949年到2019年、1979年到2019年的上海航拍圖對比。
網(wǎng)址:
?。c(diǎn)擊圖片進(jìn)入網(wǎng)站)
在線(xiàn)多媒體轉換工具 - CloudConvert
CloudConvert 是另一個(gè)強大的在線(xiàn)多媒體轉換工具。
支持215種文件的轉換,音頻、視頻、文檔、電子書(shū)、壓縮包、圖片、PPT、網(wǎng)頁(yè)等。反正就這么多,你自己查吧。
只需選擇本地文件(或指定網(wǎng)盤(pán)),然后選擇要轉換的文件,即可轉換。效率君實(shí)際測試了一下,速度很快。
它還有一個(gè)非常黑科技的功能。您可以選擇一個(gè)網(wǎng)盤(pán)來(lái)指定一個(gè)文件夾。添加新文件時(shí),它可以自動(dòng)轉換。沒(méi)有黑科技,真正解放了生產(chǎn)力。(但它似乎只適用于付費用戶(hù))
它還有一個(gè) Chrome 插件和一個(gè) iOS 應用程序。
網(wǎng)址:
?。c(diǎn)擊圖片進(jìn)入網(wǎng)站)
在線(xiàn)詞云生成器 - 微詞云
Mini Tag Cloud 是一個(gè)非常實(shí)用的應用程序。簡(jiǎn)單的在線(xiàn)詞云生成工具,無(wú)論你是設計師、操作員、學(xué)生還是數據分析師,都可以輕松制作出吸睛的詞云圖。
網(wǎng)址:
?。c(diǎn)擊圖片進(jìn)入網(wǎng)站)
網(wǎng)頁(yè)介紹:登錄,在首頁(yè)查看相冊?xún)热?br /> 或點(diǎn)擊網(wǎng)址直接進(jìn)入網(wǎng)頁(yè)相冊頁(yè)面
抓取網(wǎng)頁(yè)生成電子書(shū)(行行網(wǎng)電子書(shū)多線(xiàn)程爬取-擼代碼代碼非常簡(jiǎn)單(圖) )
網(wǎng)站優(yōu)化 ? 優(yōu)采云 發(fā)表了文章 ? 0 個(gè)評論 ? 79 次瀏覽 ? 2022-02-09 09:23
)
最近想找幾本電子書(shū)看,翻了翻,然后找到了一個(gè)叫周渡的網(wǎng)站,網(wǎng)站很好,簡(jiǎn)單清爽,有書(shū)很多,而且都是在百度上打開(kāi)的,網(wǎng)盤(pán)可以直接下載,更新速度也還行,就爬了上去。這篇文章可以文章學(xué)習,這么好的分享網(wǎng)站,盡量不要爬,會(huì )影響別人訪(fǎng)問(wèn)速度。需要數據的可以在我的博客下評論,我會(huì )發(fā)給你,QQ,郵箱什么的。
這個(gè)網(wǎng)站頁(yè)面的邏輯很簡(jiǎn)單。我翻閱了圖書(shū)詳情頁(yè)面,它看起來(lái)是這樣的。我們只需要循環(huán)生成這些頁(yè)面的鏈接,然后就可以爬取了。為了速度,我使用多線(xiàn)程。, 你可以試試看。如果想爬取后面的數據,就在本博客下方發(fā)表評論,不要亂搞別人的服務(wù)器。
http://www.ireadweek.com/index ... .html
http://www.ireadweek.com/index ... .html
....
星星網(wǎng)電子書(shū)多線(xiàn)程爬取-代碼
代碼非常簡(jiǎn)單。以我們之前的教程做鋪墊,用很少的代碼就可以實(shí)現完整的功能。最后將采集的內容寫(xiě)入csv文件,(什么是csv,百度知道)這段代碼是IO密集型操作,我們使用aiohttp模塊來(lái)編寫(xiě)。
步驟1
連接 URL 并啟動(dòng)線(xiàn)程。
import requests
# 導入協(xié)程模塊
import asyncio
import aiohttp
headers = {"User-Agent": "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/68.0.3440.106 Safari/537.36",
"Host": "www.ireadweek.com",
"Accept": "text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8"}
async def get_content(url):
print("正在操作:{}".format(url))
# 創(chuàng )建一個(gè)session 去獲取數據
async with aiohttp.ClientSession() as session:
async with session.get(url,headers=headers,timeout=3) as res:
if res.status == 200:
source = await res.text() # 等待獲取文本
print(source)
if __name__ == '__main__':
url_format = "http://www.ireadweek.com/index.php/bookInfo/{}.html"
full_urllist = [url_format.format(i) for i in range(1,11394)] # 11394
loop = asyncio.get_event_loop()
tasks = [get_content(url) for url in full_urllist]
results = loop.run_until_complete(asyncio.wait(tasks))
上面的代碼可以同步開(kāi)啟N個(gè)多線(xiàn)程,但是這樣很容易導致其他人的服務(wù)器癱瘓。因此,我們必須限制并發(fā)數。對于以下代碼,請嘗試將其放在指定位置。
第2步
為了處理捕獲的 Web 源代碼并提取我們想要的元素,我添加了一個(gè)使用 lxml 提取數據的方法。
def async_content(tree):
title = tree.xpath("//div[@class='hanghang-za-title']")[0].text
# 如果頁(yè)面沒(méi)有信息,直接返回即可
if title == '':
return
else:
try:
description = tree.xpath("//div[@class='hanghang-shu-content-font']")
author = description[0].xpath("p[1]/text()")[0].replace("作者:","") if description[0].xpath("p[1]/text()")[0] is not None else None
cate = description[0].xpath("p[2]/text()")[0].replace("分類(lèi):","") if description[0].xpath("p[2]/text()")[0] is not None else None
douban = description[0].xpath("p[3]/text()")[0].replace("豆瓣評分:","") if description[0].xpath("p[3]/text()")[0] is not None else None
# 這部分內容不明確,不做記錄
#des = description[0].xpath("p[5]/text()")[0] if description[0].xpath("p[5]/text()")[0] is not None else None
download = tree.xpath("//a[@class='downloads']")
except Exception as e:
print(title)
return
ls = [
title,author,cate,douban,download[0].get('href')
]
return ls
第 3 步
數據格式化后,將其保存為 csv 文件,然后收工!
print(data)
with open('hang.csv', 'a+', encoding='utf-8') as fw:
writer = csv.writer(fw)
writer.writerow(data)
print("插入成功!")
Python資源分享qun 784758214 ,內有安裝包,PDF,學(xué)習視頻,這里是Python學(xué)習者的聚集地,零基礎,進(jìn)階,都歡迎
星星網(wǎng)電子書(shū)多線(xiàn)程爬取——運行代碼并查看結果
查看全部
抓取網(wǎng)頁(yè)生成電子書(shū)(行行網(wǎng)電子書(shū)多線(xiàn)程爬取-擼代碼代碼非常簡(jiǎn)單(圖)
)
最近想找幾本電子書(shū)看,翻了翻,然后找到了一個(gè)叫周渡的網(wǎng)站,網(wǎng)站很好,簡(jiǎn)單清爽,有書(shū)很多,而且都是在百度上打開(kāi)的,網(wǎng)盤(pán)可以直接下載,更新速度也還行,就爬了上去。這篇文章可以文章學(xué)習,這么好的分享網(wǎng)站,盡量不要爬,會(huì )影響別人訪(fǎng)問(wèn)速度。需要數據的可以在我的博客下評論,我會(huì )發(fā)給你,QQ,郵箱什么的。
這個(gè)網(wǎng)站頁(yè)面的邏輯很簡(jiǎn)單。我翻閱了圖書(shū)詳情頁(yè)面,它看起來(lái)是這樣的。我們只需要循環(huán)生成這些頁(yè)面的鏈接,然后就可以爬取了。為了速度,我使用多線(xiàn)程。, 你可以試試看。如果想爬取后面的數據,就在本博客下方發(fā)表評論,不要亂搞別人的服務(wù)器。
http://www.ireadweek.com/index ... .html
http://www.ireadweek.com/index ... .html
....
星星網(wǎng)電子書(shū)多線(xiàn)程爬取-代碼
代碼非常簡(jiǎn)單。以我們之前的教程做鋪墊,用很少的代碼就可以實(shí)現完整的功能。最后將采集的內容寫(xiě)入csv文件,(什么是csv,百度知道)這段代碼是IO密集型操作,我們使用aiohttp模塊來(lái)編寫(xiě)。
步驟1
連接 URL 并啟動(dòng)線(xiàn)程。
import requests
# 導入協(xié)程模塊
import asyncio
import aiohttp
headers = {"User-Agent": "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/68.0.3440.106 Safari/537.36",
"Host": "www.ireadweek.com",
"Accept": "text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8"}
async def get_content(url):
print("正在操作:{}".format(url))
# 創(chuàng )建一個(gè)session 去獲取數據
async with aiohttp.ClientSession() as session:
async with session.get(url,headers=headers,timeout=3) as res:
if res.status == 200:
source = await res.text() # 等待獲取文本
print(source)
if __name__ == '__main__':
url_format = "http://www.ireadweek.com/index.php/bookInfo/{}.html"
full_urllist = [url_format.format(i) for i in range(1,11394)] # 11394
loop = asyncio.get_event_loop()
tasks = [get_content(url) for url in full_urllist]
results = loop.run_until_complete(asyncio.wait(tasks))
上面的代碼可以同步開(kāi)啟N個(gè)多線(xiàn)程,但是這樣很容易導致其他人的服務(wù)器癱瘓。因此,我們必須限制并發(fā)數。對于以下代碼,請嘗試將其放在指定位置。
第2步
為了處理捕獲的 Web 源代碼并提取我們想要的元素,我添加了一個(gè)使用 lxml 提取數據的方法。
def async_content(tree):
title = tree.xpath("//div[@class='hanghang-za-title']")[0].text
# 如果頁(yè)面沒(méi)有信息,直接返回即可
if title == '':
return
else:
try:
description = tree.xpath("//div[@class='hanghang-shu-content-font']")
author = description[0].xpath("p[1]/text()")[0].replace("作者:","") if description[0].xpath("p[1]/text()")[0] is not None else None
cate = description[0].xpath("p[2]/text()")[0].replace("分類(lèi):","") if description[0].xpath("p[2]/text()")[0] is not None else None
douban = description[0].xpath("p[3]/text()")[0].replace("豆瓣評分:","") if description[0].xpath("p[3]/text()")[0] is not None else None
# 這部分內容不明確,不做記錄
#des = description[0].xpath("p[5]/text()")[0] if description[0].xpath("p[5]/text()")[0] is not None else None
download = tree.xpath("//a[@class='downloads']")
except Exception as e:
print(title)
return
ls = [
title,author,cate,douban,download[0].get('href')
]
return ls
第 3 步
數據格式化后,將其保存為 csv 文件,然后收工!
print(data)
with open('hang.csv', 'a+', encoding='utf-8') as fw:
writer = csv.writer(fw)
writer.writerow(data)
print("插入成功!")
Python資源分享qun 784758214 ,內有安裝包,PDF,學(xué)習視頻,這里是Python學(xué)習者的聚集地,零基礎,進(jìn)階,都歡迎
星星網(wǎng)電子書(shū)多線(xiàn)程爬取——運行代碼并查看結果
抓取網(wǎng)頁(yè)生成電子書(shū)(《網(wǎng)絡(luò )書(shū)籍抓取器》軟件特色特色介紹-上海怡健醫學(xué) )
網(wǎng)站優(yōu)化 ? 優(yōu)采云 發(fā)表了文章 ? 0 個(gè)評論 ? 126 次瀏覽 ? 2022-02-07 03:04
)
網(wǎng)絡(luò )圖書(shū)抓取器主要用于抓取網(wǎng)絡(luò )小說(shuō)生成文本文件。它可以提取指定小說(shuō)目錄頁(yè)面的章節信息并進(jìn)行調整,然后按照章節順序抓取小說(shuō)內容,然后將它們合并在一起。爬取過(guò)程可以隨時(shí)中斷,關(guān)閉程序后可以恢復上一個(gè)任務(wù)。
網(wǎng)絡(luò )圖書(shū)抓取軟件的特點(diǎn)
1、章節調整:提取目錄后,可以進(jìn)行移動(dòng)、刪除、反轉等調整操作。調整將直接影響調整后的章節順序中的最終書(shū)籍和輸出。
2、自動(dòng)重試:爬取過(guò)程中,可能由于網(wǎng)絡(luò )因素導致爬取失敗。這個(gè)程序可能會(huì )自動(dòng)重試直到成功,或者暫時(shí)中斷爬?。ㄖ袛嗪箨P(guān)閉程序不會(huì )影響進(jìn)度),等網(wǎng)絡(luò )好了再試。
3、停止和恢復:捕捉過(guò)程可以隨時(shí)停止,退出程序后不影響進(jìn)度(章節信息會(huì )保存在記錄中,程序結束后可以恢復捕捉下次運行。注意:需要先用停止鍵中斷,然后退出程序,如果直接退出,將無(wú)法恢復)。
4、一鍵抓?。河址Q(chēng)“傻瓜模式”,基本可以實(shí)現全自動(dòng)抓取合并功能,直接輸出最終的文本文件。前面可能需要輸入最基本的URL、save bit等信息(會(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ū):可以在設置文件中添加每章名稱(chēng)的前綴和后綴,為后期制作電子書(shū)的編目帶來(lái)極大的方便。
查看全部
抓取網(wǎng)頁(yè)生成電子書(shū)(《網(wǎng)絡(luò )書(shū)籍抓取器》軟件特色特色介紹-上海怡健醫學(xué)
)
網(wǎng)絡(luò )圖書(shū)抓取器主要用于抓取網(wǎng)絡(luò )小說(shuō)生成文本文件。它可以提取指定小說(shuō)目錄頁(yè)面的章節信息并進(jìn)行調整,然后按照章節順序抓取小說(shuō)內容,然后將它們合并在一起。爬取過(guò)程可以隨時(shí)中斷,關(guān)閉程序后可以恢復上一個(gè)任務(wù)。

網(wǎng)絡(luò )圖書(shū)抓取軟件的特點(diǎn)
1、章節調整:提取目錄后,可以進(jìn)行移動(dòng)、刪除、反轉等調整操作。調整將直接影響調整后的章節順序中的最終書(shū)籍和輸出。
2、自動(dòng)重試:爬取過(guò)程中,可能由于網(wǎng)絡(luò )因素導致爬取失敗。這個(gè)程序可能會(huì )自動(dòng)重試直到成功,或者暫時(shí)中斷爬?。ㄖ袛嗪箨P(guān)閉程序不會(huì )影響進(jìn)度),等網(wǎng)絡(luò )好了再試。
3、停止和恢復:捕捉過(guò)程可以隨時(shí)停止,退出程序后不影響進(jìn)度(章節信息會(huì )保存在記錄中,程序結束后可以恢復捕捉下次運行。注意:需要先用停止鍵中斷,然后退出程序,如果直接退出,將無(wú)法恢復)。
4、一鍵抓?。河址Q(chēng)“傻瓜模式”,基本可以實(shí)現全自動(dòng)抓取合并功能,直接輸出最終的文本文件。前面可能需要輸入最基本的URL、save bit等信息(會(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ū):可以在設置文件中添加每章名稱(chēng)的前綴和后綴,為后期制作電子書(shū)的編目帶來(lái)極大的方便。
抓取網(wǎng)頁(yè)生成電子書(shū)(《修真小主播》使用Scrapy抓取電子書(shū)爬蟲(chóng)思路怎么抓取數據 )
網(wǎng)站優(yōu)化 ? 優(yōu)采云 發(fā)表了文章 ? 0 個(gè)評論 ? 144 次瀏覽 ? 2022-02-05 17:04
)
使用 Scrapy 抓取電子書(shū)
爬行動(dòng)物的想法
如何抓取數據,首先我們需要看看從哪里獲取數據,打開(kāi)“小耕主播”的頁(yè)面,如下:
有一個(gè)目錄選項卡,單擊此選項卡可以查看目錄。使用瀏覽器的元素查看工具,我們可以找到每章的目錄和相關(guān)信息。根據這些信息,我們可以爬取到特定頁(yè)面:
獲取章節地址
現在我們打開(kāi) xzxzb.py 文件,也就是我們剛剛創(chuàng )建的爬蟲(chóng):
# -*- coding: utf-8 -*-
import scrapy
'''
更多Python學(xué)習資料以及源碼教程資料,可以在群1136201545免費獲取
'''
class 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在讓我們編寫(xiě)處理目錄數據的代碼,首先爬取小說(shuō)首頁(yè)獲取目錄列表:
def parse(self, response):
pages = response.xpath('//div[@id="j-catalogWrap"]//ul[@class="cf"]/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)知識請自行學(xué)習,看上面代碼,首先我們通過(guò)ID獲取目錄框,獲取類(lèi)cf獲取目錄列表:
pages = response.xpath('//div[@id="j-catalogWrap"]//ul[@class="cf"]/li')
接下來(lái)遍歷子節點(diǎn),查詢(xún)li標簽中a子節點(diǎn)的href屬性,最后打印出來(lái):
for page in pages:
url = page.xpath('./child::a/attribute::href').extract()
print url
這樣,可以說(shuō)爬取章節路徑的小爬蟲(chóng)已經(jīng)寫(xiě)好了。使用以下命令運行xzxzb爬蟲(chóng)查看結果:
scrapy crawl xzxzb
這時(shí)候我們的程序可能會(huì )出現如下錯誤:
…
ImportError: No module named win32api
…
只需運行以下語(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ě)了,但是我們的目的不僅如此,我們會(huì )使用這些地址來(lái)爬取內容:
章節頁(yè)面分析
接下來(lái)我們分析章節頁(yè)面,我們要從中獲取標題和內容。
如果說(shuō)用于章節信息爬取的parser方法,那么我們可以寫(xiě)一個(gè)爬取每個(gè)章節內容的方法,比如:parser_chapter,先看章節頁(yè)面的具體情況:
可以看到,章節的全部?jì)热菰陬?lèi)名main-text-wrap的div標簽中,標題是類(lèi)名j_chapterName的h3標簽,具體內容是類(lèi)名的div標簽讀取內容 j_readContent。
嘗試打印出來(lái):
# -*- coding: utf-8 -*-
import scrapy
class 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[@class="cf"]/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[@class="main-text-wrap"]//h3[@class="j_chapterName"]/text()').extract_first().strip()
content = response.xpath('//div[@class="main-text-wrap"]//div[@class="read-content j_readContent"]').extract_first().strip()
print title
# print content
pass
上一步我們得到了一個(gè)章節地址,這是從輸出內容的相對路徑,所以我們使用了yield response.follow(url, callback=self.parse_chapter),第二個(gè)參數是一個(gè)回調函數來(lái)處理章節頁(yè)面,爬取到章節頁(yè)面后,我們解析頁(yè)面并將標題保存到文件中。
next_page = response.urljoin(url)
yield scrapy.Request(next_page, callback=self.parse_chapter)
與使用 response.follow 不同,scrapy.Request 需要通過(guò)相對路徑來(lái)構造絕對路徑。Response.follow 可以直接使用相對路徑,所以不需要調用 urljoin 方法。
注意response.follow直接返回一個(gè)Request實(shí)例,可以直接通過(guò)yield返回。
獲取數據后,將其存儲。由于我們想要一個(gè) html 頁(yè)面,我們可以按標題存儲它。代碼如下:
def parse_chapter(self, response):
title = response.xpath('//div[@class="main-text-wrap"]//h3[@class="j_chapterName"]/text()').extract_first().strip()
content = response.xpath('//div[@class="main-text-wrap"]//div[@class="read-content j_readContent"]').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)化。
數據管理
首先,我們爬取的章節頁(yè)面的排序不是很好,手動(dòng)排列太費時(shí)間精力;另外,章節內容收錄很多多余的東西,閱讀體驗不好,需要優(yōu)化內容的排版和可讀性。
我們先對章節進(jìn)行排序,因為目錄中的章節列表是按順序排列的,所以只需在下載頁(yè)面名稱(chēng)中加上序號即可。
但是保存網(wǎng)頁(yè)的代碼是一個(gè)回調函數,只有在處理目錄時(shí)才能確定順序?;卣{函數怎么知道順序?因此,我們需要告訴回調函數它處理章節的序號,并且我們需要向回調函數傳遞參數。修改后的代碼如下:
'''
更多Python學(xué)習資料以及源碼教程資料,可以在群1136201545免費獲取
'''
def parse(self, response):
pages = response.xpath('//div[@id="j-catalogWrap"]//ul[@class="cf"]/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[@class="main-text-wrap"]//h3[@class="j_chapterName"]/text()').extract_first().strip()
content = response.xpath('//div[@class="main-text-wrap"]//div[@class="read-content j_readContent"]').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 創(chuàng )建電子書(shū)
加載html文件
要制作 ePub 電子書(shū),我們首先通過(guò) Sigil 將抓取的文件加載到程序中,然后在“添加文件”對話(huà)框中選擇所有文件:
制作目錄
當文件中存在 HTML h 標簽時(shí),單擊 Generate Directory 按鈕自動(dòng)生成目錄。我們在之前的數據捕獲中自動(dòng)添加了 h1 標簽:
做一個(gè)封面
封面本質(zhì)上是HTML,可以編輯或者從頁(yè)面爬取,所以我留給你自己實(shí)現。
查看全部
抓取網(wǎng)頁(yè)生成電子書(shū)(《修真小主播》使用Scrapy抓取電子書(shū)爬蟲(chóng)思路怎么抓取數據
)
使用 Scrapy 抓取電子書(shū)
爬行動(dòng)物的想法
如何抓取數據,首先我們需要看看從哪里獲取數據,打開(kāi)“小耕主播”的頁(yè)面,如下:

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

獲取章節地址
現在我們打開(kāi) xzxzb.py 文件,也就是我們剛剛創(chuàng )建的爬蟲(chóng):
# -*- coding: utf-8 -*-
import scrapy
'''
更多Python學(xué)習資料以及源碼教程資料,可以在群1136201545免費獲取
'''
class 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在讓我們編寫(xiě)處理目錄數據的代碼,首先爬取小說(shuō)首頁(yè)獲取目錄列表:
def parse(self, response):
pages = response.xpath('//div[@id="j-catalogWrap"]//ul[@class="cf"]/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)知識請自行學(xué)習,看上面代碼,首先我們通過(guò)ID獲取目錄框,獲取類(lèi)cf獲取目錄列表:
pages = response.xpath('//div[@id="j-catalogWrap"]//ul[@class="cf"]/li')
接下來(lái)遍歷子節點(diǎn),查詢(xún)li標簽中a子節點(diǎn)的href屬性,最后打印出來(lái):
for page in pages:
url = page.xpath('./child::a/attribute::href').extract()
print url
這樣,可以說(shuō)爬取章節路徑的小爬蟲(chóng)已經(jīng)寫(xiě)好了。使用以下命令運行xzxzb爬蟲(chóng)查看結果:
scrapy crawl xzxzb
這時(shí)候我們的程序可能會(huì )出現如下錯誤:
…
ImportError: No module named win32api
…
只需運行以下語(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ě)了,但是我們的目的不僅如此,我們會(huì )使用這些地址來(lái)爬取內容:
章節頁(yè)面分析
接下來(lái)我們分析章節頁(yè)面,我們要從中獲取標題和內容。
如果說(shuō)用于章節信息爬取的parser方法,那么我們可以寫(xiě)一個(gè)爬取每個(gè)章節內容的方法,比如:parser_chapter,先看章節頁(yè)面的具體情況:

可以看到,章節的全部?jì)热菰陬?lèi)名main-text-wrap的div標簽中,標題是類(lèi)名j_chapterName的h3標簽,具體內容是類(lèi)名的div標簽讀取內容 j_readContent。
嘗試打印出來(lái):
# -*- coding: utf-8 -*-
import scrapy
class 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[@class="cf"]/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[@class="main-text-wrap"]//h3[@class="j_chapterName"]/text()').extract_first().strip()
content = response.xpath('//div[@class="main-text-wrap"]//div[@class="read-content j_readContent"]').extract_first().strip()
print title
# print content
pass
上一步我們得到了一個(gè)章節地址,這是從輸出內容的相對路徑,所以我們使用了yield response.follow(url, callback=self.parse_chapter),第二個(gè)參數是一個(gè)回調函數來(lái)處理章節頁(yè)面,爬取到章節頁(yè)面后,我們解析頁(yè)面并將標題保存到文件中。
next_page = response.urljoin(url)
yield scrapy.Request(next_page, callback=self.parse_chapter)
與使用 response.follow 不同,scrapy.Request 需要通過(guò)相對路徑來(lái)構造絕對路徑。Response.follow 可以直接使用相對路徑,所以不需要調用 urljoin 方法。
注意response.follow直接返回一個(gè)Request實(shí)例,可以直接通過(guò)yield返回。
獲取數據后,將其存儲。由于我們想要一個(gè) html 頁(yè)面,我們可以按標題存儲它。代碼如下:
def parse_chapter(self, response):
title = response.xpath('//div[@class="main-text-wrap"]//h3[@class="j_chapterName"]/text()').extract_first().strip()
content = response.xpath('//div[@class="main-text-wrap"]//div[@class="read-content j_readContent"]').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)化。
數據管理
首先,我們爬取的章節頁(yè)面的排序不是很好,手動(dòng)排列太費時(shí)間精力;另外,章節內容收錄很多多余的東西,閱讀體驗不好,需要優(yōu)化內容的排版和可讀性。
我們先對章節進(jìn)行排序,因為目錄中的章節列表是按順序排列的,所以只需在下載頁(yè)面名稱(chēng)中加上序號即可。
但是保存網(wǎng)頁(yè)的代碼是一個(gè)回調函數,只有在處理目錄時(shí)才能確定順序?;卣{函數怎么知道順序?因此,我們需要告訴回調函數它處理章節的序號,并且我們需要向回調函數傳遞參數。修改后的代碼如下:
'''
更多Python學(xué)習資料以及源碼教程資料,可以在群1136201545免費獲取
'''
def parse(self, response):
pages = response.xpath('//div[@id="j-catalogWrap"]//ul[@class="cf"]/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[@class="main-text-wrap"]//h3[@class="j_chapterName"]/text()').extract_first().strip()
content = response.xpath('//div[@class="main-text-wrap"]//div[@class="read-content j_readContent"]').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 創(chuàng )建電子書(shū)
加載html文件
要制作 ePub 電子書(shū),我們首先通過(guò) Sigil 將抓取的文件加載到程序中,然后在“添加文件”對話(huà)框中選擇所有文件:

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

做一個(gè)封面

封面本質(zhì)上是HTML,可以編輯或者從頁(yè)面爬取,所以我留給你自己實(shí)現。
抓取網(wǎng)頁(yè)生成電子書(shū)(Requests-html快速指南發(fā)送一個(gè)GET請求:html的方便!)
網(wǎng)站優(yōu)化 ? 優(yōu)采云 發(fā)表了文章 ? 0 個(gè)評論 ? 107 次瀏覽 ? 2022-02-05 17:04
安裝
安裝很簡(jiǎn)單,只需執行:
pip install requests-html
而已。
分析頁(yè)面結構
通過(guò)在瀏覽器中查看元素,可以發(fā)現這本電子書(shū)網(wǎng)站是用WordPress搭建的,首頁(yè)列表元素非常簡(jiǎn)潔利落。
所以我們可以通過(guò)查找 .entry-title > a 得到所有圖書(shū)詳情頁(yè)的鏈接,然后我們到詳情頁(yè)找到下載鏈接,如下圖
可以發(fā)現.download-links > a中的鏈接就是該書(shū)的下載鏈接?;氐搅斜眄?yè)面,可以發(fā)現站點(diǎn)有700多個(gè)頁(yè)面,所以我們可以循環(huán)列表獲取所有的下載鏈接。
Requests-html 快速指南
發(fā)送 GET 請求:
from requests_html import HTMLSession
session = HTMLSession()
r = session.get('https://python.org/')
Requests-html 的方便之處在于它解析 html 就像使用 jQuery 一樣容易,例如:
# 獲取頁(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))
運行結果:
以上就是我用Python抓到的7000多本電子書(shū)的詳細講解和整合。我希望它對你有幫助。如有任何問(wèn)題,請給我留言,小編會(huì )及時(shí)回復您。還要感謝大家對腳本之家網(wǎng)站的支持! 查看全部
抓取網(wǎng)頁(yè)生成電子書(shū)(Requests-html快速指南發(fā)送一個(gè)GET請求:html的方便!)
安裝
安裝很簡(jiǎn)單,只需執行:
pip install requests-html
而已。
分析頁(yè)面結構
通過(guò)在瀏覽器中查看元素,可以發(fā)現這本電子書(shū)網(wǎng)站是用WordPress搭建的,首頁(yè)列表元素非常簡(jiǎn)潔利落。
所以我們可以通過(guò)查找 .entry-title > a 得到所有圖書(shū)詳情頁(yè)的鏈接,然后我們到詳情頁(yè)找到下載鏈接,如下圖
可以發(fā)現.download-links > a中的鏈接就是該書(shū)的下載鏈接?;氐搅斜眄?yè)面,可以發(fā)現站點(diǎn)有700多個(gè)頁(yè)面,所以我們可以循環(huán)列表獲取所有的下載鏈接。
Requests-html 快速指南
發(fā)送 GET 請求:
from requests_html import HTMLSession
session = HTMLSession()
r = session.get('https://python.org/')
Requests-html 的方便之處在于它解析 html 就像使用 jQuery 一樣容易,例如:
# 獲取頁(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))
運行結果:
以上就是我用Python抓到的7000多本電子書(shū)的詳細講解和整合。我希望它對你有幫助。如有任何問(wèn)題,請給我留言,小編會(huì )及時(shí)回復您。還要感謝大家對腳本之家網(wǎng)站的支持!
抓取網(wǎng)頁(yè)生成電子書(shū)(主流電子書(shū)格式大家最為熟知的電子書(shū)熟知格式(圖))
網(wǎng)站優(yōu)化 ? 優(yōu)采云 發(fā)表了文章 ? 0 個(gè)評論 ? 120 次瀏覽 ? 2022-02-05 17:03
編者注(@Minja):在編寫(xiě)文章時(shí),經(jīng)常需要引用和回溯。對各種存檔和剪輯工具的不滿(mǎn),讓我萌生了自己制作電子書(shū)的念頭。正好@Spencerwoo在這方面有扎實(shí)的折騰能力,于是擺脫了他,研究了一套簡(jiǎn)單易行的方法,寫(xiě)成文章分享給大家。
雖然網(wǎng)絡(luò )世界有很多有價(jià)值的文章,但并不是每一次閱讀體驗都令人滿(mǎn)意。如果你想擁有出色的文章閱讀體驗,至少要確保我們正在閱讀文章:
很多時(shí)候,我們依靠瀏覽器的閱讀方式,或者Pocket和RSS客戶(hù)端來(lái)閱讀。但是,閱讀模式后期無(wú)法整理,而且大部分閱讀服務(wù)的全文搜索功能都需要付費,網(wǎng)上的文章可能一天都找不到?;蛟S,將 文章 保存為本地電子書(shū)是一種更方便的回顧選擇。
如果我們在網(wǎng)上看到一個(gè)網(wǎng)頁(yè)形式的電子書(shū),想直接把整個(gè)網(wǎng)頁(yè)保存到本地(俗稱(chēng)“剪輯”),那簡(jiǎn)直是麻煩大了?,F有的網(wǎng)頁(yè)剪輯工具不僅會(huì )攜帶無(wú)用的、影響體驗的廣告和其他冗余區域,還會(huì )丟失重要和有價(jià)值的內容。不僅如此,幾乎沒(méi)有工具可以輕松抓取圖片并自定義保存到本地的文章樣式。那么,讓我向您介紹一組免費制作個(gè)性化電子書(shū)的方法。
本文主要使用開(kāi)源工具 Pandoc。對于需要MOBI或PDF格式電子書(shū)的讀者,文章后半部分也有簡(jiǎn)單的轉換方法。
ePub 電子書(shū)的突破
目前主流的電子書(shū)格式有很多,但本文主要推薦ePub,它比較開(kāi)放統一,可以很方便的轉換成其他格式。
主流電子書(shū)格式
最廣為人知的電子書(shū)格式可能是純文本TXT格式,但TXT之所以被稱(chēng)為“純文本”,是因為它不支持章節、圖片、封面和超鏈接。為了讓電子書(shū)有格式、有圖片、有內容,目前常見(jiàn)的電子書(shū)通常有PDF、ePub、MOBI三種格式。在:
我們文章文章的主要目的是利用接下來(lái)要介紹的工具,制作一個(gè)內嵌圖片、目錄、外觀(guān)清晰美觀(guān)的電子書(shū)。相對而言,ePub 更加靈活,有完整的目錄和自定義布局,也很容易轉換成其他兩種格式。本文從它開(kāi)始。
制作的電子書(shū)效果
[…] 查看全部
抓取網(wǎng)頁(yè)生成電子書(shū)(主流電子書(shū)格式大家最為熟知的電子書(shū)熟知格式(圖))
編者注(@Minja):在編寫(xiě)文章時(shí),經(jīng)常需要引用和回溯。對各種存檔和剪輯工具的不滿(mǎn),讓我萌生了自己制作電子書(shū)的念頭。正好@Spencerwoo在這方面有扎實(shí)的折騰能力,于是擺脫了他,研究了一套簡(jiǎn)單易行的方法,寫(xiě)成文章分享給大家。
雖然網(wǎng)絡(luò )世界有很多有價(jià)值的文章,但并不是每一次閱讀體驗都令人滿(mǎn)意。如果你想擁有出色的文章閱讀體驗,至少要確保我們正在閱讀文章:
很多時(shí)候,我們依靠瀏覽器的閱讀方式,或者Pocket和RSS客戶(hù)端來(lái)閱讀。但是,閱讀模式后期無(wú)法整理,而且大部分閱讀服務(wù)的全文搜索功能都需要付費,網(wǎng)上的文章可能一天都找不到?;蛟S,將 文章 保存為本地電子書(shū)是一種更方便的回顧選擇。
如果我們在網(wǎng)上看到一個(gè)網(wǎng)頁(yè)形式的電子書(shū),想直接把整個(gè)網(wǎng)頁(yè)保存到本地(俗稱(chēng)“剪輯”),那簡(jiǎn)直是麻煩大了?,F有的網(wǎng)頁(yè)剪輯工具不僅會(huì )攜帶無(wú)用的、影響體驗的廣告和其他冗余區域,還會(huì )丟失重要和有價(jià)值的內容。不僅如此,幾乎沒(méi)有工具可以輕松抓取圖片并自定義保存到本地的文章樣式。那么,讓我向您介紹一組免費制作個(gè)性化電子書(shū)的方法。
本文主要使用開(kāi)源工具 Pandoc。對于需要MOBI或PDF格式電子書(shū)的讀者,文章后半部分也有簡(jiǎn)單的轉換方法。
ePub 電子書(shū)的突破
目前主流的電子書(shū)格式有很多,但本文主要推薦ePub,它比較開(kāi)放統一,可以很方便的轉換成其他格式。

主流電子書(shū)格式
最廣為人知的電子書(shū)格式可能是純文本TXT格式,但TXT之所以被稱(chēng)為“純文本”,是因為它不支持章節、圖片、封面和超鏈接。為了讓電子書(shū)有格式、有圖片、有內容,目前常見(jiàn)的電子書(shū)通常有PDF、ePub、MOBI三種格式。在:
我們文章文章的主要目的是利用接下來(lái)要介紹的工具,制作一個(gè)內嵌圖片、目錄、外觀(guān)清晰美觀(guān)的電子書(shū)。相對而言,ePub 更加靈活,有完整的目錄和自定義布局,也很容易轉換成其他兩種格式。本文從它開(kāi)始。

制作的電子書(shū)效果
[…]
抓取網(wǎng)頁(yè)生成電子書(shū)(網(wǎng)絡(luò )書(shū)籍抓取器是一款幫助用戶(hù)下載指定網(wǎng)頁(yè)的某)
網(wǎng)站優(yōu)化 ? 優(yōu)采云 發(fā)表了文章 ? 0 個(gè)評論 ? 196 次瀏覽 ? 2022-02-05 03:22
在線(xiàn)圖書(shū)抓取器是一款可以幫助用戶(hù)下載指定網(wǎng)頁(yè)的某本書(shū)和某章的軟件。通過(guò)在線(xiàn)圖書(shū)抓取器,可以快速下載小說(shuō)。同時(shí)軟件支持斷點(diǎn)續傳功能,非常方便??梢韵螺d使用。
網(wǎng)絡(luò )圖書(shū)采集器功能介紹
可以提取指定小說(shuō)目錄頁(yè)面的章節信息并進(jìn)行調整,然后按照章節順序抓取小說(shuō)內容,在最合適的時(shí)候進(jìn)行合并。爬取過(guò)程可以隨時(shí)中斷,關(guān)閉程序后可以恢復上一個(gè)任務(wù)。
網(wǎng)絡(luò )圖書(shū)抓取軟件的特點(diǎn)
1、章節調整:提取目錄后,可以進(jìn)行移動(dòng)、刪除、反轉等調整操作。調整將直接影響調整后的章節順序中的最終書(shū)籍和輸出。
2、自動(dòng)重試:爬取過(guò)程中,可能由于網(wǎng)絡(luò )因素導致爬取失敗。這個(gè)程序可能會(huì )自動(dòng)重試直到成功,或者暫時(shí)中斷爬?。ㄖ袛嗪箨P(guān)閉程序不會(huì )影響進(jìn)度),等網(wǎng)絡(luò )好了再試。
3、停止和恢復:可以隨時(shí)停止捕捉過(guò)程,退出程序后不影響進(jìn)度(章節信息會(huì )保存在記錄中,程序結束后可以恢復捕捉下次運行。注意:需要先用停止鍵中斷,然后退出程序,如果直接退出,將無(wú)法恢復)。
4、一鍵抓?。河址Q(chēng)“傻瓜模式”,基本可以實(shí)現全自動(dòng)抓取合并功能,直接輸出最終的文本文件。前面可能需要輸入最基本的URL、save bit等信息(會(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ū):可以在設置文件中添加每章名稱(chēng)的前綴和后綴,為后期制作電子書(shū)的編目帶來(lái)極大的方便。
如何使用在線(xiàn)圖書(shū)抓取器
一、首先進(jìn)入你要下載的小說(shuō)的網(wǎng)頁(yè)。
二、輸入書(shū)名,點(diǎn)擊目錄提取。
三、設置保存路徑,點(diǎn)擊Start Grab開(kāi)始下載。 查看全部
抓取網(wǎng)頁(yè)生成電子書(shū)(網(wǎng)絡(luò )書(shū)籍抓取器是一款幫助用戶(hù)下載指定網(wǎng)頁(yè)的某)
在線(xiàn)圖書(shū)抓取器是一款可以幫助用戶(hù)下載指定網(wǎng)頁(yè)的某本書(shū)和某章的軟件。通過(guò)在線(xiàn)圖書(shū)抓取器,可以快速下載小說(shuō)。同時(shí)軟件支持斷點(diǎn)續傳功能,非常方便??梢韵螺d使用。

網(wǎng)絡(luò )圖書(shū)采集器功能介紹
可以提取指定小說(shuō)目錄頁(yè)面的章節信息并進(jìn)行調整,然后按照章節順序抓取小說(shuō)內容,在最合適的時(shí)候進(jìn)行合并。爬取過(guò)程可以隨時(shí)中斷,關(guān)閉程序后可以恢復上一個(gè)任務(wù)。
網(wǎng)絡(luò )圖書(shū)抓取軟件的特點(diǎn)
1、章節調整:提取目錄后,可以進(jìn)行移動(dòng)、刪除、反轉等調整操作。調整將直接影響調整后的章節順序中的最終書(shū)籍和輸出。
2、自動(dòng)重試:爬取過(guò)程中,可能由于網(wǎng)絡(luò )因素導致爬取失敗。這個(gè)程序可能會(huì )自動(dòng)重試直到成功,或者暫時(shí)中斷爬?。ㄖ袛嗪箨P(guān)閉程序不會(huì )影響進(jìn)度),等網(wǎng)絡(luò )好了再試。
3、停止和恢復:可以隨時(shí)停止捕捉過(guò)程,退出程序后不影響進(jìn)度(章節信息會(huì )保存在記錄中,程序結束后可以恢復捕捉下次運行。注意:需要先用停止鍵中斷,然后退出程序,如果直接退出,將無(wú)法恢復)。
4、一鍵抓?。河址Q(chēng)“傻瓜模式”,基本可以實(shí)現全自動(dòng)抓取合并功能,直接輸出最終的文本文件。前面可能需要輸入最基本的URL、save bit等信息(會(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ū):可以在設置文件中添加每章名稱(chēng)的前綴和后綴,為后期制作電子書(shū)的編目帶來(lái)極大的方便。
如何使用在線(xiàn)圖書(shū)抓取器
一、首先進(jìn)入你要下載的小說(shuō)的網(wǎng)頁(yè)。
二、輸入書(shū)名,點(diǎn)擊目錄提取。

三、設置保存路徑,點(diǎn)擊Start Grab開(kāi)始下載。
抓取網(wǎng)頁(yè)生成電子書(shū)(基于Node.js開(kāi)發(fā)的開(kāi)源工具,GitBook版)
網(wǎng)站優(yōu)化 ? 優(yōu)采云 發(fā)表了文章 ? 0 個(gè)評論 ? 107 次瀏覽 ? 2022-02-04 07:14
GitBook 是一個(gè)基于 Node.js 開(kāi)發(fā)的開(kāi)源工具。它可以通過(guò)命令行創(chuàng )建電子書(shū)項目,然后使用MarkDown編寫(xiě)電子書(shū)內容,然后生成PDF、ePub、mobi格式的電子書(shū),或者生成靜態(tài)站點(diǎn)。
此外,您還可以使用 Git 命令來(lái)管理電子書(shū)版本。如果你是 GitHub 的重度用戶(hù),你也可以將你的 GitBook 賬號和你的 GitHub 賬號綁定,這樣無(wú)論兩邊修改什么,都可以相互同步。
一、安裝 Node.js
由于 GitBook 是基于 Node.js 開(kāi)發(fā)的,所以它依賴(lài)于 Node.js 環(huán)境。如果您的系統沒(méi)有安裝Node.js,請根據您使用的系統點(diǎn)擊下方鏈接下載對應版本。如果已經(jīng)安裝,請跳過(guò)此步驟。
Node.js 下載頁(yè)面:
Node.js的Windows版和Mac版都是常規安裝包,下一步即可安裝。Luunix版本可以參考官方文檔通過(guò)yum、apt-get等工具安裝,也可以通過(guò)源碼包安裝,如下圖:
$ wget https://nodejs.org/dist/v5.4.1/node-v5.4.1.tar.gz
$ tar zxvf node-v5.4.1.tar.gz
$ cd node-v5.4.1
$ ./configure
$ make
$ make install
二、安裝 GitBook
打開(kāi)命令提示符(在 Mac 上打開(kāi)終端)并輸入以下命令安裝 GitBook:
$ npm install gitbook-cli -g
由于網(wǎng)絡(luò )原因,安裝時(shí)間可能會(huì )較長(cháng),請耐心等待安裝完成。安裝完成后,可以輸入以下命令,通過(guò)查看GitBook的版本來(lái)判斷是否安裝成功:
$ gitbook -V
三、創(chuàng )建一個(gè)電子書(shū)項目
新建目錄,進(jìn)入目錄,用gitbook命令初始化電子書(shū)項目。例如,現在讓我們創(chuàng )建一個(gè)名為“MyFirstBook”的空白電子書(shū)項目,如下所示:
$ mkdir MyFirstBook
$ cd MyFirstBook
$ gitbook init
四、編輯電子書(shū)內容
初始化目錄中會(huì )出現“README.md(電子書(shū)介紹文件)”和“SUMMARY.md(導航目錄文件)”兩個(gè)基本文件。此外,您還可以手動(dòng)創(chuàng )建其他“Glossary.md(書(shū)末詞匯)”、“book.json(電子書(shū)配置文件)”??梢愿鶕约旱南埠脼殡娮訒?shū)的文本內容新建一個(gè).md文件,比如“chapter01.md”,然后使用MarkDown編寫(xiě)具體的文本內容。這些文件將在下面詳細描述。
1、README.md
這個(gè)文件是一個(gè)簡(jiǎn)單的電子書(shū)介紹,你可以對你制作的電子書(shū)做一個(gè)簡(jiǎn)單的描述:
# 簡(jiǎn)介
這是我的第一本使用 GitBook 制作的電子書(shū)。
2、SUMMARY.md
這是電子書(shū)的導航目錄文件。每當添加章節文件時(shí),都需要在該文件中添加一條記錄。對于 Kindle 書(shū)籍,該文件呈現的目錄結構是開(kāi)頭的目錄內容和“轉到”目錄導航。
# Summary
* [簡(jiǎn)介](README.md)
* [第一章](section1/README.md)
* [第二章](section2/README.md)
如果需要“小節”,可以使用Tab縮進(jìn)(最多支持三級標題),如下:
# Summary
* [第一章](section1/README.md)
* [第一節](section1/example1.md)
* [第二節](section1/example2.md)
* [第二章](section2/README.md)
* [第一節](section2/example1.md)
3、詞匯表.md
電子書(shū)內容中需要解釋的術(shù)語(yǔ)可以在本文檔中定義。詞匯表將放在電子書(shū)的末尾。其格式如下:
# 電子書(shū)
電子書(shū)是指將文字、圖片、聲音、影像等訊息內容數字化的出版物和植入或下載數字化文字、圖片、聲音、影像等訊息內容的集存儲和顯示終端于一體的手持閱讀器。
# Kindle
Amazon Kindle 是由 Amazon 設計和銷(xiāo)售的電子書(shū)閱讀器(以及軟件平臺)。用戶(hù)可以通過(guò)無(wú)線(xiàn)網(wǎng)絡(luò )使用 Amazon Kindle 購買(mǎi)、下載和閱讀電子書(shū)、報紙、雜志、博客及其他電子媒體。
4、book.json
“book.json”是電子書(shū)的配置文件,可以看作是電子書(shū)的“原創(chuàng )數據”,如書(shū)名、描述、isbn、語(yǔ)言、方向、風(fēng)格等。點(diǎn)此查看更多信息。其基本結構如下:
{
"title": "我的第一本電子書(shū)",
"description": "用 GitBook 制作的第一本電子書(shū)!",
"isbn": "978-3-16-148410-0",
"language": "zh-tw",
"direction": "ltr"
}
5、普通章節.md文件
普通章節 .md 文件可以使用您喜歡的文本編輯器編寫(xiě)。MarkDown的編寫(xiě),可以點(diǎn)擊這里查看相關(guān)示例。每次編寫(xiě) .md 文件時(shí),不要忘記在“SUMMARY.md”文件中添加一條記錄。
6、電子書(shū)封面圖片
GitBook 幫助文檔建議封面圖片大小為 1800*2360 像素,并遵循以下建議:
圖片格式為jpg格式。將圖片重命名為“cover.jpg”,放入電子書(shū)項目文件夾。
五、預覽電子書(shū)內容
電子書(shū)內容編寫(xiě)完成后,可以使用瀏覽器進(jìn)行預覽。首先輸入以下命令,從 .md 文件生成 HTML 文檔:
$ gitbook build
構建完成后,eBook項目目錄中會(huì )出現一個(gè)名為“_book”的文件夾。進(jìn)入文件夾,直接用瀏覽器打開(kāi)“index.html”,或者先輸入以下命令:
$ gitbook serve
然后在瀏覽器中輸入“:4000”預覽電子書(shū)的內容,按Ctrl+C結束預覽。
六、生成電子書(shū)文件
確認電子書(shū)沒(méi)有問(wèn)題后,輸入以下命令即可生成mobi電子書(shū):
$ gitbook mobi ./ ./MyFirstBook.mobi
如果出現以下錯誤信息,則說(shuō)明您尚未安裝 Calibre。由于 GitBook 依賴(lài) Calibre 的 ebook-convert 生成 mobi 格式的電子書(shū),請先下載并安裝 Calibre。
Error: Need to install ebook-convert from Calibre
Calibre安裝后,對于Mac OS X系統,需要先設置軟鏈接:
$ ln -s /Applications/calibre.app/Contents/MacOS/ebook-convert /usr/local/bin
再次運行轉換命令,生成 mobi 格式的電子書(shū)。
七、將項目托管到
以上所有步驟均在本地執行。如果需要實(shí)現電子書(shū)的版本管理,或者將電子書(shū)發(fā)布到網(wǎng)絡(luò ),也可以通過(guò) Git 命令在 Git 上托管本地項目。
1、注冊一個(gè)賬號
首先去注冊一個(gè)帳戶(hù)并創(chuàng )建一個(gè)新項目。在“設置”頁(yè)面獲取“Git URL(Git鏈接)”,鏈接如下:
https://git.gitbook.com/kindlefere/myfirstbook.git
2、安裝 Git 軟件
在開(kāi)始以下步驟之前,請確保您的系統上安裝了 Git。一般Mac和Lunix都自帶Git功能,可以在終端運行g(shù)it --version查看Git版本。Windows一般不自帶Git功能,請先點(diǎn)擊這里下載安裝。
安裝適用于 Windows 的 Git 時(shí),您將看到兩個(gè)選項:“僅從 Git Bash 使用 Git”和“從 Windows 命令提示符使用 Git”。前者是指在程序自帶的單獨終端中使用Git。后者意味著(zhù)你可以通過(guò)系統自帶的“命令提示符”來(lái)使用 Git 命令。大家可以根據自己的喜好來(lái)選擇,我個(gè)人推薦使用后者。
3、上傳現有的電子書(shū)項目
在本地新建一個(gè)文件夾,通過(guò)Git命令在本地抓取新創(chuàng )建的遠程項目,如下圖:
$ mkdir MyFirstBook-Git
$ cd MyFirstBook-Git
$ git init
$ git pull https://git.gitbook.com/kindlefere/myfirstbook.git
然后將本地項目“MyFirstBook”的所有內容復制到新創(chuàng )建的文件夾中,如上面的“MyFirstBook-Git”。然后使用Git命令將本地項目上傳到遠程,如下:
$ git add -A
$ git commit -m "提交說(shuō)明"
$ git remote add gitbook https://git.gitbook.com/kindlefere/myfirstbook.git
$ git push -u gitbook master
在此期間,您需要輸入您的 GitBook 注冊郵箱和密碼。以后修改內容后,只需要輸入如下Git命令即可:
$ git add [修改的文件]
$ git commit -m "提交說(shuō)明"
$ git push -u gitbook master
八、將項目鏈接到 GitHub 帳戶(hù)
如果你喜歡使用 GitHub 來(lái)管理你的項目。您還可以將您的 GitBook 帳戶(hù)鏈接到您的 GitHub 帳戶(hù),以便您的更改可以相互同步。
1、鏈接 GitBook 和 GitHub 帳戶(hù)
關(guān)聯(lián)設置也很簡(jiǎn)單,首先進(jìn)入GitBook的“賬戶(hù)設置”頁(yè)面,在“Profile(個(gè)人數據)”選項卡中找到“GitHub”選項卡,點(diǎn)擊【Connect to GitHub】按鈕轉至GitHub的“Authorize” “申請”頁(yè)面,點(diǎn)擊【授權申請】按鈕完成關(guān)聯(lián)。
2、將 GitBook 項目導入 GitHub
關(guān)聯(lián)完成后,您可以設置同步的電子書(shū)項目。以電子書(shū)項目“MyFirstBook”為例,首先需要將項目導入GitHub。轉到電子書(shū)項目的設置頁(yè)面并切換到“GitHub”選項卡。在“GitHub Repository”中,點(diǎn)擊[Export to GitHub]按鈕,按照向導中的步驟將項目導入GitHub。
3、設置 GitBook 和 GitHub 同步
導出成功后,回到GitBook項目設置頁(yè)面的“GitHub”選項卡,在“GitHub Repository”的輸入框中填寫(xiě)GitHub Repository名稱(chēng),如“GitHub username/myfirstbook”,點(diǎn)擊【保存]按鈕保存。
保存后,當前頁(yè)面會(huì )出現一個(gè)名為“集成”的選項卡。點(diǎn)擊里面的【添加 webhook】按鈕,讓 GitBook 可以接收來(lái)自 Github 的內容更新。這會(huì )將 GitBook 上的項目與 GitHub 上的相應項目鏈接起來(lái)。
之后就可以使用 GitHub 來(lái)管理電子書(shū)項目,GitBook 上電子書(shū)內容的修改也會(huì )自動(dòng)同步到 GitHub。 查看全部
抓取網(wǎng)頁(yè)生成電子書(shū)(基于Node.js開(kāi)發(fā)的開(kāi)源工具,GitBook版)
GitBook 是一個(gè)基于 Node.js 開(kāi)發(fā)的開(kāi)源工具。它可以通過(guò)命令行創(chuàng )建電子書(shū)項目,然后使用MarkDown編寫(xiě)電子書(shū)內容,然后生成PDF、ePub、mobi格式的電子書(shū),或者生成靜態(tài)站點(diǎn)。
此外,您還可以使用 Git 命令來(lái)管理電子書(shū)版本。如果你是 GitHub 的重度用戶(hù),你也可以將你的 GitBook 賬號和你的 GitHub 賬號綁定,這樣無(wú)論兩邊修改什么,都可以相互同步。
一、安裝 Node.js
由于 GitBook 是基于 Node.js 開(kāi)發(fā)的,所以它依賴(lài)于 Node.js 環(huán)境。如果您的系統沒(méi)有安裝Node.js,請根據您使用的系統點(diǎn)擊下方鏈接下載對應版本。如果已經(jīng)安裝,請跳過(guò)此步驟。
Node.js 下載頁(yè)面:
Node.js的Windows版和Mac版都是常規安裝包,下一步即可安裝。Luunix版本可以參考官方文檔通過(guò)yum、apt-get等工具安裝,也可以通過(guò)源碼包安裝,如下圖:
$ wget https://nodejs.org/dist/v5.4.1/node-v5.4.1.tar.gz
$ tar zxvf node-v5.4.1.tar.gz
$ cd node-v5.4.1
$ ./configure
$ make
$ make install
二、安裝 GitBook
打開(kāi)命令提示符(在 Mac 上打開(kāi)終端)并輸入以下命令安裝 GitBook:
$ npm install gitbook-cli -g
由于網(wǎng)絡(luò )原因,安裝時(shí)間可能會(huì )較長(cháng),請耐心等待安裝完成。安裝完成后,可以輸入以下命令,通過(guò)查看GitBook的版本來(lái)判斷是否安裝成功:
$ gitbook -V
三、創(chuàng )建一個(gè)電子書(shū)項目
新建目錄,進(jìn)入目錄,用gitbook命令初始化電子書(shū)項目。例如,現在讓我們創(chuàng )建一個(gè)名為“MyFirstBook”的空白電子書(shū)項目,如下所示:
$ mkdir MyFirstBook
$ cd MyFirstBook
$ gitbook init
四、編輯電子書(shū)內容
初始化目錄中會(huì )出現“README.md(電子書(shū)介紹文件)”和“SUMMARY.md(導航目錄文件)”兩個(gè)基本文件。此外,您還可以手動(dòng)創(chuàng )建其他“Glossary.md(書(shū)末詞匯)”、“book.json(電子書(shū)配置文件)”??梢愿鶕约旱南埠脼殡娮訒?shū)的文本內容新建一個(gè).md文件,比如“chapter01.md”,然后使用MarkDown編寫(xiě)具體的文本內容。這些文件將在下面詳細描述。
1、README.md
這個(gè)文件是一個(gè)簡(jiǎn)單的電子書(shū)介紹,你可以對你制作的電子書(shū)做一個(gè)簡(jiǎn)單的描述:
# 簡(jiǎn)介
這是我的第一本使用 GitBook 制作的電子書(shū)。
2、SUMMARY.md
這是電子書(shū)的導航目錄文件。每當添加章節文件時(shí),都需要在該文件中添加一條記錄。對于 Kindle 書(shū)籍,該文件呈現的目錄結構是開(kāi)頭的目錄內容和“轉到”目錄導航。
# Summary
* [簡(jiǎn)介](README.md)
* [第一章](section1/README.md)
* [第二章](section2/README.md)
如果需要“小節”,可以使用Tab縮進(jìn)(最多支持三級標題),如下:
# Summary
* [第一章](section1/README.md)
* [第一節](section1/example1.md)
* [第二節](section1/example2.md)
* [第二章](section2/README.md)
* [第一節](section2/example1.md)
3、詞匯表.md
電子書(shū)內容中需要解釋的術(shù)語(yǔ)可以在本文檔中定義。詞匯表將放在電子書(shū)的末尾。其格式如下:
# 電子書(shū)
電子書(shū)是指將文字、圖片、聲音、影像等訊息內容數字化的出版物和植入或下載數字化文字、圖片、聲音、影像等訊息內容的集存儲和顯示終端于一體的手持閱讀器。
# Kindle
Amazon Kindle 是由 Amazon 設計和銷(xiāo)售的電子書(shū)閱讀器(以及軟件平臺)。用戶(hù)可以通過(guò)無(wú)線(xiàn)網(wǎng)絡(luò )使用 Amazon Kindle 購買(mǎi)、下載和閱讀電子書(shū)、報紙、雜志、博客及其他電子媒體。
4、book.json
“book.json”是電子書(shū)的配置文件,可以看作是電子書(shū)的“原創(chuàng )數據”,如書(shū)名、描述、isbn、語(yǔ)言、方向、風(fēng)格等。點(diǎn)此查看更多信息。其基本結構如下:
{
"title": "我的第一本電子書(shū)",
"description": "用 GitBook 制作的第一本電子書(shū)!",
"isbn": "978-3-16-148410-0",
"language": "zh-tw",
"direction": "ltr"
}
5、普通章節.md文件
普通章節 .md 文件可以使用您喜歡的文本編輯器編寫(xiě)。MarkDown的編寫(xiě),可以點(diǎn)擊這里查看相關(guān)示例。每次編寫(xiě) .md 文件時(shí),不要忘記在“SUMMARY.md”文件中添加一條記錄。
6、電子書(shū)封面圖片
GitBook 幫助文檔建議封面圖片大小為 1800*2360 像素,并遵循以下建議:
圖片格式為jpg格式。將圖片重命名為“cover.jpg”,放入電子書(shū)項目文件夾。
五、預覽電子書(shū)內容
電子書(shū)內容編寫(xiě)完成后,可以使用瀏覽器進(jìn)行預覽。首先輸入以下命令,從 .md 文件生成 HTML 文檔:
$ gitbook build
構建完成后,eBook項目目錄中會(huì )出現一個(gè)名為“_book”的文件夾。進(jìn)入文件夾,直接用瀏覽器打開(kāi)“index.html”,或者先輸入以下命令:
$ gitbook serve
然后在瀏覽器中輸入“:4000”預覽電子書(shū)的內容,按Ctrl+C結束預覽。
六、生成電子書(shū)文件
確認電子書(shū)沒(méi)有問(wèn)題后,輸入以下命令即可生成mobi電子書(shū):
$ gitbook mobi ./ ./MyFirstBook.mobi
如果出現以下錯誤信息,則說(shuō)明您尚未安裝 Calibre。由于 GitBook 依賴(lài) Calibre 的 ebook-convert 生成 mobi 格式的電子書(shū),請先下載并安裝 Calibre。
Error: Need to install ebook-convert from Calibre
Calibre安裝后,對于Mac OS X系統,需要先設置軟鏈接:
$ ln -s /Applications/calibre.app/Contents/MacOS/ebook-convert /usr/local/bin
再次運行轉換命令,生成 mobi 格式的電子書(shū)。
七、將項目托管到
以上所有步驟均在本地執行。如果需要實(shí)現電子書(shū)的版本管理,或者將電子書(shū)發(fā)布到網(wǎng)絡(luò ),也可以通過(guò) Git 命令在 Git 上托管本地項目。
1、注冊一個(gè)賬號
首先去注冊一個(gè)帳戶(hù)并創(chuàng )建一個(gè)新項目。在“設置”頁(yè)面獲取“Git URL(Git鏈接)”,鏈接如下:
https://git.gitbook.com/kindlefere/myfirstbook.git
2、安裝 Git 軟件
在開(kāi)始以下步驟之前,請確保您的系統上安裝了 Git。一般Mac和Lunix都自帶Git功能,可以在終端運行g(shù)it --version查看Git版本。Windows一般不自帶Git功能,請先點(diǎn)擊這里下載安裝。
安裝適用于 Windows 的 Git 時(shí),您將看到兩個(gè)選項:“僅從 Git Bash 使用 Git”和“從 Windows 命令提示符使用 Git”。前者是指在程序自帶的單獨終端中使用Git。后者意味著(zhù)你可以通過(guò)系統自帶的“命令提示符”來(lái)使用 Git 命令。大家可以根據自己的喜好來(lái)選擇,我個(gè)人推薦使用后者。
3、上傳現有的電子書(shū)項目
在本地新建一個(gè)文件夾,通過(guò)Git命令在本地抓取新創(chuàng )建的遠程項目,如下圖:
$ mkdir MyFirstBook-Git
$ cd MyFirstBook-Git
$ git init
$ git pull https://git.gitbook.com/kindlefere/myfirstbook.git
然后將本地項目“MyFirstBook”的所有內容復制到新創(chuàng )建的文件夾中,如上面的“MyFirstBook-Git”。然后使用Git命令將本地項目上傳到遠程,如下:
$ git add -A
$ git commit -m "提交說(shuō)明"
$ git remote add gitbook https://git.gitbook.com/kindlefere/myfirstbook.git
$ git push -u gitbook master
在此期間,您需要輸入您的 GitBook 注冊郵箱和密碼。以后修改內容后,只需要輸入如下Git命令即可:
$ git add [修改的文件]
$ git commit -m "提交說(shuō)明"
$ git push -u gitbook master
八、將項目鏈接到 GitHub 帳戶(hù)
如果你喜歡使用 GitHub 來(lái)管理你的項目。您還可以將您的 GitBook 帳戶(hù)鏈接到您的 GitHub 帳戶(hù),以便您的更改可以相互同步。
1、鏈接 GitBook 和 GitHub 帳戶(hù)
關(guān)聯(lián)設置也很簡(jiǎn)單,首先進(jìn)入GitBook的“賬戶(hù)設置”頁(yè)面,在“Profile(個(gè)人數據)”選項卡中找到“GitHub”選項卡,點(diǎn)擊【Connect to GitHub】按鈕轉至GitHub的“Authorize” “申請”頁(yè)面,點(diǎn)擊【授權申請】按鈕完成關(guān)聯(lián)。
2、將 GitBook 項目導入 GitHub
關(guān)聯(lián)完成后,您可以設置同步的電子書(shū)項目。以電子書(shū)項目“MyFirstBook”為例,首先需要將項目導入GitHub。轉到電子書(shū)項目的設置頁(yè)面并切換到“GitHub”選項卡。在“GitHub Repository”中,點(diǎn)擊[Export to GitHub]按鈕,按照向導中的步驟將項目導入GitHub。
3、設置 GitBook 和 GitHub 同步
導出成功后,回到GitBook項目設置頁(yè)面的“GitHub”選項卡,在“GitHub Repository”的輸入框中填寫(xiě)GitHub Repository名稱(chēng),如“GitHub username/myfirstbook”,點(diǎn)擊【保存]按鈕保存。
保存后,當前頁(yè)面會(huì )出現一個(gè)名為“集成”的選項卡。點(diǎn)擊里面的【添加 webhook】按鈕,讓 GitBook 可以接收來(lái)自 Github 的內容更新。這會(huì )將 GitBook 上的項目與 GitHub 上的相應項目鏈接起來(lái)。
之后就可以使用 GitHub 來(lái)管理電子書(shū)項目,GitBook 上電子書(shū)內容的修改也會(huì )自動(dòng)同步到 GitHub。
抓取網(wǎng)頁(yè)生成電子書(shū)(用urllib來(lái)爬取網(wǎng)頁(yè)生成電子書(shū)的方法有哪些)
網(wǎng)站優(yōu)化 ? 優(yōu)采云 發(fā)表了文章 ? 0 個(gè)評論 ? 101 次瀏覽 ? 2022-02-04 07:06
抓取網(wǎng)頁(yè)生成電子書(shū),我目前想到的方法有,爬蟲(chóng)爬取圖片,然后根據圖片文件名轉換,將出版社獲取并保存數據庫。甚至可以爬取網(wǎng)站服務(wù)器的頁(yè)面等等。另外,圖片比較多的話(huà),可以使用gimp、photoshop等軟件。比如這個(gè)。
建議安裝一個(gè)可以爬取網(wǎng)頁(yè)的搜索引擎,比如urllib.request。
你可以用國外軟件bookscombiy[]
用urllib來(lái)爬,chrome有插件taobaoui可以選取網(wǎng)頁(yè)里每個(gè)鏈接的信息,獲取電子書(shū)名和作者,
通過(guò)scrapy抓取網(wǎng)頁(yè),然后利用javascript,然后利用數據庫等,
<p>我的方法:建一個(gè)反爬蟲(chóng)系統,找到客戶(hù)端的地址,發(fā)給爬蟲(chóng)。爬蟲(chóng)爬這個(gè)頁(yè)面,發(fā)給網(wǎng)站,再發(fā)回去??蛻?hù)端地址就是所爬過(guò)頁(yè)面。具體代碼: 查看全部
抓取網(wǎng)頁(yè)生成電子書(shū)(用urllib來(lái)爬取網(wǎng)頁(yè)生成電子書(shū)的方法有哪些)
抓取網(wǎng)頁(yè)生成電子書(shū),我目前想到的方法有,爬蟲(chóng)爬取圖片,然后根據圖片文件名轉換,將出版社獲取并保存數據庫。甚至可以爬取網(wǎng)站服務(wù)器的頁(yè)面等等。另外,圖片比較多的話(huà),可以使用gimp、photoshop等軟件。比如這個(gè)。
建議安裝一個(gè)可以爬取網(wǎng)頁(yè)的搜索引擎,比如urllib.request。
你可以用國外軟件bookscombiy[]
用urllib來(lái)爬,chrome有插件taobaoui可以選取網(wǎng)頁(yè)里每個(gè)鏈接的信息,獲取電子書(shū)名和作者,
通過(guò)scrapy抓取網(wǎng)頁(yè),然后利用javascript,然后利用數據庫等,
<p>我的方法:建一個(gè)反爬蟲(chóng)系統,找到客戶(hù)端的地址,發(fā)給爬蟲(chóng)。爬蟲(chóng)爬這個(gè)頁(yè)面,發(fā)給網(wǎng)站,再發(fā)回去??蛻?hù)端地址就是所爬過(guò)頁(yè)面。具體代碼:
抓取網(wǎng)頁(yè)生成電子書(shū)(搜狗收錄應該怎么做?搜狗SEO工程師收錄方法,搜狗推送 )
網(wǎng)站優(yōu)化 ? 優(yōu)采云 發(fā)表了文章 ? 0 個(gè)評論 ? 108 次瀏覽 ? 2022-02-03 22:18
)
搜狗收錄應該怎么做?下面我們來(lái)看看搜狗的SEO工程師搜狗收錄的方法。做好搜狗網(wǎng)站收錄,必須具備以下幾個(gè)維度。否則,搜狗將很難收錄你的域名。
搜狗推
一、 服務(wù)器穩定
任何網(wǎng)站收錄或者排名都需要穩定的服務(wù)器,好的服務(wù)器是SEO優(yōu)化的基礎,尤其是網(wǎng)站,服務(wù)器出錯會(huì )導致搜狗搜索引擎無(wú)法捕捉?jīng)]有 收錄 排名。
二、搜狗老域名
老域名對于搜狗搜索引擎具有得天獨厚的優(yōu)勢。搜狗搜索引擎對老域名的信任度很高(被稱(chēng)為有中國歷史的老域名)。只要老域名沒(méi)有錯誤,很容易收錄首頁(yè)或者內頁(yè),比新域名更穩定。所以懂搜狗搜索引擎的SEO人員會(huì )選擇老域名,但是老搜狗域名也是有風(fēng)險的。購買(mǎi)舊域名時(shí),請仔細查看。如果舊域名已經(jīng)被處罰,那么你就不應該購買(mǎi)這樣的域名,因為如果你買(mǎi)了,就不會(huì )有更大的改善!
三、 搜狗節目選擇
搜狗蜘蛛對網(wǎng)頁(yè)的抓取是通過(guò)網(wǎng)頁(yè)之間的鏈接實(shí)現的。在選擇程序的時(shí)候,一定要選擇內置的鏈接功能,網(wǎng)頁(yè)之間有更多的推薦或鏈接。強大的聯(lián)動(dòng)功能讓搜狗蜘蛛對網(wǎng)站的抓取更加全面。自動(dòng)生成Sitemap地圖可以更好的讓搜狗了解你的網(wǎng)站結構和布局。搜狗更喜歡靜態(tài)頁(yè)面。選擇課程時(shí),盡量選擇原創(chuàng )學(xué)位模板過(guò)高的靜態(tài)網(wǎng)站課程。
四、 網(wǎng)站內容
網(wǎng)站未被搜狗列出收錄,請提交新的網(wǎng)站鏈接到搜狗站長(cháng)平臺,搜狗搜索引擎更注重標題+描述。因此,在填寫(xiě)網(wǎng)站的內容時(shí),標題+第一段盡量是原創(chuàng )或偽原創(chuàng )。
五、搜狗投稿收錄
搜狗推送有用嗎?絕對有用!毫無(wú)疑問(wèn)!搜狗官方:(為了讓搜狗蜘蛛更快發(fā)現你的網(wǎng)站,你也可以通過(guò)網(wǎng)站收錄收錄提交單頁(yè)申請)
搜狗官方有幾種提交方式:
搜狗投稿工具
有2種類(lèi)型的提交:
1、 驗證站點(diǎn)提交(每個(gè)站點(diǎn)每天 200 個(gè)項目)
2、 未經(jīng)驗證的網(wǎng)站提交。(單個(gè)賬號每日限制200個(gè)未驗證站點(diǎn))
3、sitemap.xml提交(包括搜狗邀請系統,大部分人沒(méi)有權限,只能選擇驗證推送或者非驗證推送來(lái)改進(jìn)收錄)
六、搜狗收錄時(shí)間
搜狗蜘蛛只與同一IP地址的服務(wù)器主機建立一個(gè)連接,爬取間隔速度控制在幾秒內。一個(gè)網(wǎng)頁(yè)在收錄之后,最快也要幾天才會(huì )更新。如果您不斷地抓取您的 網(wǎng)站,請注意您的 網(wǎng)站 上的頁(yè)面會(huì )在每次訪(fǎng)問(wèn)時(shí)生成新鏈接。
搜狗收錄
以上小編搜狗網(wǎng)站的收錄的效果。這就是今天的分享!看完這篇文章,如果你覺(jué)得不錯,不妨采集起來(lái),或者發(fā)給需要的朋友和同事!你的一舉一動(dòng)都會(huì )成為小編源源不斷的動(dòng)力!
查看全部
抓取網(wǎng)頁(yè)生成電子書(shū)(搜狗收錄應該怎么做?搜狗SEO工程師收錄方法,搜狗推送
)
搜狗收錄應該怎么做?下面我們來(lái)看看搜狗的SEO工程師搜狗收錄的方法。做好搜狗網(wǎng)站收錄,必須具備以下幾個(gè)維度。否則,搜狗將很難收錄你的域名。
搜狗推
一、 服務(wù)器穩定
任何網(wǎng)站收錄或者排名都需要穩定的服務(wù)器,好的服務(wù)器是SEO優(yōu)化的基礎,尤其是網(wǎng)站,服務(wù)器出錯會(huì )導致搜狗搜索引擎無(wú)法捕捉?jīng)]有 收錄 排名。
二、搜狗老域名
老域名對于搜狗搜索引擎具有得天獨厚的優(yōu)勢。搜狗搜索引擎對老域名的信任度很高(被稱(chēng)為有中國歷史的老域名)。只要老域名沒(méi)有錯誤,很容易收錄首頁(yè)或者內頁(yè),比新域名更穩定。所以懂搜狗搜索引擎的SEO人員會(huì )選擇老域名,但是老搜狗域名也是有風(fēng)險的。購買(mǎi)舊域名時(shí),請仔細查看。如果舊域名已經(jīng)被處罰,那么你就不應該購買(mǎi)這樣的域名,因為如果你買(mǎi)了,就不會(huì )有更大的改善!
三、 搜狗節目選擇
搜狗蜘蛛對網(wǎng)頁(yè)的抓取是通過(guò)網(wǎng)頁(yè)之間的鏈接實(shí)現的。在選擇程序的時(shí)候,一定要選擇內置的鏈接功能,網(wǎng)頁(yè)之間有更多的推薦或鏈接。強大的聯(lián)動(dòng)功能讓搜狗蜘蛛對網(wǎng)站的抓取更加全面。自動(dòng)生成Sitemap地圖可以更好的讓搜狗了解你的網(wǎng)站結構和布局。搜狗更喜歡靜態(tài)頁(yè)面。選擇課程時(shí),盡量選擇原創(chuàng )學(xué)位模板過(guò)高的靜態(tài)網(wǎng)站課程。
四、 網(wǎng)站內容
網(wǎng)站未被搜狗列出收錄,請提交新的網(wǎng)站鏈接到搜狗站長(cháng)平臺,搜狗搜索引擎更注重標題+描述。因此,在填寫(xiě)網(wǎng)站的內容時(shí),標題+第一段盡量是原創(chuàng )或偽原創(chuàng )。
五、搜狗投稿收錄
搜狗推送有用嗎?絕對有用!毫無(wú)疑問(wèn)!搜狗官方:(為了讓搜狗蜘蛛更快發(fā)現你的網(wǎng)站,你也可以通過(guò)網(wǎng)站收錄收錄提交單頁(yè)申請)
搜狗官方有幾種提交方式:
搜狗投稿工具
有2種類(lèi)型的提交:
1、 驗證站點(diǎn)提交(每個(gè)站點(diǎn)每天 200 個(gè)項目)
2、 未經(jīng)驗證的網(wǎng)站提交。(單個(gè)賬號每日限制200個(gè)未驗證站點(diǎn))
3、sitemap.xml提交(包括搜狗邀請系統,大部分人沒(méi)有權限,只能選擇驗證推送或者非驗證推送來(lái)改進(jìn)收錄)
六、搜狗收錄時(shí)間
搜狗蜘蛛只與同一IP地址的服務(wù)器主機建立一個(gè)連接,爬取間隔速度控制在幾秒內。一個(gè)網(wǎng)頁(yè)在收錄之后,最快也要幾天才會(huì )更新。如果您不斷地抓取您的 網(wǎng)站,請注意您的 網(wǎng)站 上的頁(yè)面會(huì )在每次訪(fǎng)問(wèn)時(shí)生成新鏈接。
搜狗收錄
以上小編搜狗網(wǎng)站的收錄的效果。這就是今天的分享!看完這篇文章,如果你覺(jué)得不錯,不妨采集起來(lái),或者發(fā)給需要的朋友和同事!你的一舉一動(dòng)都會(huì )成為小編源源不斷的動(dòng)力!
抓取網(wǎng)頁(yè)生成電子書(shū)(僅以界面操作方式-RSS功能模塊)
網(wǎng)站優(yōu)化 ? 優(yōu)采云 發(fā)表了文章 ? 0 個(gè)評論 ? 136 次瀏覽 ? 2022-02-01 13:15
Kindle Companion之前寫(xiě)過(guò)一篇文章文章——在Google Developer Console上使用KindleEar搭建RSS推送服務(wù)器。安裝成功后,您可以添加自己喜歡的RSS feed,KindleEar會(huì )自動(dòng)抓取最新的文章,并以期刊的形式定期推送到您的Kindle。那么除此之外,還有其他方法可以抓取 RSS 提要嗎?當然有!Calibre 本身有一個(gè) RSS 捕獲功能模塊,KindleEar 就是基于這個(gè)模塊編寫(xiě)的。Calibre雖然有命令行操作方式,但對普通用戶(hù)不是很友好,所以本文僅以界面操作方式為例。
一、準備提要
RSS訂閱地址多種多樣,沒(méi)有一定的規則,獲取RSS地址的方法也不同。一般提供RSS訂閱的網(wǎng)站都會(huì )提供一個(gè)RSS圖標,點(diǎn)擊即可獲取該網(wǎng)站的RSS訂閱地址。如果頁(yè)面上沒(méi)有這個(gè)圖標,可以查看網(wǎng)頁(yè)的源碼,找到類(lèi)似“href=""/>這樣的一行,就是RSS地址。另外,一些瀏覽器如火狐、Opera等會(huì )自動(dòng)獲取網(wǎng)站 RSS訂閱地址,并在地址欄標出RSS小圖標,也可以輕松獲取本站RSS地址。
二、添加提要
準備好 RSS 提要后,您可以在 Calibre 中添加它們。打開(kāi)Calibre,在Calibre主界面頂部的功能圖標中找到“抓取新聞”,點(diǎn)擊右側的向下箭頭,在彈出的菜單中點(diǎn)擊“添加自定義新聞源”。
在彈出的對話(huà)框中,點(diǎn)擊【新建配方】按鈕,切換到“添加自定義新聞源”對話(huà)框。在“訂閱列表標題”中輸入一個(gè)名稱(chēng),例如“我的訂閱”(此名稱(chēng)是一個(gè)類(lèi)別名稱(chēng),將收錄一組 RSS 提要地址)。
“最老的文章”可以設置抓取文章的及時(shí)性。默認情況下,Calibre 只會(huì )在過(guò)去 7 天內抓取 文章。如果你想搶更多,你可以自定義更改天數?!懊總€(gè)源的最大 文章 秒數”設置要抓取的最大 文章 秒數。不過(guò)需要注意的是,這兩個(gè)設置受限于網(wǎng)站 RSS的輸出方式。比如有些網(wǎng)站的RSS只輸出有限個(gè)最新的文章,所以無(wú)論在Calibre中如何設置都受這個(gè)限制,可能無(wú)法獲取到指定的文章 的數量;
接下來(lái),我們需要在“將新聞添加到訂閱”中添加我們想要保留的 RSS 地址。同樣在“Source Name”中輸入RSS訂閱的名稱(chēng),如“Kindle Companion”;然后在“Source URL”中輸入RSS地址,如“”;最后,點(diǎn)擊【添加來(lái)源】按鈕,在“訂閱列表中的新聞”中添加一個(gè)RSS訂閱。在一個(gè)訂閱列表中可以抓取多個(gè)RSS訂閱,因此您可以重復輸入多個(gè)RSS訂閱名稱(chēng)和來(lái)源網(wǎng)址并添加多次。
添加RSS提要地址后。點(diǎn)擊右下角的【保存】按鈕保存并返回“添加自定義動(dòng)態(tài)消息”界面。如需修改,可在左側列表中選擇一項,然后點(diǎn)擊【編輯此配方】按鈕進(jìn)行修改。如果要修改它,請單擊[刪除此配方]按鈕將其刪除。如果沒(méi)有問(wèn)題,可以點(diǎn)擊【關(guān)閉】按鈕返回Calibre主界面。
三、獲取和推送
設置好 Feed 后,您就可以抓取新聞了。同樣,在Calibre主界面上方的功能圖標中找到“抓取新聞”,點(diǎn)擊,彈出“定期新聞下載”對話(huà)框。在左側列表中找到“自定義”類(lèi)別,點(diǎn)擊展開(kāi),可以找到剛剛添加的訂閱列表。選擇好之后,點(diǎn)擊界面下方的【立即下載】按鈕,Calibre就會(huì )開(kāi)始爬取RSS內容。
抓取成功后,Calibre 會(huì )生成一本期刊格式的電子書(shū),并自動(dòng)存入圖書(shū)館。如果您設置了電子郵件推送,Calibre 還會(huì )自動(dòng)將生成的電子書(shū)推送到云端,以便自動(dòng)同步到您的 Kindle。
當然,除了這種手動(dòng)爬取方式,你還可以通過(guò)“定時(shí)下載”來(lái)定時(shí)爬取,比如每周、每月或者每隔指定天數爬取RSS內容,但前提是你要保持電腦開(kāi)機,讓您的計算機保持在線(xiàn)狀態(tài)。
另外需要注意的是,網(wǎng)站的一些RSS只輸出摘要,所以Calibre只能抓取摘要內容;如果您訂閱的 RSS 被屏蔽并且您的網(wǎng)絡(luò )沒(méi)有使用代理,則 Failed to crawl 成功。
Kindle Companion之前寫(xiě)過(guò)一篇文章文章——在Google Developer Console上使用KindleEar搭建RSS推送服務(wù)器。安裝成功后,您可以添加自己喜歡的RSS feed,KindleEar會(huì )自動(dòng)抓取最新的文章,并以期刊的形式定期推送到您的Kindle。那么除此之外,還有其他方法可以抓取 RSS 提要嗎?當然有!Calibre 本身有一個(gè) RSS 捕獲功能模塊,KindleEar 就是基于這個(gè)模塊編寫(xiě)的。Calibre雖然有命令行操作方式,但對普通用戶(hù)不是很友好,所以本文僅以界面操作方式為例。
一、準備提要
RSS訂閱地址多種多樣,沒(méi)有一定的規則,獲取RSS地址的方法也不同。一般提供RSS訂閱的網(wǎng)站都會(huì )提供一個(gè)RSS圖標,點(diǎn)擊即可獲取該網(wǎng)站的RSS訂閱地址。如果頁(yè)面上沒(méi)有這個(gè)圖標,可以查看網(wǎng)頁(yè)的源碼,找到類(lèi)似“href=""/>這樣的一行,就是RSS地址。另外,一些瀏覽器如火狐、Opera等會(huì )自動(dòng)獲取網(wǎng)站 RSS訂閱地址,并在地址欄標出RSS小圖標,也可以輕松獲取本站RSS地址。
二、添加提要
準備好 RSS 提要后,您可以在 Calibre 中添加它們。打開(kāi)Calibre,在Calibre主界面頂部的功能圖標中找到“抓取新聞”,點(diǎn)擊右側的向下箭頭,在彈出的菜單中點(diǎn)擊“添加自定義新聞源”。
在彈出的對話(huà)框中,點(diǎn)擊【新建配方】按鈕,切換到“添加自定義新聞源”對話(huà)框。在“訂閱列表標題”中輸入一個(gè)名稱(chēng),例如“我的訂閱”(此名稱(chēng)是一個(gè)類(lèi)別名稱(chēng),將收錄一組 RSS 提要地址)。
“最老的文章”可以設置抓取文章的及時(shí)性。默認情況下,Calibre 只會(huì )在過(guò)去 7 天內抓取 文章。如果你想搶更多,你可以自定義更改天數?!懊總€(gè)源的最大 文章 秒數”設置要抓取的最大 文章 秒數。不過(guò)需要注意的是,這兩個(gè)設置受限于網(wǎng)站 RSS的輸出方式。比如有些網(wǎng)站的RSS只輸出有限個(gè)最新的文章,所以無(wú)論在Calibre中如何設置都受這個(gè)限制,可能無(wú)法獲取到指定的文章 的數量;
接下來(lái),我們需要在“將新聞添加到訂閱”中添加我們想要保留的 RSS 地址。同樣在“Source Name”中輸入RSS訂閱的名稱(chēng),如“Kindle Companion”;然后在“Source URL”中輸入RSS地址,如“”;最后,點(diǎn)擊【添加來(lái)源】按鈕,在“訂閱列表中的新聞”中添加一個(gè)RSS訂閱。在一個(gè)訂閱列表中可以抓取多個(gè)RSS訂閱,因此您可以重復輸入多個(gè)RSS訂閱名稱(chēng)和來(lái)源網(wǎng)址并添加多次。
添加RSS提要地址后。點(diǎn)擊右下角的【保存】按鈕保存并返回“添加自定義動(dòng)態(tài)消息”界面。如需修改,可在左側列表中選擇一項,然后點(diǎn)擊【編輯此配方】按鈕進(jìn)行修改。如果要修改它,請單擊[刪除此配方]按鈕將其刪除。如果沒(méi)有問(wèn)題,可以點(diǎn)擊【關(guān)閉】按鈕返回Calibre主界面。
三、獲取和推送
設置好 Feed 后,您就可以抓取新聞了。同樣,在Calibre主界面上方的功能圖標中找到“抓取新聞”,點(diǎn)擊,彈出“定期新聞下載”對話(huà)框。在左側列表中找到“自定義”類(lèi)別,點(diǎn)擊展開(kāi),可以找到剛剛添加的訂閱列表。選擇好之后,點(diǎn)擊界面下方的【立即下載】按鈕,Calibre就會(huì )開(kāi)始爬取RSS內容。
抓取成功后,Calibre 會(huì )生成一本期刊格式的電子書(shū),并自動(dòng)存入圖書(shū)館。如果您設置了電子郵件推送,Calibre 還會(huì )自動(dòng)將生成的電子書(shū)推送到云端,以便自動(dòng)同步到您的 Kindle。
當然,除了這種手動(dòng)爬取方式,你還可以通過(guò)“定時(shí)下載”來(lái)定時(shí)爬取,比如每周、每月或者每隔指定天數爬取RSS內容,但前提是你要保持電腦開(kāi)機,讓您的計算機保持在線(xiàn)狀態(tài)。
另外需要注意的是,網(wǎng)站的一些RSS只輸出摘要,所以Calibre只能抓取摘要內容;如果您訂閱的 RSS 被屏蔽并且您的網(wǎng)絡(luò )沒(méi)有使用代理,則 Failed to crawl 成功。 查看全部
抓取網(wǎng)頁(yè)生成電子書(shū)(僅以界面操作方式-RSS功能模塊)
Kindle Companion之前寫(xiě)過(guò)一篇文章文章——在Google Developer Console上使用KindleEar搭建RSS推送服務(wù)器。安裝成功后,您可以添加自己喜歡的RSS feed,KindleEar會(huì )自動(dòng)抓取最新的文章,并以期刊的形式定期推送到您的Kindle。那么除此之外,還有其他方法可以抓取 RSS 提要嗎?當然有!Calibre 本身有一個(gè) RSS 捕獲功能模塊,KindleEar 就是基于這個(gè)模塊編寫(xiě)的。Calibre雖然有命令行操作方式,但對普通用戶(hù)不是很友好,所以本文僅以界面操作方式為例。
一、準備提要
RSS訂閱地址多種多樣,沒(méi)有一定的規則,獲取RSS地址的方法也不同。一般提供RSS訂閱的網(wǎng)站都會(huì )提供一個(gè)RSS圖標,點(diǎn)擊即可獲取該網(wǎng)站的RSS訂閱地址。如果頁(yè)面上沒(méi)有這個(gè)圖標,可以查看網(wǎng)頁(yè)的源碼,找到類(lèi)似“href=""/>這樣的一行,就是RSS地址。另外,一些瀏覽器如火狐、Opera等會(huì )自動(dòng)獲取網(wǎng)站 RSS訂閱地址,并在地址欄標出RSS小圖標,也可以輕松獲取本站RSS地址。
二、添加提要
準備好 RSS 提要后,您可以在 Calibre 中添加它們。打開(kāi)Calibre,在Calibre主界面頂部的功能圖標中找到“抓取新聞”,點(diǎn)擊右側的向下箭頭,在彈出的菜單中點(diǎn)擊“添加自定義新聞源”。

在彈出的對話(huà)框中,點(diǎn)擊【新建配方】按鈕,切換到“添加自定義新聞源”對話(huà)框。在“訂閱列表標題”中輸入一個(gè)名稱(chēng),例如“我的訂閱”(此名稱(chēng)是一個(gè)類(lèi)別名稱(chēng),將收錄一組 RSS 提要地址)。
“最老的文章”可以設置抓取文章的及時(shí)性。默認情況下,Calibre 只會(huì )在過(guò)去 7 天內抓取 文章。如果你想搶更多,你可以自定義更改天數?!懊總€(gè)源的最大 文章 秒數”設置要抓取的最大 文章 秒數。不過(guò)需要注意的是,這兩個(gè)設置受限于網(wǎng)站 RSS的輸出方式。比如有些網(wǎng)站的RSS只輸出有限個(gè)最新的文章,所以無(wú)論在Calibre中如何設置都受這個(gè)限制,可能無(wú)法獲取到指定的文章 的數量;
接下來(lái),我們需要在“將新聞添加到訂閱”中添加我們想要保留的 RSS 地址。同樣在“Source Name”中輸入RSS訂閱的名稱(chēng),如“Kindle Companion”;然后在“Source URL”中輸入RSS地址,如“”;最后,點(diǎn)擊【添加來(lái)源】按鈕,在“訂閱列表中的新聞”中添加一個(gè)RSS訂閱。在一個(gè)訂閱列表中可以抓取多個(gè)RSS訂閱,因此您可以重復輸入多個(gè)RSS訂閱名稱(chēng)和來(lái)源網(wǎng)址并添加多次。

添加RSS提要地址后。點(diǎn)擊右下角的【保存】按鈕保存并返回“添加自定義動(dòng)態(tài)消息”界面。如需修改,可在左側列表中選擇一項,然后點(diǎn)擊【編輯此配方】按鈕進(jìn)行修改。如果要修改它,請單擊[刪除此配方]按鈕將其刪除。如果沒(méi)有問(wèn)題,可以點(diǎn)擊【關(guān)閉】按鈕返回Calibre主界面。
三、獲取和推送
設置好 Feed 后,您就可以抓取新聞了。同樣,在Calibre主界面上方的功能圖標中找到“抓取新聞”,點(diǎn)擊,彈出“定期新聞下載”對話(huà)框。在左側列表中找到“自定義”類(lèi)別,點(diǎn)擊展開(kāi),可以找到剛剛添加的訂閱列表。選擇好之后,點(diǎn)擊界面下方的【立即下載】按鈕,Calibre就會(huì )開(kāi)始爬取RSS內容。

抓取成功后,Calibre 會(huì )生成一本期刊格式的電子書(shū),并自動(dòng)存入圖書(shū)館。如果您設置了電子郵件推送,Calibre 還會(huì )自動(dòng)將生成的電子書(shū)推送到云端,以便自動(dòng)同步到您的 Kindle。

當然,除了這種手動(dòng)爬取方式,你還可以通過(guò)“定時(shí)下載”來(lái)定時(shí)爬取,比如每周、每月或者每隔指定天數爬取RSS內容,但前提是你要保持電腦開(kāi)機,讓您的計算機保持在線(xiàn)狀態(tài)。
另外需要注意的是,網(wǎng)站的一些RSS只輸出摘要,所以Calibre只能抓取摘要內容;如果您訂閱的 RSS 被屏蔽并且您的網(wǎng)絡(luò )沒(méi)有使用代理,則 Failed to crawl 成功。
Kindle Companion之前寫(xiě)過(guò)一篇文章文章——在Google Developer Console上使用KindleEar搭建RSS推送服務(wù)器。安裝成功后,您可以添加自己喜歡的RSS feed,KindleEar會(huì )自動(dòng)抓取最新的文章,并以期刊的形式定期推送到您的Kindle。那么除此之外,還有其他方法可以抓取 RSS 提要嗎?當然有!Calibre 本身有一個(gè) RSS 捕獲功能模塊,KindleEar 就是基于這個(gè)模塊編寫(xiě)的。Calibre雖然有命令行操作方式,但對普通用戶(hù)不是很友好,所以本文僅以界面操作方式為例。
一、準備提要
RSS訂閱地址多種多樣,沒(méi)有一定的規則,獲取RSS地址的方法也不同。一般提供RSS訂閱的網(wǎng)站都會(huì )提供一個(gè)RSS圖標,點(diǎn)擊即可獲取該網(wǎng)站的RSS訂閱地址。如果頁(yè)面上沒(méi)有這個(gè)圖標,可以查看網(wǎng)頁(yè)的源碼,找到類(lèi)似“href=""/>這樣的一行,就是RSS地址。另外,一些瀏覽器如火狐、Opera等會(huì )自動(dòng)獲取網(wǎng)站 RSS訂閱地址,并在地址欄標出RSS小圖標,也可以輕松獲取本站RSS地址。
二、添加提要
準備好 RSS 提要后,您可以在 Calibre 中添加它們。打開(kāi)Calibre,在Calibre主界面頂部的功能圖標中找到“抓取新聞”,點(diǎn)擊右側的向下箭頭,在彈出的菜單中點(diǎn)擊“添加自定義新聞源”。

在彈出的對話(huà)框中,點(diǎn)擊【新建配方】按鈕,切換到“添加自定義新聞源”對話(huà)框。在“訂閱列表標題”中輸入一個(gè)名稱(chēng),例如“我的訂閱”(此名稱(chēng)是一個(gè)類(lèi)別名稱(chēng),將收錄一組 RSS 提要地址)。
“最老的文章”可以設置抓取文章的及時(shí)性。默認情況下,Calibre 只會(huì )在過(guò)去 7 天內抓取 文章。如果你想搶更多,你可以自定義更改天數?!懊總€(gè)源的最大 文章 秒數”設置要抓取的最大 文章 秒數。不過(guò)需要注意的是,這兩個(gè)設置受限于網(wǎng)站 RSS的輸出方式。比如有些網(wǎng)站的RSS只輸出有限個(gè)最新的文章,所以無(wú)論在Calibre中如何設置都受這個(gè)限制,可能無(wú)法獲取到指定的文章 的數量;
接下來(lái),我們需要在“將新聞添加到訂閱”中添加我們想要保留的 RSS 地址。同樣在“Source Name”中輸入RSS訂閱的名稱(chēng),如“Kindle Companion”;然后在“Source URL”中輸入RSS地址,如“”;最后,點(diǎn)擊【添加來(lái)源】按鈕,在“訂閱列表中的新聞”中添加一個(gè)RSS訂閱。在一個(gè)訂閱列表中可以抓取多個(gè)RSS訂閱,因此您可以重復輸入多個(gè)RSS訂閱名稱(chēng)和來(lái)源網(wǎng)址并添加多次。

添加RSS提要地址后。點(diǎn)擊右下角的【保存】按鈕保存并返回“添加自定義動(dòng)態(tài)消息”界面。如需修改,可在左側列表中選擇一項,然后點(diǎn)擊【編輯此配方】按鈕進(jìn)行修改。如果要修改它,請單擊[刪除此配方]按鈕將其刪除。如果沒(méi)有問(wèn)題,可以點(diǎn)擊【關(guān)閉】按鈕返回Calibre主界面。
三、獲取和推送
設置好 Feed 后,您就可以抓取新聞了。同樣,在Calibre主界面上方的功能圖標中找到“抓取新聞”,點(diǎn)擊,彈出“定期新聞下載”對話(huà)框。在左側列表中找到“自定義”類(lèi)別,點(diǎn)擊展開(kāi),可以找到剛剛添加的訂閱列表。選擇好之后,點(diǎn)擊界面下方的【立即下載】按鈕,Calibre就會(huì )開(kāi)始爬取RSS內容。

抓取成功后,Calibre 會(huì )生成一本期刊格式的電子書(shū),并自動(dòng)存入圖書(shū)館。如果您設置了電子郵件推送,Calibre 還會(huì )自動(dòng)將生成的電子書(shū)推送到云端,以便自動(dòng)同步到您的 Kindle。

當然,除了這種手動(dòng)爬取方式,你還可以通過(guò)“定時(shí)下載”來(lái)定時(shí)爬取,比如每周、每月或者每隔指定天數爬取RSS內容,但前提是你要保持電腦開(kāi)機,讓您的計算機保持在線(xiàn)狀態(tài)。
另外需要注意的是,網(wǎng)站的一些RSS只輸出摘要,所以Calibre只能抓取摘要內容;如果您訂閱的 RSS 被屏蔽并且您的網(wǎng)絡(luò )沒(méi)有使用代理,則 Failed to crawl 成功。
抓取網(wǎng)頁(yè)生成電子書(shū)(微信朋友圈效果[外鏈圖片轉存失敗(img-Q117HJ9K-25) )
網(wǎng)站優(yōu)化 ? 優(yōu)采云 發(fā)表了文章 ? 0 個(gè)評論 ? 85 次瀏覽 ? 2022-02-01 13:11
)
介紹
朋友圈留著(zhù)你的數據,留著(zhù)美好的回憶,記錄著(zhù)我們的每一點(diǎn)成長(cháng)。從某種意義上說(shuō),發(fā)朋友圈就是記錄生活,感受生活,見(jiàn)證每個(gè)人每一步的成長(cháng)。
如此珍貴的記憶,何不保存呢?只需一杯咖啡時(shí)間,即可一鍵打印朋友圈??梢允羌堎|(zhì)書(shū)也可以是電子書(shū),可以長(cháng)期保存,比拍照好,有時(shí)間足跡記憶。
現在,您可以選擇打印電子書(shū)或紙質(zhì)書(shū)。如果印刷紙質(zhì)書(shū),可以找第三方機構購買(mǎi);如果你打印一本電子書(shū),我們可以自己生成,這樣可以節省很多錢(qián)。
部分截圖
在開(kāi)始編寫(xiě)代碼思路之前,我們先來(lái)看看最終生成的效果。
電子書(shū)效果
[外鏈圖片傳輸失敗(img-TH9tBgCt-24)(%E4%B8%80%E9%94%AE%E7%94%9F%E6%88%90%E4%B8%AA% E4 %BA%BA%E5%BE%AE%E4%BF%A1%E6%9C%8B%E5%8F%8B%E5%9C%88%E6%95%B0%E6%8D%AE%E7% 94 %B5%E5%AD%90%E4%B9%A6/圖像/頁(yè)面1.png)]
[外鏈圖片傳輸失敗(img-Q117HJ9K-25)(%E4%B8%80%E9%94%AE%E7%94%9F%E6%88%90%E4%B8%AA% E4 %BA%BA%E5%BE%AE%E4%BF%A1%E6%9C%8B%E5%8F%8B%E5%9C%88%E6%95%B0%E6%8D%AE%E7% 94 %B5%E5%AD%90%E4%B9%A6/圖像/頁(yè)面2.png)]
紙書(shū)效果
【外鏈圖片傳輸失敗(img-eyuaB4P-27)(%E4%B8%80%E9%94%AE%E7%94%9F%E6%88%90%E4%B8%AA% E4 %BA%BA%E5%BE%AE%E4%BF%A1%E6%9C%8B%E5%8F%8B%E5%9C%88%E6%95%B0%E6%8D%AE%E7% 94 %B5%E5%AD%90%E4%B9%A6/圖像/頁(yè)面3.jpeg)]
獲取微信書(shū)籍鏈接的代碼思路
看完效果圖,開(kāi)始進(jìn)入代碼編寫(xiě)部分。首先,由于朋友圈數據的隱私性較高,如果手動(dòng)獲取,需要使用root安卓手機解密或解密PC機備份的聊天記錄數據庫,很難大多數人。所以我們的想法是根據現有數據打印電子書(shū)。
目前已經(jīng)有第三方服務(wù)支持導出朋友圈數據,微信公眾號【出版圖書(shū)】提供了這樣的服務(wù)。這種服務(wù)很有可能是基于安卓模擬器自動(dòng)化的,我就不贅述了。
先關(guān)注公眾號,然后開(kāi)始制作微信書(shū)籍。這個(gè)過(guò)程將你添加為編輯的朋友,然后你向他打開(kāi)朋友圈。過(guò)一會(huì )采集,小編會(huì )給你發(fā)一個(gè)專(zhuān)屬鏈接,這個(gè)鏈接里的內容就是你的Personal Moments。
生成電子書(shū)
有了這個(gè)鏈接,我們開(kāi)始打印頁(yè)面的內容。
整個(gè)過(guò)程基于 selenium 自動(dòng)化。如果你知道 selenium,那么這個(gè)過(guò)程其實(shí)很簡(jiǎn)單。
首先,為了引導用戶(hù)輸入微信圖書(shū)鏈接,我們采用在瀏覽器中彈出輸入文本框的形式,讓用戶(hù)輸入數據。
首先在selenium中執行js代碼,完成js代碼中彈出輸入文本框的功能。
進(jìn)入微信圖書(shū)鏈接
'''
遇到問(wèn)題沒(méi)人解答?小編創(chuàng )建了一個(gè)Python學(xué)習交流QQ群:857662006
尋找有志同道合的小伙伴,互幫互助,群里還有不錯的視頻學(xué)習教程和PDF電子書(shū)!
'''
# 以網(wǎng)頁(yè)輸入文本框形式提示用戶(hù)輸入url地址
def input_url():
# js腳本
random_id = [str(random.randint(0, 9)) for i in range(0,10)]
random_id = "".join(random_id)
random_id = 'id_input_target_url_' + random_id
js = """
// 彈出文本輸入框,輸入微信書(shū)的完整鏈接地址
target_url = prompt("請輸入微信書(shū)的完整鏈接地址","https://");
// 動(dòng)態(tài)創(chuàng )建一個(gè)input元素
input_target_url = document.createElement("input");
// 為其設置id,以便在程序中能夠獲取到它的值
input_target_url.id = "id_input_target_url";
// 插入到當前網(wǎng)頁(yè)中
document.getElementsByTagName("body")[0].appendChild(input_target_url);
// 設置不可見(jiàn)
document.getElementById("id_input_target_url").style.display = 'none';
// 設置value為target_url的值
document.getElementById("id_input_target_url").value = target_url
"""
js = js.replace('id_input_target_url', random_id)
# 執行以上js腳本
driver.execute_script(js)
上述js代碼的具體步驟為:彈出一個(gè)輸入文本框,創(chuàng )建一個(gè)動(dòng)態(tài)元素,隨機命名元素的id,將動(dòng)態(tài)元素插入到當前頁(yè)面,這樣就可以通過(guò)python 內容中的硒。
接下來(lái)檢測selenium中是否存在彈框,如果沒(méi)有,獲取彈框的內容,進(jìn)行下一步,流程代碼如下:
'''
遇到問(wèn)題沒(méi)人解答?小編創(chuàng )建了一個(gè)Python學(xué)習交流QQ群:857662006
尋找有志同道合的小伙伴,互幫互助,群里還有不錯的視頻學(xué)習教程和PDF電子書(shū)!
'''
# 執行以上js腳本
driver.execute_script(js)
# 判斷彈出框是否存在
while(True):
try:
# 檢測是否存在彈出框
alert = driver.switch_to.alert
time.sleep(0.5)
except:
# 如果拋異常,說(shuō)明當前頁(yè)面不存在彈出框,即用戶(hù)點(diǎn)擊了取消或者確定
break
# 獲取用戶(hù)輸入的鏈接地址
target_url = WebDriverWait(driver, 20).until(EC.presence_of_element_located((By.ID, random_id)))
value = target_url.get_attribute('value')
# 刪除空格
value = value.strip()
此時(shí)value的值就是彈出框返回的內容。(你可能會(huì )問(wèn),直接加value=微信書(shū)鏈接可以嗎?其實(shí)>*header確實(shí)是可以的,通過(guò)selenium隱藏這個(gè)元素的代碼如下:
# 隱藏導航欄,防止影響截圖效果
js = 'document.querySelector("body > header").style.display="none";'
driver.execute_script(js)
我們也發(fā)現當前頁(yè)面顯示的數據只收錄某月的朋友圈數據,而不是所有的朋友圈數據,那么如何顯示所有的朋友圈數據呢?通過(guò)分析可以看出,當點(diǎn)擊“下個(gè)月”按鈕時(shí),會(huì )顯示一個(gè)新的元素,而原來(lái)的元素會(huì )被隱藏,隱藏的元素就是上個(gè)月的數據。所以我們只需要遍歷到上個(gè)月,顯示之前的所有元素,然后打印出來(lái)。那么,如何判斷是上個(gè)月呢?我們也可以通過(guò)分析得知,當不是上個(gè)月時(shí),“下個(gè)月”的類(lèi)名是下個(gè)月,當是上個(gè)月時(shí),“下個(gè)月”的類(lèi)名是下個(gè)月禁用,所以我們可以檢測它的類(lèi)名,就知道是不是在上個(gè)月了。
'''
遇到問(wèn)題沒(méi)人解答?小編創(chuàng )建了一個(gè)Python學(xué)習交流QQ群:857662006
尋找有志同道合的小伙伴,互幫互助,群里還有不錯的視頻學(xué)習教程和PDF電子書(shū)!
'''
# 判斷當下一月控件的class name 是否為next-month disable,如果是,則說(shuō)明翻到最后一月了
page_source = driver.page_source
# 每一個(gè)element代表每一頁(yè),將每一頁(yè)中style的display屬性改成block,即可見(jiàn)狀態(tài)
for index, element in enumerate(element_left_list):
# ..在xpath中表示上一級的元素,也就是父元素
parent_element = element.find_element_by_xpath('..')
# 獲取這個(gè)父元素的完整id
parent_element_id = parent_element.get_attribute('id')
# 將該父元素更改為可見(jiàn)狀態(tài)
js = 'document.getElementById("{}").style.display="block";'.format(parent_element_id)
driver.execute_script(js)
但是,這種方式會(huì )出現問(wèn)題。即使我們打印成功,我們也不難保證頁(yè)面上的所有元素都加載完畢,所以有些元素可能打印后顯示不出來(lái),導致不太好看。因此,需要判斷加載何時(shí)結束。
【外鏈圖片傳輸失敗(img-gi8vJWty-31)(%E4%B8%80%E9%94%AE%E7%94%9F%E6%88%90%E4%B8%AA% E4 %BA%BA%E5%BE%AE%E4%BF%A1%E6%9C%8B%E5%8F%8B%E5%9C%88%E6%95%B0%E6%8D%AE%E7% 94 %B5%E5%AD%90%E4%B9%A6/圖像/頁(yè)面5.png)]
通過(guò)分析我們知道,網(wǎng)頁(yè)元素未加載時(shí),會(huì )出現“加載中”的提示,而網(wǎng)頁(yè)元素加載時(shí),該元素是隱藏的。因此,我們可以通過(guò)判斷元素是否隱藏來(lái)知道當前頁(yè)面元素是否被加載。這部分代碼如下:
# 等待當前頁(yè)面所有數據加載完畢,正常情況下數據加載完畢后,這個(gè)‘加載中’元素會(huì )隱藏起來(lái)
while (True):
loading_status = WebDriverWait(driver, 20).until(
EC.presence_of_element_located((By.CSS_SELECTOR, 'div.j-save-popup.save-popup')))
if (loading_status.is_displayed() == False):
break
但是我們也發(fā)現,在等待頁(yè)面元素及時(shí)加載后,還是有一些圖片沒(méi)有顯示出來(lái)。
【外鏈圖片傳輸失敗(img-aj7nf5ck-34)(%E4%B8%80%E9%94%AE%E7%94%9F%E6%88%90%E4%B8%AA% E4 %BA%BA%E5%BE%AE%E4%BF%A1%E6%9C%8B%E5%8F%8B%E5%9C%88%E6%95%B0%E6%8D%AE%E7% 94 %B5%E5%AD%90%E4%B9%A6/圖像/頁(yè)面6.png)]
這很令人困惑,為什么?通過(guò)分析我們還了解到,當這些圖片處于加載狀態(tài)時(shí),類(lèi)名是lazy-img。從字面意思上,我們大概可以猜到是延遲加載的意思,也就是用戶(hù)在那里滑動(dòng)頁(yè)面,直到加載完畢。,以節省服務(wù)器壓力。
所以我們可以通過(guò)一個(gè)名為lazy-img的類(lèi)滑動(dòng)到每個(gè)元素來(lái)加載它。所以?一個(gè)合適的方法是通過(guò)js定位元素,直到所有類(lèi)名為lazy-img的元素都不存在。
while(True):
try:
lazy_img = driver.find_elements_by_css_selector('img.lazy-img')
js = 'document.getElementsByClassName("lazy-img")[0].scrollIntoView();'
driver.execute_script(js)
time.sleep(3)
except:
# 找不到控件img.lazy-img,所以退出循環(huán)
break
其中document.getElementsByClassName("lazy-img")[0]是指document.getElementsByClassName("lazy-img")的第一個(gè)元素,scrollIntoView()是指滾動(dòng)到該元素的位置
打印電子書(shū)
通過(guò)以上步驟,我們成功隱藏了一些可能影響外觀(guān)的元素,同時(shí)也顯示了所有需要的元素。接下來(lái),是時(shí)候打印零件了。瀏覽器打印功能可以直接通過(guò)js代碼調用,而且我們之前已經(jīng)設置為自動(dòng)打印pdf格式,所以會(huì )自動(dòng)打印為pdf。但它打印到哪里?這里需要設置瀏覽器的默認存儲位置,保存位置為當前目錄。此步驟的代碼如下:
# 默認下載、打印保存路徑
'savefile.default_directory': os.getcwd()
# 調用chrome打印功能
driver.execute_script('window.print();')
打印后設置退出瀏覽器 driver.quit()
經(jīng)測試,電子書(shū)為超清版,大小約為16MB,質(zhì)量還不錯。
如何運行
# 跳轉到當前目錄
cd 目錄名
# 先卸載依賴(lài)庫
pip uninstall -y -r requirement.txt
# 再重新安裝依賴(lài)庫
pip install -r requirement.txt
# 開(kāi)始運行
python main.py 查看全部
抓取網(wǎng)頁(yè)生成電子書(shū)(微信朋友圈效果[外鏈圖片轉存失敗(img-Q117HJ9K-25)
)
介紹
朋友圈留著(zhù)你的數據,留著(zhù)美好的回憶,記錄著(zhù)我們的每一點(diǎn)成長(cháng)。從某種意義上說(shuō),發(fā)朋友圈就是記錄生活,感受生活,見(jiàn)證每個(gè)人每一步的成長(cháng)。
如此珍貴的記憶,何不保存呢?只需一杯咖啡時(shí)間,即可一鍵打印朋友圈??梢允羌堎|(zhì)書(shū)也可以是電子書(shū),可以長(cháng)期保存,比拍照好,有時(shí)間足跡記憶。
現在,您可以選擇打印電子書(shū)或紙質(zhì)書(shū)。如果印刷紙質(zhì)書(shū),可以找第三方機構購買(mǎi);如果你打印一本電子書(shū),我們可以自己生成,這樣可以節省很多錢(qián)。
部分截圖
在開(kāi)始編寫(xiě)代碼思路之前,我們先來(lái)看看最終生成的效果。
電子書(shū)效果
[外鏈圖片傳輸失敗(img-TH9tBgCt-24)(%E4%B8%80%E9%94%AE%E7%94%9F%E6%88%90%E4%B8%AA% E4 %BA%BA%E5%BE%AE%E4%BF%A1%E6%9C%8B%E5%8F%8B%E5%9C%88%E6%95%B0%E6%8D%AE%E7% 94 %B5%E5%AD%90%E4%B9%A6/圖像/頁(yè)面1.png)]
[外鏈圖片傳輸失敗(img-Q117HJ9K-25)(%E4%B8%80%E9%94%AE%E7%94%9F%E6%88%90%E4%B8%AA% E4 %BA%BA%E5%BE%AE%E4%BF%A1%E6%9C%8B%E5%8F%8B%E5%9C%88%E6%95%B0%E6%8D%AE%E7% 94 %B5%E5%AD%90%E4%B9%A6/圖像/頁(yè)面2.png)]
紙書(shū)效果
【外鏈圖片傳輸失敗(img-eyuaB4P-27)(%E4%B8%80%E9%94%AE%E7%94%9F%E6%88%90%E4%B8%AA% E4 %BA%BA%E5%BE%AE%E4%BF%A1%E6%9C%8B%E5%8F%8B%E5%9C%88%E6%95%B0%E6%8D%AE%E7% 94 %B5%E5%AD%90%E4%B9%A6/圖像/頁(yè)面3.jpeg)]
獲取微信書(shū)籍鏈接的代碼思路
看完效果圖,開(kāi)始進(jìn)入代碼編寫(xiě)部分。首先,由于朋友圈數據的隱私性較高,如果手動(dòng)獲取,需要使用root安卓手機解密或解密PC機備份的聊天記錄數據庫,很難大多數人。所以我們的想法是根據現有數據打印電子書(shū)。
目前已經(jīng)有第三方服務(wù)支持導出朋友圈數據,微信公眾號【出版圖書(shū)】提供了這樣的服務(wù)。這種服務(wù)很有可能是基于安卓模擬器自動(dòng)化的,我就不贅述了。
先關(guān)注公眾號,然后開(kāi)始制作微信書(shū)籍。這個(gè)過(guò)程將你添加為編輯的朋友,然后你向他打開(kāi)朋友圈。過(guò)一會(huì )采集,小編會(huì )給你發(fā)一個(gè)專(zhuān)屬鏈接,這個(gè)鏈接里的內容就是你的Personal Moments。
生成電子書(shū)
有了這個(gè)鏈接,我們開(kāi)始打印頁(yè)面的內容。
整個(gè)過(guò)程基于 selenium 自動(dòng)化。如果你知道 selenium,那么這個(gè)過(guò)程其實(shí)很簡(jiǎn)單。
首先,為了引導用戶(hù)輸入微信圖書(shū)鏈接,我們采用在瀏覽器中彈出輸入文本框的形式,讓用戶(hù)輸入數據。
首先在selenium中執行js代碼,完成js代碼中彈出輸入文本框的功能。
進(jìn)入微信圖書(shū)鏈接
'''
遇到問(wèn)題沒(méi)人解答?小編創(chuàng )建了一個(gè)Python學(xué)習交流QQ群:857662006
尋找有志同道合的小伙伴,互幫互助,群里還有不錯的視頻學(xué)習教程和PDF電子書(shū)!
'''
# 以網(wǎng)頁(yè)輸入文本框形式提示用戶(hù)輸入url地址
def input_url():
# js腳本
random_id = [str(random.randint(0, 9)) for i in range(0,10)]
random_id = "".join(random_id)
random_id = 'id_input_target_url_' + random_id
js = """
// 彈出文本輸入框,輸入微信書(shū)的完整鏈接地址
target_url = prompt("請輸入微信書(shū)的完整鏈接地址","https://");
// 動(dòng)態(tài)創(chuàng )建一個(gè)input元素
input_target_url = document.createElement("input");
// 為其設置id,以便在程序中能夠獲取到它的值
input_target_url.id = "id_input_target_url";
// 插入到當前網(wǎng)頁(yè)中
document.getElementsByTagName("body")[0].appendChild(input_target_url);
// 設置不可見(jiàn)
document.getElementById("id_input_target_url").style.display = 'none';
// 設置value為target_url的值
document.getElementById("id_input_target_url").value = target_url
"""
js = js.replace('id_input_target_url', random_id)
# 執行以上js腳本
driver.execute_script(js)
上述js代碼的具體步驟為:彈出一個(gè)輸入文本框,創(chuàng )建一個(gè)動(dòng)態(tài)元素,隨機命名元素的id,將動(dòng)態(tài)元素插入到當前頁(yè)面,這樣就可以通過(guò)python 內容中的硒。
接下來(lái)檢測selenium中是否存在彈框,如果沒(méi)有,獲取彈框的內容,進(jìn)行下一步,流程代碼如下:
'''
遇到問(wèn)題沒(méi)人解答?小編創(chuàng )建了一個(gè)Python學(xué)習交流QQ群:857662006
尋找有志同道合的小伙伴,互幫互助,群里還有不錯的視頻學(xué)習教程和PDF電子書(shū)!
'''
# 執行以上js腳本
driver.execute_script(js)
# 判斷彈出框是否存在
while(True):
try:
# 檢測是否存在彈出框
alert = driver.switch_to.alert
time.sleep(0.5)
except:
# 如果拋異常,說(shuō)明當前頁(yè)面不存在彈出框,即用戶(hù)點(diǎn)擊了取消或者確定
break
# 獲取用戶(hù)輸入的鏈接地址
target_url = WebDriverWait(driver, 20).until(EC.presence_of_element_located((By.ID, random_id)))
value = target_url.get_attribute('value')
# 刪除空格
value = value.strip()
此時(shí)value的值就是彈出框返回的內容。(你可能會(huì )問(wèn),直接加value=微信書(shū)鏈接可以嗎?其實(shí)>*header確實(shí)是可以的,通過(guò)selenium隱藏這個(gè)元素的代碼如下:
# 隱藏導航欄,防止影響截圖效果
js = 'document.querySelector("body > header").style.display="none";'
driver.execute_script(js)
我們也發(fā)現當前頁(yè)面顯示的數據只收錄某月的朋友圈數據,而不是所有的朋友圈數據,那么如何顯示所有的朋友圈數據呢?通過(guò)分析可以看出,當點(diǎn)擊“下個(gè)月”按鈕時(shí),會(huì )顯示一個(gè)新的元素,而原來(lái)的元素會(huì )被隱藏,隱藏的元素就是上個(gè)月的數據。所以我們只需要遍歷到上個(gè)月,顯示之前的所有元素,然后打印出來(lái)。那么,如何判斷是上個(gè)月呢?我們也可以通過(guò)分析得知,當不是上個(gè)月時(shí),“下個(gè)月”的類(lèi)名是下個(gè)月,當是上個(gè)月時(shí),“下個(gè)月”的類(lèi)名是下個(gè)月禁用,所以我們可以檢測它的類(lèi)名,就知道是不是在上個(gè)月了。
'''
遇到問(wèn)題沒(méi)人解答?小編創(chuàng )建了一個(gè)Python學(xué)習交流QQ群:857662006
尋找有志同道合的小伙伴,互幫互助,群里還有不錯的視頻學(xué)習教程和PDF電子書(shū)!
'''
# 判斷當下一月控件的class name 是否為next-month disable,如果是,則說(shuō)明翻到最后一月了
page_source = driver.page_source
# 每一個(gè)element代表每一頁(yè),將每一頁(yè)中style的display屬性改成block,即可見(jiàn)狀態(tài)
for index, element in enumerate(element_left_list):
# ..在xpath中表示上一級的元素,也就是父元素
parent_element = element.find_element_by_xpath('..')
# 獲取這個(gè)父元素的完整id
parent_element_id = parent_element.get_attribute('id')
# 將該父元素更改為可見(jiàn)狀態(tài)
js = 'document.getElementById("{}").style.display="block";'.format(parent_element_id)
driver.execute_script(js)
但是,這種方式會(huì )出現問(wèn)題。即使我們打印成功,我們也不難保證頁(yè)面上的所有元素都加載完畢,所以有些元素可能打印后顯示不出來(lái),導致不太好看。因此,需要判斷加載何時(shí)結束。
【外鏈圖片傳輸失敗(img-gi8vJWty-31)(%E4%B8%80%E9%94%AE%E7%94%9F%E6%88%90%E4%B8%AA% E4 %BA%BA%E5%BE%AE%E4%BF%A1%E6%9C%8B%E5%8F%8B%E5%9C%88%E6%95%B0%E6%8D%AE%E7% 94 %B5%E5%AD%90%E4%B9%A6/圖像/頁(yè)面5.png)]
通過(guò)分析我們知道,網(wǎng)頁(yè)元素未加載時(shí),會(huì )出現“加載中”的提示,而網(wǎng)頁(yè)元素加載時(shí),該元素是隱藏的。因此,我們可以通過(guò)判斷元素是否隱藏來(lái)知道當前頁(yè)面元素是否被加載。這部分代碼如下:
# 等待當前頁(yè)面所有數據加載完畢,正常情況下數據加載完畢后,這個(gè)‘加載中’元素會(huì )隱藏起來(lái)
while (True):
loading_status = WebDriverWait(driver, 20).until(
EC.presence_of_element_located((By.CSS_SELECTOR, 'div.j-save-popup.save-popup')))
if (loading_status.is_displayed() == False):
break
但是我們也發(fā)現,在等待頁(yè)面元素及時(shí)加載后,還是有一些圖片沒(méi)有顯示出來(lái)。
【外鏈圖片傳輸失敗(img-aj7nf5ck-34)(%E4%B8%80%E9%94%AE%E7%94%9F%E6%88%90%E4%B8%AA% E4 %BA%BA%E5%BE%AE%E4%BF%A1%E6%9C%8B%E5%8F%8B%E5%9C%88%E6%95%B0%E6%8D%AE%E7% 94 %B5%E5%AD%90%E4%B9%A6/圖像/頁(yè)面6.png)]
這很令人困惑,為什么?通過(guò)分析我們還了解到,當這些圖片處于加載狀態(tài)時(shí),類(lèi)名是lazy-img。從字面意思上,我們大概可以猜到是延遲加載的意思,也就是用戶(hù)在那里滑動(dòng)頁(yè)面,直到加載完畢。,以節省服務(wù)器壓力。
所以我們可以通過(guò)一個(gè)名為lazy-img的類(lèi)滑動(dòng)到每個(gè)元素來(lái)加載它。所以?一個(gè)合適的方法是通過(guò)js定位元素,直到所有類(lèi)名為lazy-img的元素都不存在。
while(True):
try:
lazy_img = driver.find_elements_by_css_selector('img.lazy-img')
js = 'document.getElementsByClassName("lazy-img")[0].scrollIntoView();'
driver.execute_script(js)
time.sleep(3)
except:
# 找不到控件img.lazy-img,所以退出循環(huán)
break
其中document.getElementsByClassName("lazy-img")[0]是指document.getElementsByClassName("lazy-img")的第一個(gè)元素,scrollIntoView()是指滾動(dòng)到該元素的位置
打印電子書(shū)
通過(guò)以上步驟,我們成功隱藏了一些可能影響外觀(guān)的元素,同時(shí)也顯示了所有需要的元素。接下來(lái),是時(shí)候打印零件了。瀏覽器打印功能可以直接通過(guò)js代碼調用,而且我們之前已經(jīng)設置為自動(dòng)打印pdf格式,所以會(huì )自動(dòng)打印為pdf。但它打印到哪里?這里需要設置瀏覽器的默認存儲位置,保存位置為當前目錄。此步驟的代碼如下:
# 默認下載、打印保存路徑
'savefile.default_directory': os.getcwd()
# 調用chrome打印功能
driver.execute_script('window.print();')
打印后設置退出瀏覽器 driver.quit()
經(jīng)測試,電子書(shū)為超清版,大小約為16MB,質(zhì)量還不錯。
如何運行
# 跳轉到當前目錄
cd 目錄名
# 先卸載依賴(lài)庫
pip uninstall -y -r requirement.txt
# 再重新安裝依賴(lài)庫
pip install -r requirement.txt
# 開(kāi)始運行
python main.py
抓取網(wǎng)頁(yè)生成電子書(shū)(網(wǎng)文快捕軟件特色介紹的應用)
網(wǎng)站優(yōu)化 ? 優(yōu)采云 發(fā)表了文章 ? 0 個(gè)評論 ? 126 次瀏覽 ? 2022-01-30 23:12
Nettext Quick Capture是一款功能實(shí)用的網(wǎng)頁(yè)保存管理軟件。本軟件可以幫助用戶(hù)輕松批量保存和管理網(wǎng)頁(yè)內容,并幫助制作成電子書(shū)格式,方便用戶(hù)獲取和提取網(wǎng)頁(yè)內容。該軟件具有超強的穩定性。最大程度保障數據安全,滿(mǎn)足用戶(hù)各種網(wǎng)頁(yè)內容獲取和保存需求。
軟件功能
1、超強穩定性:數據管理,最重要的是數據安全,可以提供穩定的程序和安全的數據存儲方式。經(jīng)過(guò)嚴格測試的程序具有高度的穩定性。同時(shí),所有數據都存儲在數據庫中,這也提供了一種安全可靠的數據存儲方式。
2、豐富的導入導出功能:可以導入你的郵件、各種Office文檔、PDF、源代碼、圖片等。同時(shí),您還可以將數據導出為 HTML 文件制作電子書(shū),無(wú)需 Cyber??Article 即可使用。以后即使不再使用,也可以使用您的數據,不用擔心數據丟失。
3、便捷的數據共享:讓您輕松共享數據。無(wú)論您是在公司還是在家里,您都可以同時(shí)使用局域網(wǎng)來(lái)管理您的數據。所有操作都自動(dòng)保存到數據庫中,無(wú)需任何同步工作。您也可以使用WebShare 組件,您可以將您的數據發(fā)布到瀏覽器上面。這樣,即使其他人沒(méi)有安裝該軟件,只要有瀏覽器,就可以查看數據。
4、強大的開(kāi)放性:公開(kāi)數據的存儲方式,提供豐富的二次開(kāi)發(fā)接口。您可以使用腳本語(yǔ)言來(lái)擴展 Cyber??Article 的功能,也可以使用高級語(yǔ)言編寫(xiě)各種插件以更好地滿(mǎn)足您的需求。
5、完全支持各種瀏覽器:支持IE、火狐、谷歌Chrome瀏覽器、蘋(píng)果safari瀏覽器、Opera。各類(lèi)主流瀏覽器一網(wǎng)打盡,各類(lèi)網(wǎng)頁(yè)一網(wǎng)打盡。
6、PDF 支持:您可以導入 PDF 文件。導入的PDF文件可以輕松統一搜索。
7、統一管理功能:將所有導入的文檔統一轉換為HTML文件,采用統一的管理、檢索、編輯方式,讓您不再關(guān)心格式。
8、提供谷歌桌面搜索和IFilter插件,讓你使用桌面搜索軟件統一進(jìn)行全文搜索。
9、提供版本控制功能,可以保存每一個(gè)歷史修改記錄。
軟件功能
保存頁(yè)面
1. 網(wǎng)頁(yè)中的任何資源都可以在IE(包括IE核心瀏覽器)、火狐、谷歌瀏覽器、Safari和Opera等支持的瀏覽器中完整無(wú)瑕地保存,特別是還可以保存一些資源,例如 YouTube 上的視頻。它已成為網(wǎng)頁(yè)保存領(lǐng)域流行的優(yōu)秀軟件。
2. 網(wǎng)頁(yè)可以批量保存。
3. 可以導入Office文檔:doc、ppt、xls、rtf。
4. 可以通過(guò)全文搜索導入 PDF 文件。
5.可以導入源代碼文件,支持顏色標注。
5. 可以導入圖片、flash等,也支持導入任意文件的附件。
資源管理
1. 以 HTML 格式保存所有資源,您可以在全文搜索、批處理、輸出和電子書(shū)制作中以相同的方式管理它們。
2.設置一個(gè)文章為IE采集,可以添加多個(gè)書(shū)簽,輕松實(shí)現多級文檔管理。
3. 您還可以編輯書(shū)中的資源。
4.Nettext Quick Capture可以實(shí)現你書(shū)中的大量操作,比如分類(lèi)、標注顏色、批處理等。 查看全部
抓取網(wǎng)頁(yè)生成電子書(shū)(網(wǎng)文快捕軟件特色介紹的應用)
Nettext Quick Capture是一款功能實(shí)用的網(wǎng)頁(yè)保存管理軟件。本軟件可以幫助用戶(hù)輕松批量保存和管理網(wǎng)頁(yè)內容,并幫助制作成電子書(shū)格式,方便用戶(hù)獲取和提取網(wǎng)頁(yè)內容。該軟件具有超強的穩定性。最大程度保障數據安全,滿(mǎn)足用戶(hù)各種網(wǎng)頁(yè)內容獲取和保存需求。

軟件功能
1、超強穩定性:數據管理,最重要的是數據安全,可以提供穩定的程序和安全的數據存儲方式。經(jīng)過(guò)嚴格測試的程序具有高度的穩定性。同時(shí),所有數據都存儲在數據庫中,這也提供了一種安全可靠的數據存儲方式。
2、豐富的導入導出功能:可以導入你的郵件、各種Office文檔、PDF、源代碼、圖片等。同時(shí),您還可以將數據導出為 HTML 文件制作電子書(shū),無(wú)需 Cyber??Article 即可使用。以后即使不再使用,也可以使用您的數據,不用擔心數據丟失。
3、便捷的數據共享:讓您輕松共享數據。無(wú)論您是在公司還是在家里,您都可以同時(shí)使用局域網(wǎng)來(lái)管理您的數據。所有操作都自動(dòng)保存到數據庫中,無(wú)需任何同步工作。您也可以使用WebShare 組件,您可以將您的數據發(fā)布到瀏覽器上面。這樣,即使其他人沒(méi)有安裝該軟件,只要有瀏覽器,就可以查看數據。
4、強大的開(kāi)放性:公開(kāi)數據的存儲方式,提供豐富的二次開(kāi)發(fā)接口。您可以使用腳本語(yǔ)言來(lái)擴展 Cyber??Article 的功能,也可以使用高級語(yǔ)言編寫(xiě)各種插件以更好地滿(mǎn)足您的需求。
5、完全支持各種瀏覽器:支持IE、火狐、谷歌Chrome瀏覽器、蘋(píng)果safari瀏覽器、Opera。各類(lèi)主流瀏覽器一網(wǎng)打盡,各類(lèi)網(wǎng)頁(yè)一網(wǎng)打盡。
6、PDF 支持:您可以導入 PDF 文件。導入的PDF文件可以輕松統一搜索。
7、統一管理功能:將所有導入的文檔統一轉換為HTML文件,采用統一的管理、檢索、編輯方式,讓您不再關(guān)心格式。
8、提供谷歌桌面搜索和IFilter插件,讓你使用桌面搜索軟件統一進(jìn)行全文搜索。
9、提供版本控制功能,可以保存每一個(gè)歷史修改記錄。
軟件功能
保存頁(yè)面
1. 網(wǎng)頁(yè)中的任何資源都可以在IE(包括IE核心瀏覽器)、火狐、谷歌瀏覽器、Safari和Opera等支持的瀏覽器中完整無(wú)瑕地保存,特別是還可以保存一些資源,例如 YouTube 上的視頻。它已成為網(wǎng)頁(yè)保存領(lǐng)域流行的優(yōu)秀軟件。
2. 網(wǎng)頁(yè)可以批量保存。
3. 可以導入Office文檔:doc、ppt、xls、rtf。
4. 可以通過(guò)全文搜索導入 PDF 文件。
5.可以導入源代碼文件,支持顏色標注。
5. 可以導入圖片、flash等,也支持導入任意文件的附件。
資源管理
1. 以 HTML 格式保存所有資源,您可以在全文搜索、批處理、輸出和電子書(shū)制作中以相同的方式管理它們。
2.設置一個(gè)文章為IE采集,可以添加多個(gè)書(shū)簽,輕松實(shí)現多級文檔管理。
3. 您還可以編輯書(shū)中的資源。
4.Nettext Quick Capture可以實(shí)現你書(shū)中的大量操作,比如分類(lèi)、標注顏色、批處理等。
抓取網(wǎng)頁(yè)生成電子書(shū)(網(wǎng)絡(luò )書(shū)籍抓取器是一款能幫助用戶(hù)下載指定網(wǎng)頁(yè)的某)
網(wǎng)站優(yōu)化 ? 優(yōu)采云 發(fā)表了文章 ? 0 個(gè)評論 ? 148 次瀏覽 ? 2022-01-30 23:09
在線(xiàn)圖書(shū)抓取器是一款可以幫助用戶(hù)下載指定網(wǎng)頁(yè)的某本書(shū)和某章的軟件。通過(guò)在線(xiàn)圖書(shū)抓取器,可以快速下載小說(shuō)。同時(shí)軟件支持斷點(diǎn)續傳功能,非常方便??梢韵螺d使用。
特征
可以提取指定小說(shuō)目錄頁(yè)面的章節信息并進(jìn)行調整,然后按照章節順序抓取小說(shuō)內容,在最合適的時(shí)候進(jìn)行合并。爬取過(guò)程可以隨時(shí)中斷,關(guān)閉程序后可以恢復上一個(gè)任務(wù)。
軟件功能
1、章節調整:提取目錄后,可以進(jìn)行移動(dòng)、刪除、反轉等調整操作。調整將直接影響調整后的章節順序中的最終書(shū)籍和輸出。
2、自動(dòng)重試:爬取過(guò)程中,可能由于網(wǎng)絡(luò )因素導致爬取失敗。本程序可能會(huì )自動(dòng)重試直到成功,或者暫時(shí)中斷爬?。ㄖ袛嗪箨P(guān)閉程序不會(huì )影響進(jìn)度),等網(wǎng)絡(luò )好了再試。
3、停止和恢復:可以隨時(shí)停止捕捉過(guò)程,退出程序后不影響進(jìn)度(章節信息會(huì )保存在記錄中,程序結束后可以恢復捕捉下次運行。注意:需要先用停止鍵中斷,然后退出程序,如果直接退出,將無(wú)法恢復)。
4、一鍵抓?。河址Q(chēng)“傻瓜模式”,基本可以實(shí)現全自動(dòng)抓取合并功能,直接輸出最終的文本文件。前面可能需要輸入最基本的URL、save bit等信息(會(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ū):可以在設置文件中添加每章名稱(chēng)的前綴和后綴,為后期制作電子書(shū)的編目帶來(lái)極大的方便。
指示
1、首先進(jìn)入你要下載的小說(shuō)的網(wǎng)頁(yè)。
2、輸入書(shū)名,點(diǎn)擊目錄提取。
3、設置保存路徑,點(diǎn)擊Start Grab開(kāi)始下載。 查看全部
抓取網(wǎng)頁(yè)生成電子書(shū)(網(wǎng)絡(luò )書(shū)籍抓取器是一款能幫助用戶(hù)下載指定網(wǎng)頁(yè)的某)
在線(xiàn)圖書(shū)抓取器是一款可以幫助用戶(hù)下載指定網(wǎng)頁(yè)的某本書(shū)和某章的軟件。通過(guò)在線(xiàn)圖書(shū)抓取器,可以快速下載小說(shuō)。同時(shí)軟件支持斷點(diǎn)續傳功能,非常方便??梢韵螺d使用。

特征
可以提取指定小說(shuō)目錄頁(yè)面的章節信息并進(jìn)行調整,然后按照章節順序抓取小說(shuō)內容,在最合適的時(shí)候進(jìn)行合并。爬取過(guò)程可以隨時(shí)中斷,關(guān)閉程序后可以恢復上一個(gè)任務(wù)。
軟件功能
1、章節調整:提取目錄后,可以進(jìn)行移動(dòng)、刪除、反轉等調整操作。調整將直接影響調整后的章節順序中的最終書(shū)籍和輸出。
2、自動(dòng)重試:爬取過(guò)程中,可能由于網(wǎng)絡(luò )因素導致爬取失敗。本程序可能會(huì )自動(dòng)重試直到成功,或者暫時(shí)中斷爬?。ㄖ袛嗪箨P(guān)閉程序不會(huì )影響進(jìn)度),等網(wǎng)絡(luò )好了再試。
3、停止和恢復:可以隨時(shí)停止捕捉過(guò)程,退出程序后不影響進(jìn)度(章節信息會(huì )保存在記錄中,程序結束后可以恢復捕捉下次運行。注意:需要先用停止鍵中斷,然后退出程序,如果直接退出,將無(wú)法恢復)。
4、一鍵抓?。河址Q(chēng)“傻瓜模式”,基本可以實(shí)現全自動(dòng)抓取合并功能,直接輸出最終的文本文件。前面可能需要輸入最基本的URL、save bit等信息(會(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ū):可以在設置文件中添加每章名稱(chēng)的前綴和后綴,為后期制作電子書(shū)的編目帶來(lái)極大的方便。
指示
1、首先進(jìn)入你要下載的小說(shuō)的網(wǎng)頁(yè)。
2、輸入書(shū)名,點(diǎn)擊目錄提取。
3、設置保存路徑,點(diǎn)擊Start Grab開(kāi)始下載。
抓取網(wǎng)頁(yè)生成電子書(shū)(需要編輯的word文檔的模板全部做成HTML頁(yè)面,需要導入的jar包)
網(wǎng)站優(yōu)化 ? 優(yōu)采云 發(fā)表了文章 ? 0 個(gè)評論 ? 120 次瀏覽 ? 2022-01-28 03:06
本來(lái)應該用pageOffice在線(xiàn)編輯、保存、轉成PDF、完成簽名。因為公司預算不夠,無(wú)法購買(mǎi)pageOffice組件,只能想其他辦法。
需要編輯的word文檔的模板是固定的,數量不大,但是格式要求比較嚴格,所以我決定把所有的模板都做成HTML頁(yè)面,用iText組件來(lái)轉換將 HTML 轉換為 PDF。
需要導入的jar包:
首先,需要將模板制作成類(lèi)似如下的頁(yè)面。水平線(xiàn)上的數據可以動(dòng)態(tài)填充和編輯。 Freemarker可以用來(lái)填充數據。
要使頁(yè)面可編輯,您可以使用 Html 的 contenteditable="true"
因為頁(yè)面可以動(dòng)態(tài)編輯,所以我們需要獲取編輯頁(yè)面的源代碼
var outerHTML = document.documentElement.outerHTML;
這里需要注意的是頁(yè)面中的所有標簽都需要關(guān)閉。如果沒(méi)有關(guān)閉,iText組件在轉換過(guò)程中會(huì )報錯。頁(yè)面中的字體需要是Arial,因為iText的轉換需要字體文件的支持。所以你還需要在項目中或者服務(wù)器上準備好字體文件
身體{
邊距:20px;
字體系列:SimSun;
}
以下是后臺收到頁(yè)面源代碼后的處理
@RequestMapping("acceptPage")
@ResponseBody
public Map acceptPage(HttpServletRequest request) throws Exception {
Map map=new HashMap();
String text = request.getParameter("text");
//使用jsoup來(lái)對html源碼進(jìn)行解析,能夠校驗格式的完整性,并生成一個(gè)新的Document
org.jsoup.nodes.Document parse = Jsoup.parse(text);
Elements meta = parse.getElementsByTag("meta");
String html = parse.html();
for (Element link : meta) {//手動(dòng)為一些標簽添加閉合
String s = link.outerHtml();
String s1=s.replace("/>",">");
html=html.replace(s,s1+"");
}
Elements link1 = parse.getElementsByTag("link");
for (Element link : link1) {
String s = link.outerHtml();
String s1=s.replace("/>",">");
html=html.replace(s,s1+"");
}
html=html.replaceAll(" ","");
try {
String outputFile="E:\\test.pdf";
OutputStream os = new FileOutputStream(outputFile);
//中文宋體文件路徑
String fontPath=StringUtil.trimSufffix(fontUrl, File.separator)+File.separator+"simsun.ttc";
//String fontPath= "C:\\simsun.ttc";
ITextRenderer render = new ITextRenderer();
ITextFontResolver fontResolver = render.getFontResolver();
fontResolver.addFont(fontPath, BaseFont.IDENTITY_H, BaseFont.NOT_EMBEDDED);
render.setDocumentFromString(html);
render.layout();
render.createPDF(os);
os.close();
} catch (Exception e) {
e.printStackTrace();
map.put("state",1);
map.put("msg","文件轉換失??!請聯(lián)系管理員!");
return map;
}
}
以下是對生成的PDF文件進(jìn)行簽名的操作,不再贅述
這是最終生成的PDF,樣式?jīng)]問(wèn)題,還實(shí)現了編輯保存功能。 查看全部
抓取網(wǎng)頁(yè)生成電子書(shū)(需要編輯的word文檔的模板全部做成HTML頁(yè)面,需要導入的jar包)
本來(lái)應該用pageOffice在線(xiàn)編輯、保存、轉成PDF、完成簽名。因為公司預算不夠,無(wú)法購買(mǎi)pageOffice組件,只能想其他辦法。
需要編輯的word文檔的模板是固定的,數量不大,但是格式要求比較嚴格,所以我決定把所有的模板都做成HTML頁(yè)面,用iText組件來(lái)轉換將 HTML 轉換為 PDF。
需要導入的jar包:

首先,需要將模板制作成類(lèi)似如下的頁(yè)面。水平線(xiàn)上的數據可以動(dòng)態(tài)填充和編輯。 Freemarker可以用來(lái)填充數據。

要使頁(yè)面可編輯,您可以使用 Html 的 contenteditable="true"

因為頁(yè)面可以動(dòng)態(tài)編輯,所以我們需要獲取編輯頁(yè)面的源代碼
var outerHTML = document.documentElement.outerHTML;
這里需要注意的是頁(yè)面中的所有標簽都需要關(guān)閉。如果沒(méi)有關(guān)閉,iText組件在轉換過(guò)程中會(huì )報錯。頁(yè)面中的字體需要是Arial,因為iText的轉換需要字體文件的支持。所以你還需要在項目中或者服務(wù)器上準備好字體文件

身體{
邊距:20px;
字體系列:SimSun;
}
以下是后臺收到頁(yè)面源代碼后的處理
@RequestMapping("acceptPage")
@ResponseBody
public Map acceptPage(HttpServletRequest request) throws Exception {
Map map=new HashMap();
String text = request.getParameter("text");
//使用jsoup來(lái)對html源碼進(jìn)行解析,能夠校驗格式的完整性,并生成一個(gè)新的Document
org.jsoup.nodes.Document parse = Jsoup.parse(text);
Elements meta = parse.getElementsByTag("meta");
String html = parse.html();
for (Element link : meta) {//手動(dòng)為一些標簽添加閉合
String s = link.outerHtml();
String s1=s.replace("/>",">");
html=html.replace(s,s1+"");
}
Elements link1 = parse.getElementsByTag("link");
for (Element link : link1) {
String s = link.outerHtml();
String s1=s.replace("/>",">");
html=html.replace(s,s1+"");
}
html=html.replaceAll(" ","");
try {
String outputFile="E:\\test.pdf";
OutputStream os = new FileOutputStream(outputFile);
//中文宋體文件路徑
String fontPath=StringUtil.trimSufffix(fontUrl, File.separator)+File.separator+"simsun.ttc";
//String fontPath= "C:\\simsun.ttc";
ITextRenderer render = new ITextRenderer();
ITextFontResolver fontResolver = render.getFontResolver();
fontResolver.addFont(fontPath, BaseFont.IDENTITY_H, BaseFont.NOT_EMBEDDED);
render.setDocumentFromString(html);
render.layout();
render.createPDF(os);
os.close();
} catch (Exception e) {
e.printStackTrace();
map.put("state",1);
map.put("msg","文件轉換失??!請聯(lián)系管理員!");
return map;
}
}
以下是對生成的PDF文件進(jìn)行簽名的操作,不再贅述

這是最終生成的PDF,樣式?jīng)]問(wèn)題,還實(shí)現了編輯保存功能。
抓取網(wǎng)頁(yè)生成電子書(shū)(在線(xiàn)閱讀網(wǎng)站URL的規律編程實(shí)現的關(guān)鍵(圖) )
網(wǎng)站優(yōu)化 ? 優(yōu)采云 發(fā)表了文章 ? 0 個(gè)評論 ? 104 次瀏覽 ? 2022-01-27 23:23
)
@1.必知常識:
許多網(wǎng)站提供在線(xiàn)閱讀書(shū)籍,但不提供這些書(shū)籍的下載,有些頁(yè)面受Javascript保護,甚至不允許復制。但是下載這些書(shū)真的不是太難,一個(gè)小程序就可以了。
@2.注意在線(xiàn)閱讀規則網(wǎng)站URL,這是編程的關(guān)鍵:
要把網(wǎng)頁(yè)一個(gè)一個(gè)刮下來(lái)放到txt里,首先要找到網(wǎng)頁(yè)URL的規則。
以本書(shū)為例《成長(cháng)比成功更重要》——新浪閱讀鏈接為:[]
點(diǎn)擊序列的部分,它的地址是[]
點(diǎn)擊它的第二部分,地址又是[]
……
點(diǎn)擊最后一段,地址是[]
很容易驗證它們的地址都是連續的數字,因此很容易編程自動(dòng)生成鏈接地址,只需使用遞增的數字生成地址即可。
@3.下載頁(yè)面的編程實(shí)現:
Python中有一個(gè)urllib包,導入,有urllib.open('#39;),這個(gè)函數返回一個(gè)文件對象,只要用返回的文件對象調用read()方法,就會(huì )返回一個(gè)字符串
@4.得到的頁(yè)面根據html標簽找到對應的文本內容:
read() 得到的頁(yè)面是一個(gè)字符串。使用該字符串的 find() 方法查找對應的文本內容從 nIdxBeg 開(kāi)始到 nIdxEnd 結束的位置。您可以輕松地使用字符串切片 strContent[nIdxBeg:nIdxEnd] 在您想要的部分截取頁(yè)面
@5.將所有你想要的截取部分保存到一個(gè)文件中。
@6. 最后寫(xiě)一個(gè)程序來(lái)讀取之前寫(xiě)好的文件,使用string函數對html標簽進(jìn)行處理,然后將處理好的html標簽的內容寫(xiě)入另一個(gè)“電子書(shū)成品”文件:
先寫(xiě)一個(gè)字典(dict),將要替換的字符串寫(xiě)入到這個(gè)字典中,然后用一個(gè)for循環(huán)迭代使用str的replace()方法將字典中對應的每一項替換為字典。將記錄的每個(gè)html標簽替換為對應的字符串,寫(xiě)入“完成的文件”——另一個(gè)txt,就大功告成了。
代碼貼在這里供參考,變量值可以作為電子書(shū)從其他頁(yè)面下載,稍作修改:
-------------------------------------------------- -------------------------------------------------- --------------
makeBook.py 下載頁(yè)面并截取需要的部分(標題和文章內容,分別通過(guò)getTitle和getContent兩個(gè)函數獲?。?,并寫(xiě)入out.txt文件。
-------------------------------------------------- -------------------------------------------------- --------------
nBeg = 30970
nEnd = 31082
strPrefix = 'http://vip.book.sina.com.cn/bo ... 39%3B
strSurfix = '.html'
strTitleBeg = """"""
strTitleEnd = """"""
strContentBeg = """"""
strContentEnd = """"""
fout = file('out.txt', 'w')
import urllib
def makeUrl(i):
"""Make the url with a number"""
return strPrefix + str(i) + strSurfix
def getContent(strPage):
nIdxBeg = strPage.find(strContentBeg)
nIdxEnd = strPage.find(strContentEnd, nIdxBeg + len(strContentBeg))
if nIdxBeg == -1 or nIdxEnd == -1:
print 'Content Not Found!'
return ''
elif nIdxBeg > nIdxEnd:
print 'Content begin index larger than end index.'
return ''
else:
return strPage[nIdxBeg + len(strContentBeg): nIdxEnd]
def getTitle(strPage):
nIdxBeg = strPage.find(strTitleBeg)
nIdxEnd = strPage.find(strTitleEnd, nIdxBeg + len(strTitleBeg))
if nIdxBeg == -1 or nIdxEnd == -1:
print 'Title Not Found!'
return ''
elif nIdxBeg > nIdxEnd:
print 'Title begin index larger than end index.'
return ''
else:
return strPage[nIdxBeg + len(strTitleBeg): nIdxEnd]
def processPage(strPage):
fout.write(getTitle(strPage))
fout.write('\n\n')
fout.write(getContent(strPage))
fout.write('\n- - - - - - - - - - - - - - - - - - - - - - - - - - -\n\n')
def writeBook():
for i in range(nBeg, nEnd):
print 'Downloading file ' + str(i)
strUrl = makeUrl(i)
nRetry = 3
strPage = ''
while nRetry:
try:
strPage = urllib.urlopen(strUrl).read()
break
except:
nRetry -= 1
continue
if not nRetry:
print 'Failed downloading file ' + str(i)
fout.write('\n\n/#####' + str(i) + '#####\\\\\\n\n')
else:
processPage(strPage)
if __name__ == '__main__':
writeBook()
fout.close()
-------------------------------------------------- -------------------------------------------------- --------------
formatTxt.py 處理前面生成的“out.txt”文件中的html標簽,然后將格式化的內容寫(xiě)入“formated.txt”
-------------------------------------------------- -------------------------------------------------- --------------
matRep = {'<p>':' ? ?', '':'\n\n'}
def formatTxt(strContent):
?? ?for i in matRep:
?? ? ? ?strContent = strContent.replace(i, matRep[i])
?? ?return strContent
if __name__ == '__main__':
?? ?strContent = file('out.txt', 'r').read()
?? ?file('formated.txt', 'w').write(formatTxt(strContent))
</p> 查看全部
抓取網(wǎng)頁(yè)生成電子書(shū)(在線(xiàn)閱讀網(wǎng)站URL的規律編程實(shí)現的關(guān)鍵(圖)
)
@1.必知常識:
許多網(wǎng)站提供在線(xiàn)閱讀書(shū)籍,但不提供這些書(shū)籍的下載,有些頁(yè)面受Javascript保護,甚至不允許復制。但是下載這些書(shū)真的不是太難,一個(gè)小程序就可以了。
@2.注意在線(xiàn)閱讀規則網(wǎng)站URL,這是編程的關(guān)鍵:
要把網(wǎng)頁(yè)一個(gè)一個(gè)刮下來(lái)放到txt里,首先要找到網(wǎng)頁(yè)URL的規則。
以本書(shū)為例《成長(cháng)比成功更重要》——新浪閱讀鏈接為:[]
點(diǎn)擊序列的部分,它的地址是[]
點(diǎn)擊它的第二部分,地址又是[]
……
點(diǎn)擊最后一段,地址是[]
很容易驗證它們的地址都是連續的數字,因此很容易編程自動(dòng)生成鏈接地址,只需使用遞增的數字生成地址即可。
@3.下載頁(yè)面的編程實(shí)現:
Python中有一個(gè)urllib包,導入,有urllib.open('#39;),這個(gè)函數返回一個(gè)文件對象,只要用返回的文件對象調用read()方法,就會(huì )返回一個(gè)字符串
@4.得到的頁(yè)面根據html標簽找到對應的文本內容:
read() 得到的頁(yè)面是一個(gè)字符串。使用該字符串的 find() 方法查找對應的文本內容從 nIdxBeg 開(kāi)始到 nIdxEnd 結束的位置。您可以輕松地使用字符串切片 strContent[nIdxBeg:nIdxEnd] 在您想要的部分截取頁(yè)面
@5.將所有你想要的截取部分保存到一個(gè)文件中。
@6. 最后寫(xiě)一個(gè)程序來(lái)讀取之前寫(xiě)好的文件,使用string函數對html標簽進(jìn)行處理,然后將處理好的html標簽的內容寫(xiě)入另一個(gè)“電子書(shū)成品”文件:
先寫(xiě)一個(gè)字典(dict),將要替換的字符串寫(xiě)入到這個(gè)字典中,然后用一個(gè)for循環(huán)迭代使用str的replace()方法將字典中對應的每一項替換為字典。將記錄的每個(gè)html標簽替換為對應的字符串,寫(xiě)入“完成的文件”——另一個(gè)txt,就大功告成了。
代碼貼在這里供參考,變量值可以作為電子書(shū)從其他頁(yè)面下載,稍作修改:
-------------------------------------------------- -------------------------------------------------- --------------
makeBook.py 下載頁(yè)面并截取需要的部分(標題和文章內容,分別通過(guò)getTitle和getContent兩個(gè)函數獲?。?,并寫(xiě)入out.txt文件。
-------------------------------------------------- -------------------------------------------------- --------------
nBeg = 30970
nEnd = 31082
strPrefix = 'http://vip.book.sina.com.cn/bo ... 39%3B
strSurfix = '.html'
strTitleBeg = """"""
strTitleEnd = """"""
strContentBeg = """"""
strContentEnd = """"""
fout = file('out.txt', 'w')
import urllib
def makeUrl(i):
"""Make the url with a number"""
return strPrefix + str(i) + strSurfix
def getContent(strPage):
nIdxBeg = strPage.find(strContentBeg)
nIdxEnd = strPage.find(strContentEnd, nIdxBeg + len(strContentBeg))
if nIdxBeg == -1 or nIdxEnd == -1:
print 'Content Not Found!'
return ''
elif nIdxBeg > nIdxEnd:
print 'Content begin index larger than end index.'
return ''
else:
return strPage[nIdxBeg + len(strContentBeg): nIdxEnd]
def getTitle(strPage):
nIdxBeg = strPage.find(strTitleBeg)
nIdxEnd = strPage.find(strTitleEnd, nIdxBeg + len(strTitleBeg))
if nIdxBeg == -1 or nIdxEnd == -1:
print 'Title Not Found!'
return ''
elif nIdxBeg > nIdxEnd:
print 'Title begin index larger than end index.'
return ''
else:
return strPage[nIdxBeg + len(strTitleBeg): nIdxEnd]
def processPage(strPage):
fout.write(getTitle(strPage))
fout.write('\n\n')
fout.write(getContent(strPage))
fout.write('\n- - - - - - - - - - - - - - - - - - - - - - - - - - -\n\n')
def writeBook():
for i in range(nBeg, nEnd):
print 'Downloading file ' + str(i)
strUrl = makeUrl(i)
nRetry = 3
strPage = ''
while nRetry:
try:
strPage = urllib.urlopen(strUrl).read()
break
except:
nRetry -= 1
continue
if not nRetry:
print 'Failed downloading file ' + str(i)
fout.write('\n\n/#####' + str(i) + '#####\\\\\\n\n')
else:
processPage(strPage)
if __name__ == '__main__':
writeBook()
fout.close()
-------------------------------------------------- -------------------------------------------------- --------------
formatTxt.py 處理前面生成的“out.txt”文件中的html標簽,然后將格式化的內容寫(xiě)入“formated.txt”
-------------------------------------------------- -------------------------------------------------- --------------
matRep = {'<p>':' ? ?', '':'\n\n'}
def formatTxt(strContent):
?? ?for i in matRep:
?? ? ? ?strContent = strContent.replace(i, matRep[i])
?? ?return strContent
if __name__ == '__main__':
?? ?strContent = file('out.txt', 'r').read()
?? ?file('formated.txt', 'w').write(formatTxt(strContent))
</p>


