抓取網(wǎng)頁(yè)生成電子書(shū)
抓取網(wǎng)頁(yè)生成電子書(shū)(從里抓取書(shū)籍列表的書(shū)籍信息和每本書(shū)對應的ISBN碼)
網(wǎng)站優(yōu)化 ? 優(yōu)采云 發(fā)表了文章 ? 0 個(gè)評論 ? 231 次瀏覽 ? 2022-03-16 10:16
本文首先抓取圖書(shū)列表的圖書(shū)信息和每本書(shū)對應的ISBN碼。
一、分析需求和網(wǎng)站結構
這個(gè)網(wǎng)站的結構很簡(jiǎn)單,分頁(yè)+書(shū)單+書(shū)詳情頁(yè)。
獲取圖書(shū)的詳細信息和ISBN碼,我們需要遍歷所有頁(yè)碼,進(jìn)入圖書(shū)列表,然后從圖書(shū)列表中進(jìn)入每本書(shū)的詳細信息頁(yè)面,這樣就可以抓取到詳細信息和ISBN代碼。
二、 從分頁(yè)開(kāi)始遍歷書(shū)單的每一頁(yè)
通過(guò)查看分頁(yè)功能的HTML代碼,可以通過(guò)class="current"定位到當前頁(yè)碼所在的span標簽。這個(gè)span標簽的下一個(gè)兄弟a標簽是指向下一頁(yè)的鏈接所在的標簽。
通過(guò)比較最后一頁(yè)的span可以發(fā)現,在最后一頁(yè)中,class="current"找到的span標簽沒(méi)有下一個(gè)兄弟a標簽。所以我們可以用它來(lái)判斷我們是否已經(jīng)到了最后一頁(yè)。代碼顯示如下:
# Get the next page url from the current page url
def get_next_page_url(url):
page = urlopen(url)
soup_page = BeautifulSoup(page, 'lxml')
page.close()
# Get current page and next page tag
current_page_tag = soup_page.find(class_="current")
next_page_tag = current_page_tag.find_next_sibling()
# Check if the current page is the last one
if next_page_tag is None:
next_page_url = None
else:
next_page_url = next_page_tag['href']
return next_page_url
三、從書(shū)單中找到詳細頁(yè)面的鏈接
點(diǎn)擊書(shū)單中的書(shū)名或封面圖進(jìn)入詳情,然后選擇書(shū)名和封面圖之一,在此處選擇書(shū)名。
我們可以通過(guò)查找class="entry-title"來(lái)定位書(shū)名所在的h2標簽,然后通過(guò)這個(gè)標簽的a屬性獲取鏈接所在的a標簽,再通過(guò)字符串獲取鏈接a 標簽的屬性。
代碼顯示如下:
# Get the book detail urls by page url
def get_book_detail_urls(url):
page = urlopen(url)
soup = BeautifulSoup(page, 'lxml')
page.close()
urls = []
book_header_tags = soup.find_all(class_="entry-title")
for book_header_tag in book_header_tags:
urls.append(book_header_tag.a['href'])
return urls
四、從圖書(shū)詳情頁(yè)面獲取書(shū)名和 ISBN 碼
通過(guò)查看圖書(shū)詳情頁(yè)的HTML代碼,我們可以通過(guò)查找class="single-title"獲取書(shū)名,定位到書(shū)名所在的h1標簽,然后定位到"Isbn:"所在的dt標簽通過(guò)查找 text="Isbn:" 進(jìn)行定位,該標簽的下一個(gè)兄弟節點(diǎn)就是該書(shū)的 ISBN 碼所在的標簽,通過(guò)該標簽的字符串屬性可以獲取 ISBN 碼的內容。
代碼顯示如下:
# Get the book detail info by book detail url
def get_book_detail_info(url):
page = urlopen(url)
book_detail_soup = BeautifulSoup(page, 'lxml')
page.close()
title_tag = book_detail_soup.find(class_="single-title")
title = title_tag.string
isbn_key_tag = book_detail_soup.find(text="Isbn:").parent
isbn_tag = isbn_key_tag.find_next_sibling()
isbn = isbn_tag.string.strip() # Remove the whitespace with the strip method
return { 'title': title, 'isbn': isbn }
五、整合三部分代碼
def run():
url = "http://www.allitebooks.com/pro ... ot%3B
book_info_list = []
def scapping(page_url):
book_detail_urls = get_book_detail_urls(page_url)
for book_detail_url in book_detail_urls:
# print(book_detail_url)
book_info = get_book_detail_info(book_detail_url)
print(book_info)
book_info_list.append(book_info)
next_page_url = get_next_page_url(page_url)
if next_page_url is not None:
scapping(next_page_url)
else:
return
scapping(url)
運行結果
六、將結果寫(xiě)入文件以供進(jìn)一步處理
def save_to_csv(list):
with open('books.csv', 'w', newline='') as fp:
a = csv.writer(fp, delimiter=',')
a.writerow(['title','isbn'])
a.writerows(list)
待續...
完整代碼請移步github:
Beautiful Soup 基礎知識:Web 爬蟲(chóng):從刮書(shū)信息和刮價(jià)格 (1): Basics Beautiful Soup
我們正處于大數據時(shí)代,歡迎對數據處理感興趣的朋友查看另一個(gè)系列隨筆:Using Python for Data Analysis Basics 系列隨筆小結
接下來(lái)的作文是網(wǎng)站根據得到的ISBN碼得到每本書(shū)對應的價(jià)格,通過(guò)數據分析的知識對得到的數據進(jìn)行處理,最后輸出成csv文件。感興趣的朋友歡迎關(guān)注本博客,也歡迎留言討論。 查看全部
抓取網(wǎng)頁(yè)生成電子書(shū)(從里抓取書(shū)籍列表的書(shū)籍信息和每本書(shū)對應的ISBN碼)
本文首先抓取圖書(shū)列表的圖書(shū)信息和每本書(shū)對應的ISBN碼。
一、分析需求和網(wǎng)站結構
這個(gè)網(wǎng)站的結構很簡(jiǎn)單,分頁(yè)+書(shū)單+書(shū)詳情頁(yè)。
獲取圖書(shū)的詳細信息和ISBN碼,我們需要遍歷所有頁(yè)碼,進(jìn)入圖書(shū)列表,然后從圖書(shū)列表中進(jìn)入每本書(shū)的詳細信息頁(yè)面,這樣就可以抓取到詳細信息和ISBN代碼。
二、 從分頁(yè)開(kāi)始遍歷書(shū)單的每一頁(yè)

通過(guò)查看分頁(yè)功能的HTML代碼,可以通過(guò)class="current"定位到當前頁(yè)碼所在的span標簽。這個(gè)span標簽的下一個(gè)兄弟a標簽是指向下一頁(yè)的鏈接所在的標簽。
通過(guò)比較最后一頁(yè)的span可以發(fā)現,在最后一頁(yè)中,class="current"找到的span標簽沒(méi)有下一個(gè)兄弟a標簽。所以我們可以用它來(lái)判斷我們是否已經(jīng)到了最后一頁(yè)。代碼顯示如下:
# Get the next page url from the current page url
def get_next_page_url(url):
page = urlopen(url)
soup_page = BeautifulSoup(page, 'lxml')
page.close()
# Get current page and next page tag
current_page_tag = soup_page.find(class_="current")
next_page_tag = current_page_tag.find_next_sibling()
# Check if the current page is the last one
if next_page_tag is None:
next_page_url = None
else:
next_page_url = next_page_tag['href']
return next_page_url
三、從書(shū)單中找到詳細頁(yè)面的鏈接
點(diǎn)擊書(shū)單中的書(shū)名或封面圖進(jìn)入詳情,然后選擇書(shū)名和封面圖之一,在此處選擇書(shū)名。

我們可以通過(guò)查找class="entry-title"來(lái)定位書(shū)名所在的h2標簽,然后通過(guò)這個(gè)標簽的a屬性獲取鏈接所在的a標簽,再通過(guò)字符串獲取鏈接a 標簽的屬性。
代碼顯示如下:
# Get the book detail urls by page url
def get_book_detail_urls(url):
page = urlopen(url)
soup = BeautifulSoup(page, 'lxml')
page.close()
urls = []
book_header_tags = soup.find_all(class_="entry-title")
for book_header_tag in book_header_tags:
urls.append(book_header_tag.a['href'])
return urls
四、從圖書(shū)詳情頁(yè)面獲取書(shū)名和 ISBN 碼

通過(guò)查看圖書(shū)詳情頁(yè)的HTML代碼,我們可以通過(guò)查找class="single-title"獲取書(shū)名,定位到書(shū)名所在的h1標簽,然后定位到"Isbn:"所在的dt標簽通過(guò)查找 text="Isbn:" 進(jìn)行定位,該標簽的下一個(gè)兄弟節點(diǎn)就是該書(shū)的 ISBN 碼所在的標簽,通過(guò)該標簽的字符串屬性可以獲取 ISBN 碼的內容。
代碼顯示如下:
# Get the book detail info by book detail url
def get_book_detail_info(url):
page = urlopen(url)
book_detail_soup = BeautifulSoup(page, 'lxml')
page.close()
title_tag = book_detail_soup.find(class_="single-title")
title = title_tag.string
isbn_key_tag = book_detail_soup.find(text="Isbn:").parent
isbn_tag = isbn_key_tag.find_next_sibling()
isbn = isbn_tag.string.strip() # Remove the whitespace with the strip method
return { 'title': title, 'isbn': isbn }
五、整合三部分代碼
def run():
url = "http://www.allitebooks.com/pro ... ot%3B
book_info_list = []
def scapping(page_url):
book_detail_urls = get_book_detail_urls(page_url)
for book_detail_url in book_detail_urls:
# print(book_detail_url)
book_info = get_book_detail_info(book_detail_url)
print(book_info)
book_info_list.append(book_info)
next_page_url = get_next_page_url(page_url)
if next_page_url is not None:
scapping(next_page_url)
else:
return
scapping(url)
運行結果

六、將結果寫(xiě)入文件以供進(jìn)一步處理
def save_to_csv(list):
with open('books.csv', 'w', newline='') as fp:
a = csv.writer(fp, delimiter=',')
a.writerow(['title','isbn'])
a.writerows(list)
待續...
完整代碼請移步github:
Beautiful Soup 基礎知識:Web 爬蟲(chóng):從刮書(shū)信息和刮價(jià)格 (1): Basics Beautiful Soup
我們正處于大數據時(shí)代,歡迎對數據處理感興趣的朋友查看另一個(gè)系列隨筆:Using Python for Data Analysis Basics 系列隨筆小結
接下來(lái)的作文是網(wǎng)站根據得到的ISBN碼得到每本書(shū)對應的價(jià)格,通過(guò)數據分析的知識對得到的數據進(jìn)行處理,最后輸出成csv文件。感興趣的朋友歡迎關(guān)注本博客,也歡迎留言討論。
抓取網(wǎng)頁(yè)生成電子書(shū)(如何將網(wǎng)頁(yè)文章批量抓取、生成電子書(shū)、直接推送到Kindle)
網(wǎng)站優(yōu)化 ? 優(yōu)采云 發(fā)表了文章 ? 0 個(gè)評論 ? 136 次瀏覽 ? 2022-03-14 07:13
我一直在研究如何將我關(guān)心的網(wǎng)頁(yè)或 文章 放入我的 Kindle 中進(jìn)行認真閱讀,但我已經(jīng)很長(cháng)時(shí)間沒(méi)有取得任何真正的進(jìn)展。手工排版制作電子書(shū)的方法雖然簡(jiǎn)單易行,但對于短小、更新頻繁的網(wǎng)頁(yè)文章來(lái)說(shuō)效率低下。如果有一個(gè)工具可以文章批量抓取網(wǎng)頁(yè),生成電子書(shū),然后直接推送到Kindle上就好了。Doocer 就是這樣一種實(shí)用程序。
Doocer是@lepture開(kāi)發(fā)的在線(xiàn)服務(wù),允許用戶(hù)在Pocket Read Later賬號中提交URL、RSS提要地址和文章,然后逐一或批量制作成ePub和MOBI電子書(shū). 您可以直接在 Doocer 中閱讀所有文章,也可以將它們推送到 Kindle、Apple Books 中閱讀。
真的很好的閱讀體驗
Doocer 生成的電子書(shū)在排版方面非常出色。應該有的內容很多,不應該有的內容不多。本書(shū)不僅封面圖文并茂,還有文章目錄、網(wǎng)站出處、文章原作者等信息。Doocer生成的MOBI電子書(shū)支持KF8標準,因此支持Kindle原生替換自定義字體。
由于網(wǎng)站文章通常有標準和通用的排版規范,Doocer生成的電子書(shū)文章中的大小標題和列表圖例與原網(wǎng)頁(yè)文章高度一致@>。原文章中的所有超鏈接也被保留,評論、廣告等內容全部丟棄。整本書(shū)的閱讀體驗非常友好。(當然,如果原網(wǎng)頁(yè)文章的布局沒(méi)有規則,那么生成的電子書(shū)也可能面目全非。)
將網(wǎng)頁(yè) 文章 制作成電子書(shū)
Doocer完成注冊登錄后,我們就可以開(kāi)始將網(wǎng)頁(yè)文章制作成電子書(shū)了。首先,我們點(diǎn)擊“NEW BOOK”按鈕新建電子書(shū),輸入電子書(shū)名稱(chēng)。接下來(lái)選擇右上角的“添加”以添加 文章 URL 或 RSS 提要地址。
以小眾網(wǎng)站的文章為例,我們選擇“FEED”,在輸入框中粘貼RSS地址,然后點(diǎn)擊“PARSE”,那么小眾最近文章的列表就會(huì )出現為我們顯示添加到。我們可以根據需要選擇,也可以點(diǎn)擊“SELECT ALL”全選文章。最后,下拉到頁(yè)面底部,選擇“SAVE”,那么這些文章就會(huì )被添加到書(shū)里。
其實(shí)Doocer網(wǎng)頁(yè)與RSS工具很相似,實(shí)現了從網(wǎng)站批量抓取文章并集中展示的功能。
要將這些 文章 轉換為電子書(shū)并將它們推送到 Kindle,我們必須做一些簡(jiǎn)單的事情。
首先,根據Doocer個(gè)人設置頁(yè)面中的提示,我們打開(kāi)它,將Doocer電子書(shū)的發(fā)送地址添加到個(gè)人文檔接收地址中。完成后,我們在輸入框中填寫(xiě)Kindle的個(gè)人文檔接收地址,點(diǎn)擊保存。
最后,我們在 Doocer 中打開(kāi)《少數派》這本書(shū),在頁(yè)面上找到“Publish”,選擇 Send to Kindle。大約 10 到 30 分鐘,Doocer 將完成圖書(shū)制作并將圖書(shū)推送到 Kindle。
仍有一些問(wèn)題需要注意
Doocer目前處于beta測試階段,還有一些bug,尤其是中文網(wǎng)站經(jīng)常出現問(wèn)題。好在Doocer官網(wǎng)有開(kāi)發(fā)者對話(huà)頻道,可以直接聯(lián)系他幫忙解決。
自動(dòng)化所有操作的過(guò)程是我認為 Doocer 最需要做的事情。Doocer可以像RSS工具一樣抓取網(wǎng)頁(yè)中更新的文章,但是要抓取新的文章并生成電子書(shū)并推送,仍然需要手動(dòng)完成。如果整個(gè)過(guò)程可以自動(dòng)化,RSS - MOBI - Kindle 一口氣,相信它的用處會(huì )更好。
目前,Doocer 的所有功能都可以免費使用。 查看全部
抓取網(wǎng)頁(yè)生成電子書(shū)(如何將網(wǎng)頁(yè)文章批量抓取、生成電子書(shū)、直接推送到Kindle)
我一直在研究如何將我關(guān)心的網(wǎng)頁(yè)或 文章 放入我的 Kindle 中進(jìn)行認真閱讀,但我已經(jīng)很長(cháng)時(shí)間沒(méi)有取得任何真正的進(jìn)展。手工排版制作電子書(shū)的方法雖然簡(jiǎn)單易行,但對于短小、更新頻繁的網(wǎng)頁(yè)文章來(lái)說(shuō)效率低下。如果有一個(gè)工具可以文章批量抓取網(wǎng)頁(yè),生成電子書(shū),然后直接推送到Kindle上就好了。Doocer 就是這樣一種實(shí)用程序。
Doocer是@lepture開(kāi)發(fā)的在線(xiàn)服務(wù),允許用戶(hù)在Pocket Read Later賬號中提交URL、RSS提要地址和文章,然后逐一或批量制作成ePub和MOBI電子書(shū). 您可以直接在 Doocer 中閱讀所有文章,也可以將它們推送到 Kindle、Apple Books 中閱讀。

真的很好的閱讀體驗
Doocer 生成的電子書(shū)在排版方面非常出色。應該有的內容很多,不應該有的內容不多。本書(shū)不僅封面圖文并茂,還有文章目錄、網(wǎng)站出處、文章原作者等信息。Doocer生成的MOBI電子書(shū)支持KF8標準,因此支持Kindle原生替換自定義字體。
由于網(wǎng)站文章通常有標準和通用的排版規范,Doocer生成的電子書(shū)文章中的大小標題和列表圖例與原網(wǎng)頁(yè)文章高度一致@>。原文章中的所有超鏈接也被保留,評論、廣告等內容全部丟棄。整本書(shū)的閱讀體驗非常友好。(當然,如果原網(wǎng)頁(yè)文章的布局沒(méi)有規則,那么生成的電子書(shū)也可能面目全非。)

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

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

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

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

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

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

真的很好的閱讀體驗
Doocer 生成的電子書(shū)在排版方面非常出色。應該有的內容很多,不應該有的內容不多。本書(shū)不僅封面圖文并茂,還有文章目錄、網(wǎng)站出處、文章原作者等信息。Doocer生成的MOBI電子書(shū)支持KF8標準,因此支持Kindle原生替換自定義字體。
由于網(wǎng)站文章通常有標準和通用的排版規范,Doocer生成的電子書(shū)文章中的大小標題和列表圖例與原網(wǎng)頁(yè)文章高度一致@>。原文章中的所有超鏈接也被保留,評論、廣告等內容全部丟棄。整本書(shū)的閱讀體驗非常友好。(當然,如果原網(wǎng)頁(yè)文章的布局沒(méi)有規則,那么生成的電子書(shū)也可能面目全非。)

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

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

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

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

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

仍有一些問(wèn)題需要注意
Doocer目前處于beta測試階段,還有一些bug,尤其是中文網(wǎng)站經(jīng)常出現問(wèn)題。好在Doocer官網(wǎng)有開(kāi)發(fā)者對話(huà)頻道,可以直接聯(lián)系他幫忙解決。
自動(dòng)化所有操作的過(guò)程是我認為 Doocer 最需要做的事情。Doocer可以像RSS工具一樣抓取網(wǎng)頁(yè)中更新的文章,但是要抓取新的文章并生成電子書(shū)并推送,仍然需要手動(dòng)完成。如果整個(gè)過(guò)程可以自動(dòng)化,RSS - MOBI - Kindle 一口氣,相信它的用處會(huì )更好。
目前,Doocer 的所有功能都可以免費使用。
抓取網(wǎng)頁(yè)生成電子書(shū)(一步步解析單個(gè)頁(yè)面,得到該頁(yè)書(shū)籍鏈接列表得到)
網(wǎng)站優(yōu)化 ? 優(yōu)采云 發(fā)表了文章 ? 0 個(gè)評論 ? 163 次瀏覽 ? 2022-03-14 07:08
2. 解析單個(gè)頁(yè)面以獲取該頁(yè)面上的書(shū)籍鏈接列表
3. 轉到書(shū)頁(yè)
* 判斷是否可以下載
* 如果可以下載,請下載所有格式的書(shū)籍
其次,為了獲得爬蟲(chóng)的健壯性,我們需要保證每次網(wǎng)頁(yè)加載成功,文件下載完成,我會(huì )在后面的內容中一步一步介紹。
實(shí)施過(guò)程
Selenium 可以模擬打開(kāi)瀏覽器。在此之前,我們需要下載瀏覽器的驅動(dòng)程序。在本文中,我們使用的是chrome瀏覽器,Firefox也是常用的瀏覽器。步驟類(lèi)似,不再贅述。
硒的安裝:
sudo pip install selenium
然后下載chrome的webdriver,直接保存到本地,比如/usr/bin,然后設置selenium的基本設置
import re#正則表達式
import random#隨機選擇
import subprocess# 執行bash命令
from multiprocessing import Pool#建立線(xiàn)程池,并行爬取加快速度
from selenium import webdriver
# set chromedriver path and download path
chromeOptions = webdriver.ChromeOptions()
dl_path="~/Downloads/KanCloud"#設置下載路徑
chromedriver="/usr/bin/chromedriver"#修改為你的chromedriver路徑
prefs = {"download.default_directory" : dl_path}
chromeOptions.add_experimental_option("prefs",prefs)
#可以為webdriver設置代理,自動(dòng)獲得代理IP地址下面會(huì )解釋,這里注釋掉
#PROXY='1.82.216.134:80'
#chromeOptions.add_argument('--proxy-server=%s' % PROXY)
# url_start='http://www.kancloud.cn/explore/top'
#建立一個(gè)webdriver對象
driver = webdriver.Chrome(chrome_options=chromeOptions)
driver.get('http://www.kancloud.cn/digest/ ... %2339;)#用chrome打開(kāi)這個(gè)網(wǎng)頁(yè)
運行上面的代碼,打開(kāi)一個(gè)chrome標簽,如下圖:
點(diǎn)擊下載按鈕,我們看到有PDF、epub、mobi三個(gè)下載選項。為了模擬點(diǎn)擊動(dòng)作,我們需要獲取元素的位置。這時(shí)候我們就可以使用chrome的inspect功能了,快捷鍵是 Ctrl+shift+I ,或者將鼠標懸停在下載上,右鍵選擇inspect,效果如下:
選擇右邊高亮的代碼,右鍵->復制->復制xpath,可以得到元素的xpath
//*[@id="manualDownload"]/span/b
然后使用webdriver本身的xpath搜索功能獲取元素,并模擬點(diǎn)擊操作
運行上面這句話(huà),我們可以看到網(wǎng)站確實(shí)響應了,支持下載的電子書(shū)格式有3種。這一步點(diǎn)擊下載按鈕是必須的,否則直接點(diǎn)擊epub會(huì )報 element not visible 的錯誤。接下來(lái)我們演示下載epub,鼠標懸停在epub上,右鍵查看,可以得到下載epub的xpath,同上
driver.find_element_by_xpath('//*[@id="manualDownload"]/div/div/ul/li[2]/a').click()
這樣我們就可以把這本epub電子書(shū)下載到我們指定的路徑了。
這是 Selenium 的基本應用。它還有一些其他的定位元素的方法和模擬操作的功能,比如把網(wǎng)頁(yè)往下拉,因為有些網(wǎng)站會(huì )根據用戶(hù)的下拉情況來(lái)渲染網(wǎng)頁(yè),越往下拉,顯示的內容越多。詳情請查看 selenium 的官方文檔。
我們對每一頁(yè)的每一本書(shū)執行上述過(guò)程,然后我們可以爬取整個(gè)站點(diǎn)的書(shū)籍,前提是你的網(wǎng)速夠快,運氣夠好。這是因為在持續爬取過(guò)程中會(huì )出現一些異常,例如
1. webdriver 將無(wú)法打開(kāi)網(wǎng)頁(yè)
2. 下載完成前打開(kāi)下一個(gè)網(wǎng)頁(yè),導致webdriver負擔過(guò)重,無(wú)法加載網(wǎng)頁(yè)
3. 網(wǎng)站可能是基于IP地址的反爬蟲(chóng)
下一篇我們將解決以上問(wèn)題,使用多進(jìn)程加速(webdriver太慢,無(wú)法打開(kāi)網(wǎng)頁(yè))。 查看全部
抓取網(wǎng)頁(yè)生成電子書(shū)(一步步解析單個(gè)頁(yè)面,得到該頁(yè)書(shū)籍鏈接列表得到)
2. 解析單個(gè)頁(yè)面以獲取該頁(yè)面上的書(shū)籍鏈接列表
3. 轉到書(shū)頁(yè)
* 判斷是否可以下載
* 如果可以下載,請下載所有格式的書(shū)籍
其次,為了獲得爬蟲(chóng)的健壯性,我們需要保證每次網(wǎng)頁(yè)加載成功,文件下載完成,我會(huì )在后面的內容中一步一步介紹。
實(shí)施過(guò)程
Selenium 可以模擬打開(kāi)瀏覽器。在此之前,我們需要下載瀏覽器的驅動(dòng)程序。在本文中,我們使用的是chrome瀏覽器,Firefox也是常用的瀏覽器。步驟類(lèi)似,不再贅述。
硒的安裝:
sudo pip install selenium
然后下載chrome的webdriver,直接保存到本地,比如/usr/bin,然后設置selenium的基本設置
import re#正則表達式
import random#隨機選擇
import subprocess# 執行bash命令
from multiprocessing import Pool#建立線(xiàn)程池,并行爬取加快速度
from selenium import webdriver
# set chromedriver path and download path
chromeOptions = webdriver.ChromeOptions()
dl_path="~/Downloads/KanCloud"#設置下載路徑
chromedriver="/usr/bin/chromedriver"#修改為你的chromedriver路徑
prefs = {"download.default_directory" : dl_path}
chromeOptions.add_experimental_option("prefs",prefs)
#可以為webdriver設置代理,自動(dòng)獲得代理IP地址下面會(huì )解釋,這里注釋掉
#PROXY='1.82.216.134:80'
#chromeOptions.add_argument('--proxy-server=%s' % PROXY)
# url_start='http://www.kancloud.cn/explore/top'
#建立一個(gè)webdriver對象
driver = webdriver.Chrome(chrome_options=chromeOptions)
driver.get('http://www.kancloud.cn/digest/ ... %2339;)#用chrome打開(kāi)這個(gè)網(wǎng)頁(yè)
運行上面的代碼,打開(kāi)一個(gè)chrome標簽,如下圖:
點(diǎn)擊下載按鈕,我們看到有PDF、epub、mobi三個(gè)下載選項。為了模擬點(diǎn)擊動(dòng)作,我們需要獲取元素的位置。這時(shí)候我們就可以使用chrome的inspect功能了,快捷鍵是 Ctrl+shift+I ,或者將鼠標懸停在下載上,右鍵選擇inspect,效果如下:
選擇右邊高亮的代碼,右鍵->復制->復制xpath,可以得到元素的xpath
//*[@id="manualDownload"]/span/b
然后使用webdriver本身的xpath搜索功能獲取元素,并模擬點(diǎn)擊操作
運行上面這句話(huà),我們可以看到網(wǎng)站確實(shí)響應了,支持下載的電子書(shū)格式有3種。這一步點(diǎn)擊下載按鈕是必須的,否則直接點(diǎn)擊epub會(huì )報 element not visible 的錯誤。接下來(lái)我們演示下載epub,鼠標懸停在epub上,右鍵查看,可以得到下載epub的xpath,同上
driver.find_element_by_xpath('//*[@id="manualDownload"]/div/div/ul/li[2]/a').click()
這樣我們就可以把這本epub電子書(shū)下載到我們指定的路徑了。
這是 Selenium 的基本應用。它還有一些其他的定位元素的方法和模擬操作的功能,比如把網(wǎng)頁(yè)往下拉,因為有些網(wǎng)站會(huì )根據用戶(hù)的下拉情況來(lái)渲染網(wǎng)頁(yè),越往下拉,顯示的內容越多。詳情請查看 selenium 的官方文檔。
我們對每一頁(yè)的每一本書(shū)執行上述過(guò)程,然后我們可以爬取整個(gè)站點(diǎn)的書(shū)籍,前提是你的網(wǎng)速夠快,運氣夠好。這是因為在持續爬取過(guò)程中會(huì )出現一些異常,例如
1. webdriver 將無(wú)法打開(kāi)網(wǎng)頁(yè)
2. 下載完成前打開(kāi)下一個(gè)網(wǎng)頁(yè),導致webdriver負擔過(guò)重,無(wú)法加載網(wǎng)頁(yè)
3. 網(wǎng)站可能是基于IP地址的反爬蟲(chóng)
下一篇我們將解決以上問(wèn)題,使用多進(jìn)程加速(webdriver太慢,無(wú)法打開(kāi)網(wǎng)頁(yè))。
抓取網(wǎng)頁(yè)生成電子書(shū)(如何將網(wǎng)頁(yè)文章批量抓取、生成電子書(shū)、直接推送到Kindle)
網(wǎng)站優(yōu)化 ? 優(yōu)采云 發(fā)表了文章 ? 0 個(gè)評論 ? 125 次瀏覽 ? 2022-03-13 07:14
我一直在研究如何將我關(guān)心的網(wǎng)頁(yè)或 文章 放入我的 Kindle 中進(jìn)行認真閱讀,但我已經(jīng)很長(cháng)時(shí)間沒(méi)有取得任何真正的進(jìn)展。手工排版制作電子書(shū)的方法雖然簡(jiǎn)單易行,但對于短小、更新頻繁的網(wǎng)頁(yè)文章來(lái)說(shuō)效率低下。如果有一個(gè)工具可以文章批量抓取網(wǎng)頁(yè),生成電子書(shū),然后直接推送到Kindle上就好了。Doocer 就是這樣一種實(shí)用程序。
Doocer是@lepture開(kāi)發(fā)的在線(xiàn)服務(wù),允許用戶(hù)在Pocket Read Later賬戶(hù)中提交URL、RSS提要地址和文章,然后逐一或批量制作成ePub和MOBI電子書(shū). 您可以直接在 Doocer 中閱讀所有文章,也可以將它們推送到 Kindle、Apple Books 中閱讀。
真的很好的閱讀體驗
Doocer 生成的電子書(shū)在排版方面非常出色。應該有的內容很多,不應該有的內容不多。本書(shū)不僅封面圖文并茂,還有文章目錄、網(wǎng)站出處、文章原作者等信息。Doocer生成的MOBI電子書(shū)支持KF8標準,因此支持Kindle原生替換自定義字體。
由于網(wǎng)站文章通常有標準和通用的排版規范,Doocer生成的電子書(shū)文章中的大小標題和列表圖例與原網(wǎng)頁(yè)文章高度一致@>。原文章中的所有超鏈接也被保留,評論、廣告等內容全部丟棄。整本書(shū)的閱讀體驗非常友好。(當然,如果原網(wǎng)頁(yè)文章的布局沒(méi)有規則,那么生成的電子書(shū)也可能面目全非。)
將網(wǎng)頁(yè) 文章 制作成電子書(shū)
Doocer完成注冊登錄后,我們就可以開(kāi)始將網(wǎng)頁(yè)文章制作成電子書(shū)了。首先,我們點(diǎn)擊“NEW BOOK”按鈕新建電子書(shū),輸入電子書(shū)名稱(chēng)。接下來(lái)選擇右上角的“添加”以添加 文章 URL 或 RSS 提要地址。
以小眾網(wǎng)頁(yè)的文章為例,我們選擇“FEED”,在輸入框中粘貼RSS地址,然后點(diǎn)擊“PARSE”,那么小眾最近的文章列表就會(huì )出現為我們顯示添加到。我們可以根據需要選擇,也可以點(diǎn)擊“SELECT ALL”全選文章。最后,下拉到頁(yè)面底部,選擇“SAVE”,那么這些文章就會(huì )被添加到書(shū)里。
其實(shí)Doocer網(wǎng)頁(yè)與RSS工具很相似,實(shí)現了從網(wǎng)站批量抓取文章并集中展示的功能。
要將這些 文章 轉換為電子書(shū)并將它們推送到 Kindle,我們必須做一些簡(jiǎn)單的事情。
首先,根據Doocer個(gè)人設置頁(yè)面的提示,打開(kāi)Amazon Kindle的個(gè)人文檔設置,將Doocer電子書(shū)的發(fā)送地址添加到個(gè)人文檔接收地址中。完成后,我們在輸入框中填寫(xiě)Kindle的個(gè)人文檔接收地址,點(diǎn)擊保存。
最后,我們在 Doocer 中打開(kāi)《少數派》這本書(shū),在頁(yè)面上找到“Publish”,選擇 Send to Kindle。大約 10 到 30 分鐘,Doocer 將完成圖書(shū)制作并將圖書(shū)推送到 Kindle。
仍有一些問(wèn)題需要注意
Doocer目前處于beta測試階段,還有一些bug,尤其是中文網(wǎng)站經(jīng)常出現問(wèn)題。好在Doocer官網(wǎng)有開(kāi)發(fā)者對話(huà)頻道,可以直接聯(lián)系他幫忙解決。
自動(dòng)化所有操作的過(guò)程是我認為 Doocer 最需要做的事情。Doocer可以像RSS工具一樣抓取網(wǎng)頁(yè)中更新的文章,但是要抓取新的文章并生成電子書(shū)并推送,仍然需要手動(dòng)完成。如果整個(gè)過(guò)程可以自動(dòng)化,RSS - MOBI - Kindle 一口氣,相信它的用處會(huì )更好。
目前,Doocer 的所有功能都可以免費使用。 查看全部
抓取網(wǎng)頁(yè)生成電子書(shū)(如何將網(wǎng)頁(yè)文章批量抓取、生成電子書(shū)、直接推送到Kindle)
我一直在研究如何將我關(guān)心的網(wǎng)頁(yè)或 文章 放入我的 Kindle 中進(jìn)行認真閱讀,但我已經(jīng)很長(cháng)時(shí)間沒(méi)有取得任何真正的進(jìn)展。手工排版制作電子書(shū)的方法雖然簡(jiǎn)單易行,但對于短小、更新頻繁的網(wǎng)頁(yè)文章來(lái)說(shuō)效率低下。如果有一個(gè)工具可以文章批量抓取網(wǎng)頁(yè),生成電子書(shū),然后直接推送到Kindle上就好了。Doocer 就是這樣一種實(shí)用程序。
Doocer是@lepture開(kāi)發(fā)的在線(xiàn)服務(wù),允許用戶(hù)在Pocket Read Later賬戶(hù)中提交URL、RSS提要地址和文章,然后逐一或批量制作成ePub和MOBI電子書(shū). 您可以直接在 Doocer 中閱讀所有文章,也可以將它們推送到 Kindle、Apple Books 中閱讀。

真的很好的閱讀體驗
Doocer 生成的電子書(shū)在排版方面非常出色。應該有的內容很多,不應該有的內容不多。本書(shū)不僅封面圖文并茂,還有文章目錄、網(wǎng)站出處、文章原作者等信息。Doocer生成的MOBI電子書(shū)支持KF8標準,因此支持Kindle原生替換自定義字體。
由于網(wǎng)站文章通常有標準和通用的排版規范,Doocer生成的電子書(shū)文章中的大小標題和列表圖例與原網(wǎng)頁(yè)文章高度一致@>。原文章中的所有超鏈接也被保留,評論、廣告等內容全部丟棄。整本書(shū)的閱讀體驗非常友好。(當然,如果原網(wǎng)頁(yè)文章的布局沒(méi)有規則,那么生成的電子書(shū)也可能面目全非。)

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

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

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

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

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

仍有一些問(wèn)題需要注意
Doocer目前處于beta測試階段,還有一些bug,尤其是中文網(wǎng)站經(jīng)常出現問(wèn)題。好在Doocer官網(wǎng)有開(kāi)發(fā)者對話(huà)頻道,可以直接聯(lián)系他幫忙解決。
自動(dòng)化所有操作的過(guò)程是我認為 Doocer 最需要做的事情。Doocer可以像RSS工具一樣抓取網(wǎng)頁(yè)中更新的文章,但是要抓取新的文章并生成電子書(shū)并推送,仍然需要手動(dòng)完成。如果整個(gè)過(guò)程可以自動(dòng)化,RSS - MOBI - Kindle 一口氣,相信它的用處會(huì )更好。
目前,Doocer 的所有功能都可以免費使用。
抓取網(wǎng)頁(yè)生成電子書(shū)(Windows,OSX及Linux的在線(xiàn)資料epub或mobi格式)
網(wǎng)站優(yōu)化 ? 優(yōu)采云 發(fā)表了文章 ? 0 個(gè)評論 ? 229 次瀏覽 ? 2022-03-13 01:22
自從我買(mǎi)了kindle之后,我就一直在思考如何充分利用它。雖然可以從多多購買(mǎi)很多書(shū)籍,網(wǎng)上也有很多免費的電子書(shū),但還是有很多網(wǎng)頁(yè)形式的有趣內容。比如O'Reilly Atlas提供了很多電子書(shū),但只提供免費在線(xiàn)閱讀;此外,許多材料或文件只是網(wǎng)頁(yè)形式。所以我希望通過(guò)某種方式把這些網(wǎng)上資料轉換成epub或者mobi格式,這樣就可以在kindle上閱讀了。這篇 文章 文章描述了如何使用 calibre 和少量代碼來(lái)做到這一點(diǎn)。
CalibreCalibre 簡(jiǎn)介
Calibre 是一款免費的電子書(shū)管理工具,兼容 Windows、OS X 和 Linux。幸運的是,除了 GUI 之外,calibre 還提供了很多命令行工具,其中 ebook-convert 命令可以根據用戶(hù)編寫(xiě)的食譜進(jìn)行。文件(其實(shí)是python代碼)抓取指定頁(yè)面的內容,生成mobi等格式的電子書(shū)。通過(guò)編寫(xiě)食譜,可以自定義爬取行為以適應不同的網(wǎng)頁(yè)結構。
安裝口徑
Calibre的下載地址為download,您可以根據自己的操作系統下載相應的安裝程序。
如果是 Linux 操作系統,也可以從軟件倉庫安裝:
Archlinux:
pacman -S calibre
Debian/Ubuntu:
apt-get install calibre
紅帽/Fedora/CentOS:
yum -y install calibre
請注意,如果您使用 OSX,則需要單獨安裝命令行工具。
抓取網(wǎng)頁(yè)以生成電子書(shū)
下面以Git Pocket Guide為例,說(shuō)明如何通過(guò)calibre從網(wǎng)頁(yè)生成電子書(shū)。
找到索引頁(yè)面
爬取整本書(shū),首先要找到索引頁(yè),通常是Table of Contents,也就是目錄,其中每個(gè)目錄都鏈接到對應的內容頁(yè)。索引頁(yè)面將指導生成電子書(shū)時(shí)要抓取的頁(yè)面以及內容的組織順序。在本例中,索引頁(yè)為 61/index.html。
寫(xiě)食譜
Recipes 是一個(gè)帶有recipe 擴展名的腳本。內容其實(shí)是一段python代碼,用來(lái)定義calibre爬取頁(yè)面的范圍和行為。以下是用于爬取 Git 袖珍指南的食譜:
from calibre.web.feeds.recipes import BasicNewsRecipe?class Git_Pocket_Guide(BasicNewsRecipe):? title = 'Git Pocket Guide' description = '' cover_url = 'http://akamaicovers.oreilly.com/images/0636920024972/lrg.jpg'? url_prefix = '1230000000561/' no_stylesheets = True keep_only_tags = [{ 'class': 'chapter' }]? def get_title(self, link): return link.contents[0].strip()? def parse_index(self): soup = self.index_to_soup(self.url_prefix + 'index.html')? div = soup.find('div', { 'class': 'toc' })? articles = [] for link in div.findAll('a'): if '#' in link['href']: continue? if not 'ch' in link['href']: continue? til = self.get_title(link) url = self.url_prefix + link['href'] a = { 'title': til, 'url': url }? articles.append(a)? ans = [('Git_Pocket_Guide', articles)]? return ans
下面解釋代碼的不同部分。
整體結構
一般來(lái)說(shuō),recipe是一個(gè)python類(lèi),但是這個(gè)類(lèi)必須繼承calibre.web.feeds.recipes.BasicNewsRecipe。
解析索引
整個(gè)recipe的核心方法是parse_index,這也是recipe必須實(shí)現的唯一方法。該方法的目標是分析索引頁(yè)的內容并返回一個(gè)稍微復雜的數據結構(稍后描述),該結構定義了整個(gè)電子書(shū)的內容以及內容的組織順序。
整體屬性設置
在類(lèi)的開(kāi)頭,定義了一些全局屬性:
title = 'Git Pocket Guide'description = ''cover_url = 'http://akamaicovers.oreilly.com/images/0636920024972/lrg.jpg'?url_prefix = '1230000000561/'no_stylesheets = Truekeep_only_tags = [{ 'class': 'chapter' }]
parse_index 返回值
下面通過(guò)分析索引頁(yè)來(lái)描述parse_index需要返回的數據結構。
整體返回數據結構是一個(gè)列表,其中每個(gè)元素是一個(gè)元組,一個(gè)元組代表一個(gè)卷。在這個(gè)例子中只有一個(gè)卷,所以列表中只有一個(gè)元組。
每個(gè)元組有兩個(gè)元素,第一個(gè)元素是卷名,第二個(gè)元素是一個(gè)列表,列表中的每個(gè)元素都是一個(gè)map,代表一個(gè)章節(chapter),map中有兩個(gè)元素:title和url,title是章節標題,url是章節所在內容頁(yè)面的url。
Calibre 會(huì )根據 parse_index 的返回結果對整本書(shū)進(jìn)行爬取和整理,并會(huì )自行對內容中的外部鏈接的圖片進(jìn)行爬取和處理。
整個(gè)parse_index使用soup解析索引頁(yè),生成上述數據結構。
更多的
以上是最基本的食譜。如果想詳細了解如何使用,可以參考 API 文檔。
生成手機
菜譜寫(xiě)好后,可以在命令行通過(guò)以下命令生成電子書(shū):
ebook-convert Git_Pocket_Guide.recipe Git_Pocket_Guide.mobi
您可以生成 mobi 格式的電子書(shū)。ebook-convert 將抓取相關(guān)內容并根據食譜代碼組織結構。
最終效果
下面是在kindle上看到的效果。
內容
內容一
內容二
有圖片的頁(yè)面
實(shí)際效果
我的食譜庫
我在github上建了一個(gè)kindle-open-books,里面放了一些菜譜,這些菜譜是我自己寫(xiě)的,其他同學(xué)貢獻的。歡迎任何人提供食譜。 查看全部
抓取網(wǎng)頁(yè)生成電子書(shū)(Windows,OSX及Linux的在線(xiàn)資料epub或mobi格式)
自從我買(mǎi)了kindle之后,我就一直在思考如何充分利用它。雖然可以從多多購買(mǎi)很多書(shū)籍,網(wǎng)上也有很多免費的電子書(shū),但還是有很多網(wǎng)頁(yè)形式的有趣內容。比如O'Reilly Atlas提供了很多電子書(shū),但只提供免費在線(xiàn)閱讀;此外,許多材料或文件只是網(wǎng)頁(yè)形式。所以我希望通過(guò)某種方式把這些網(wǎng)上資料轉換成epub或者mobi格式,這樣就可以在kindle上閱讀了。這篇 文章 文章描述了如何使用 calibre 和少量代碼來(lái)做到這一點(diǎn)。
CalibreCalibre 簡(jiǎn)介
Calibre 是一款免費的電子書(shū)管理工具,兼容 Windows、OS X 和 Linux。幸運的是,除了 GUI 之外,calibre 還提供了很多命令行工具,其中 ebook-convert 命令可以根據用戶(hù)編寫(xiě)的食譜進(jìn)行。文件(其實(shí)是python代碼)抓取指定頁(yè)面的內容,生成mobi等格式的電子書(shū)。通過(guò)編寫(xiě)食譜,可以自定義爬取行為以適應不同的網(wǎng)頁(yè)結構。
安裝口徑
Calibre的下載地址為download,您可以根據自己的操作系統下載相應的安裝程序。
如果是 Linux 操作系統,也可以從軟件倉庫安裝:
Archlinux:
pacman -S calibre
Debian/Ubuntu:
apt-get install calibre
紅帽/Fedora/CentOS:
yum -y install calibre
請注意,如果您使用 OSX,則需要單獨安裝命令行工具。
抓取網(wǎng)頁(yè)以生成電子書(shū)
下面以Git Pocket Guide為例,說(shuō)明如何通過(guò)calibre從網(wǎng)頁(yè)生成電子書(shū)。
找到索引頁(yè)面
爬取整本書(shū),首先要找到索引頁(yè),通常是Table of Contents,也就是目錄,其中每個(gè)目錄都鏈接到對應的內容頁(yè)。索引頁(yè)面將指導生成電子書(shū)時(shí)要抓取的頁(yè)面以及內容的組織順序。在本例中,索引頁(yè)為 61/index.html。
寫(xiě)食譜
Recipes 是一個(gè)帶有recipe 擴展名的腳本。內容其實(shí)是一段python代碼,用來(lái)定義calibre爬取頁(yè)面的范圍和行為。以下是用于爬取 Git 袖珍指南的食譜:
from calibre.web.feeds.recipes import BasicNewsRecipe?class Git_Pocket_Guide(BasicNewsRecipe):? title = 'Git Pocket Guide' description = '' cover_url = 'http://akamaicovers.oreilly.com/images/0636920024972/lrg.jpg'? url_prefix = '1230000000561/' no_stylesheets = True keep_only_tags = [{ 'class': 'chapter' }]? def get_title(self, link): return link.contents[0].strip()? def parse_index(self): soup = self.index_to_soup(self.url_prefix + 'index.html')? div = soup.find('div', { 'class': 'toc' })? articles = [] for link in div.findAll('a'): if '#' in link['href']: continue? if not 'ch' in link['href']: continue? til = self.get_title(link) url = self.url_prefix + link['href'] a = { 'title': til, 'url': url }? articles.append(a)? ans = [('Git_Pocket_Guide', articles)]? return ans
下面解釋代碼的不同部分。
整體結構
一般來(lái)說(shuō),recipe是一個(gè)python類(lèi),但是這個(gè)類(lèi)必須繼承calibre.web.feeds.recipes.BasicNewsRecipe。
解析索引
整個(gè)recipe的核心方法是parse_index,這也是recipe必須實(shí)現的唯一方法。該方法的目標是分析索引頁(yè)的內容并返回一個(gè)稍微復雜的數據結構(稍后描述),該結構定義了整個(gè)電子書(shū)的內容以及內容的組織順序。
整體屬性設置
在類(lèi)的開(kāi)頭,定義了一些全局屬性:
title = 'Git Pocket Guide'description = ''cover_url = 'http://akamaicovers.oreilly.com/images/0636920024972/lrg.jpg'?url_prefix = '1230000000561/'no_stylesheets = Truekeep_only_tags = [{ 'class': 'chapter' }]
parse_index 返回值
下面通過(guò)分析索引頁(yè)來(lái)描述parse_index需要返回的數據結構。

整體返回數據結構是一個(gè)列表,其中每個(gè)元素是一個(gè)元組,一個(gè)元組代表一個(gè)卷。在這個(gè)例子中只有一個(gè)卷,所以列表中只有一個(gè)元組。
每個(gè)元組有兩個(gè)元素,第一個(gè)元素是卷名,第二個(gè)元素是一個(gè)列表,列表中的每個(gè)元素都是一個(gè)map,代表一個(gè)章節(chapter),map中有兩個(gè)元素:title和url,title是章節標題,url是章節所在內容頁(yè)面的url。
Calibre 會(huì )根據 parse_index 的返回結果對整本書(shū)進(jìn)行爬取和整理,并會(huì )自行對內容中的外部鏈接的圖片進(jìn)行爬取和處理。
整個(gè)parse_index使用soup解析索引頁(yè),生成上述數據結構。
更多的
以上是最基本的食譜。如果想詳細了解如何使用,可以參考 API 文檔。
生成手機
菜譜寫(xiě)好后,可以在命令行通過(guò)以下命令生成電子書(shū):
ebook-convert Git_Pocket_Guide.recipe Git_Pocket_Guide.mobi
您可以生成 mobi 格式的電子書(shū)。ebook-convert 將抓取相關(guān)內容并根據食譜代碼組織結構。
最終效果
下面是在kindle上看到的效果。
內容

內容一

內容二

有圖片的頁(yè)面

實(shí)際效果

我的食譜庫
我在github上建了一個(gè)kindle-open-books,里面放了一些菜譜,這些菜譜是我自己寫(xiě)的,其他同學(xué)貢獻的。歡迎任何人提供食譜。
抓取網(wǎng)頁(yè)生成電子書(shū)(如何將網(wǎng)頁(yè)文章批量抓取、生成電子書(shū)、直接推送到Kindle)
網(wǎng)站優(yōu)化 ? 優(yōu)采云 發(fā)表了文章 ? 0 個(gè)評論 ? 337 次瀏覽 ? 2022-03-13 00:12
我一直在研究如何將我關(guān)心的網(wǎng)頁(yè)或 文章 放入我的 Kindle 中進(jìn)行認真閱讀,但我已經(jīng)很長(cháng)時(shí)間沒(méi)有取得任何真正的進(jìn)展。手工排版制作電子書(shū)的方法雖然簡(jiǎn)單易行,但對于短小、更新頻繁的網(wǎng)頁(yè)文章來(lái)說(shuō)效率低下。如果有一個(gè)工具可以文章批量抓取網(wǎng)頁(yè),生成電子書(shū),然后直接推送到Kindle上就好了。Doocer 就是這樣一種實(shí)用程序。
Doocer是@lepture開(kāi)發(fā)的在線(xiàn)服務(wù),允許用戶(hù)在Pocket Read Later賬戶(hù)中提交URL、RSS提要地址和文章,然后逐一或批量制作成ePub和MOBI電子書(shū). 您可以直接在 Doocer 中閱讀所有文章,也可以將它們推送到 Kindle、Apple Books 中閱讀。
真的很好的閱讀體驗
Doocer 生成的電子書(shū)在排版方面非常出色。應該有的內容很多,不應該有的內容不多。本書(shū)不僅封面圖文并茂,還有文章目錄、網(wǎng)站出處、文章原作者等信息。Doocer生成的MOBI電子書(shū)支持KF8標準,因此支持Kindle原生替換自定義字體。
由于網(wǎng)站文章通常有標準和通用的排版規范,Doocer生成的電子書(shū)文章中的大小標題和列表圖例與原網(wǎng)頁(yè)文章高度一致@>。原文章中的所有超鏈接也被保留,評論、廣告等內容全部丟棄。整本書(shū)的閱讀體驗非常友好。(當然,如果原網(wǎng)頁(yè)文章的布局沒(méi)有規則,那么生成的電子書(shū)也可能面目全非。)
將網(wǎng)頁(yè) 文章 制作成電子書(shū)
Doocer完成注冊登錄后,我們就可以開(kāi)始將網(wǎng)頁(yè)文章制作成電子書(shū)了。首先,我們點(diǎn)擊“NEW BOOK”按鈕新建電子書(shū),輸入電子書(shū)名稱(chēng)。接下來(lái)選擇右上角的“添加”以添加 文章 URL 或 RSS 提要地址。
以小眾網(wǎng)頁(yè)的文章為例,我們選擇“FEED”,在輸入框中粘貼RSS地址,然后點(diǎn)擊“PARSE”,那么小眾最近的文章列表就會(huì )出現為我們顯示添加到。我們可以根據需要選擇,也可以點(diǎn)擊“SELECT ALL”全選文章。最后,下拉到頁(yè)面底部,選擇“SAVE”,那么這些文章就會(huì )被添加到書(shū)里。
其實(shí)Doocer網(wǎng)頁(yè)與RSS工具很相似,實(shí)現了從網(wǎng)站批量抓取文章并集中展示的功能。
要將這些 文章 轉換為電子書(shū)并將它們推送到 Kindle,我們必須做一些簡(jiǎn)單的事情。
首先,根據Doocer個(gè)人設置頁(yè)面中的提示,我們打開(kāi)它,將Doocer電子書(shū)的發(fā)送地址添加到個(gè)人文檔接收地址中。完成后,我們在輸入框中填寫(xiě)Kindle的個(gè)人文檔接收地址,點(diǎn)擊保存。
最后,我們在 Doocer 中打開(kāi)《少數派》這本書(shū),在頁(yè)面上找到“Publish”,選擇 Send to Kindle。大約 10 到 30 分鐘,Doocer 將完成圖書(shū)制作并將圖書(shū)推送到 Kindle。
仍有一些問(wèn)題需要注意
Doocer目前處于beta測試階段,還有一些bug,尤其是中文網(wǎng)站經(jīng)常出現問(wèn)題。好在Doocer官網(wǎng)有開(kāi)發(fā)者對話(huà)頻道,可以直接聯(lián)系他幫忙解決。
自動(dòng)化所有操作的過(guò)程是我認為 Doocer 最需要做的事情。Doocer可以像RSS工具一樣抓取網(wǎng)頁(yè)中更新的文章,但是要抓取新的文章并生成電子書(shū)并推送,仍然需要手動(dòng)完成。如果整個(gè)過(guò)程可以自動(dòng)化,RSS - MOBI - Kindle 一口氣,相信它的用處會(huì )更好。
目前,Doocer 的所有功能都可以免費使用。 查看全部
抓取網(wǎng)頁(yè)生成電子書(shū)(如何將網(wǎng)頁(yè)文章批量抓取、生成電子書(shū)、直接推送到Kindle)
我一直在研究如何將我關(guān)心的網(wǎng)頁(yè)或 文章 放入我的 Kindle 中進(jìn)行認真閱讀,但我已經(jīng)很長(cháng)時(shí)間沒(méi)有取得任何真正的進(jìn)展。手工排版制作電子書(shū)的方法雖然簡(jiǎn)單易行,但對于短小、更新頻繁的網(wǎng)頁(yè)文章來(lái)說(shuō)效率低下。如果有一個(gè)工具可以文章批量抓取網(wǎng)頁(yè),生成電子書(shū),然后直接推送到Kindle上就好了。Doocer 就是這樣一種實(shí)用程序。
Doocer是@lepture開(kāi)發(fā)的在線(xiàn)服務(wù),允許用戶(hù)在Pocket Read Later賬戶(hù)中提交URL、RSS提要地址和文章,然后逐一或批量制作成ePub和MOBI電子書(shū). 您可以直接在 Doocer 中閱讀所有文章,也可以將它們推送到 Kindle、Apple Books 中閱讀。

真的很好的閱讀體驗
Doocer 生成的電子書(shū)在排版方面非常出色。應該有的內容很多,不應該有的內容不多。本書(shū)不僅封面圖文并茂,還有文章目錄、網(wǎng)站出處、文章原作者等信息。Doocer生成的MOBI電子書(shū)支持KF8標準,因此支持Kindle原生替換自定義字體。
由于網(wǎng)站文章通常有標準和通用的排版規范,Doocer生成的電子書(shū)文章中的大小標題和列表圖例與原網(wǎng)頁(yè)文章高度一致@>。原文章中的所有超鏈接也被保留,評論、廣告等內容全部丟棄。整本書(shū)的閱讀體驗非常友好。(當然,如果原網(wǎng)頁(yè)文章的布局沒(méi)有規則,那么生成的電子書(shū)也可能面目全非。)

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

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

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

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

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

仍有一些問(wèn)題需要注意
Doocer目前處于beta測試階段,還有一些bug,尤其是中文網(wǎng)站經(jīng)常出現問(wèn)題。好在Doocer官網(wǎng)有開(kāi)發(fā)者對話(huà)頻道,可以直接聯(lián)系他幫忙解決。
自動(dòng)化所有操作的過(guò)程是我認為 Doocer 最需要做的事情。Doocer可以像RSS工具一樣抓取網(wǎng)頁(yè)中更新的文章,但是要抓取新的文章并生成電子書(shū)并推送,仍然需要手動(dòng)完成。如果整個(gè)過(guò)程可以自動(dòng)化,RSS - MOBI - Kindle 一口氣,相信它的用處會(huì )更好。
目前,Doocer 的所有功能都可以免費使用。
抓取網(wǎng)頁(yè)生成電子書(shū)(一步步解析單個(gè)頁(yè)面,得到該頁(yè)書(shū)籍鏈接列表得到)
網(wǎng)站優(yōu)化 ? 優(yōu)采云 發(fā)表了文章 ? 0 個(gè)評論 ? 124 次瀏覽 ? 2022-03-13 00:12
2. 解析單個(gè)頁(yè)面以獲取該頁(yè)面上的書(shū)籍鏈接列表
3. 轉到書(shū)頁(yè)
* 判斷是否可以下載
* 如果可以下載,請下載所有格式的書(shū)籍
其次,為了獲得爬蟲(chóng)的健壯性,我們需要保證每次網(wǎng)頁(yè)加載成功,文件下載完成,我會(huì )在后面的內容中一步一步介紹。
實(shí)施過(guò)程
Selenium 可以模擬打開(kāi)瀏覽器。在此之前,我們需要下載瀏覽器的驅動(dòng)程序。在本文中,我們使用的是chrome瀏覽器,Firefox也是常用的瀏覽器。步驟類(lèi)似,不再贅述。
硒的安裝:
sudo pip install selenium
然后下載chrome的webdriver,直接保存到本地,比如/usr/bin,然后設置selenium的基本設置
import re#正則表達式
import random#隨機選擇
import subprocess# 執行bash命令
from multiprocessing import Pool#建立線(xiàn)程池,并行爬取加快速度
from selenium import webdriver
# set chromedriver path and download path
chromeOptions = webdriver.ChromeOptions()
dl_path="~/Downloads/KanCloud"#設置下載路徑
chromedriver="/usr/bin/chromedriver"#修改為你的chromedriver路徑
prefs = {"download.default_directory" : dl_path}
chromeOptions.add_experimental_option("prefs",prefs)
#可以為webdriver設置代理,自動(dòng)獲得代理IP地址下面會(huì )解釋,這里注釋掉
#PROXY='1.82.216.134:80'
#chromeOptions.add_argument('--proxy-server=%s' % PROXY)
# url_start='http://www.kancloud.cn/explore/top'
#建立一個(gè)webdriver對象
driver = webdriver.Chrome(chrome_options=chromeOptions)
driver.get('http://www.kancloud.cn/digest/ ... %2339;)#用chrome打開(kāi)這個(gè)網(wǎng)頁(yè)
運行上面的代碼,打開(kāi)一個(gè)chrome標簽,如下圖:
點(diǎn)擊下載按鈕,我們看到有PDF、epub、mobi三個(gè)下載選項。為了模擬點(diǎn)擊動(dòng)作,我們需要獲取元素的位置。這時(shí)候我們就可以使用chrome的inspect功能了,快捷鍵是 Ctrl+shift+I ,或者將鼠標懸停在下載上,右鍵選擇inspect,效果如下:
選擇右邊高亮的代碼,右鍵->復制->復制xpath,可以得到元素的xpath
//*[@id="manualDownload"]/span/b
然后使用webdriver本身的xpath搜索功能獲取元素,并模擬點(diǎn)擊操作
運行上面這句話(huà),我們可以看到網(wǎng)站確實(shí)響應了,支持下載的電子書(shū)格式有3種。這一步點(diǎn)擊下載按鈕是必須的,否則直接點(diǎn)擊epub會(huì )報 element not visible 的錯誤。接下來(lái)我們演示下載epub,鼠標懸停在epub上,右鍵查看,可以得到下載epub的xpath,同上
driver.find_element_by_xpath('//*[@id="manualDownload"]/div/div/ul/li[2]/a').click()
這樣我們就可以把這本epub電子書(shū)下載到我們指定的路徑了。
這是 Selenium 的基本應用。它還有一些其他定位元素的方法和模擬操作的功能,比如把網(wǎng)頁(yè)往下拉,因為有些網(wǎng)站會(huì )根據用戶(hù)的下拉情況來(lái)渲染網(wǎng)頁(yè),越往下拉,顯示的內容越多。詳情請查看 selenium 的官方文檔。
我們對每一頁(yè)的每一本書(shū)執行上述過(guò)程,然后我們可以爬取整個(gè)站點(diǎn)的書(shū)籍,前提是你的網(wǎng)速夠快,運氣夠好。這是因為在持續爬取過(guò)程中會(huì )出現一些異常,例如
1. webdriver 將無(wú)法打開(kāi)網(wǎng)頁(yè)
2. 下載完成前打開(kāi)下一個(gè)網(wǎng)頁(yè),導致webdriver負擔過(guò)重,無(wú)法加載網(wǎng)頁(yè)
3. 網(wǎng)站可能是基于IP地址的反爬蟲(chóng)
下一篇我們將解決以上問(wèn)題,使用多進(jìn)程加速(webdriver太慢,無(wú)法打開(kāi)網(wǎng)頁(yè))。 查看全部
抓取網(wǎng)頁(yè)生成電子書(shū)(一步步解析單個(gè)頁(yè)面,得到該頁(yè)書(shū)籍鏈接列表得到)
2. 解析單個(gè)頁(yè)面以獲取該頁(yè)面上的書(shū)籍鏈接列表
3. 轉到書(shū)頁(yè)
* 判斷是否可以下載
* 如果可以下載,請下載所有格式的書(shū)籍
其次,為了獲得爬蟲(chóng)的健壯性,我們需要保證每次網(wǎng)頁(yè)加載成功,文件下載完成,我會(huì )在后面的內容中一步一步介紹。
實(shí)施過(guò)程
Selenium 可以模擬打開(kāi)瀏覽器。在此之前,我們需要下載瀏覽器的驅動(dòng)程序。在本文中,我們使用的是chrome瀏覽器,Firefox也是常用的瀏覽器。步驟類(lèi)似,不再贅述。
硒的安裝:
sudo pip install selenium
然后下載chrome的webdriver,直接保存到本地,比如/usr/bin,然后設置selenium的基本設置
import re#正則表達式
import random#隨機選擇
import subprocess# 執行bash命令
from multiprocessing import Pool#建立線(xiàn)程池,并行爬取加快速度
from selenium import webdriver
# set chromedriver path and download path
chromeOptions = webdriver.ChromeOptions()
dl_path="~/Downloads/KanCloud"#設置下載路徑
chromedriver="/usr/bin/chromedriver"#修改為你的chromedriver路徑
prefs = {"download.default_directory" : dl_path}
chromeOptions.add_experimental_option("prefs",prefs)
#可以為webdriver設置代理,自動(dòng)獲得代理IP地址下面會(huì )解釋,這里注釋掉
#PROXY='1.82.216.134:80'
#chromeOptions.add_argument('--proxy-server=%s' % PROXY)
# url_start='http://www.kancloud.cn/explore/top'
#建立一個(gè)webdriver對象
driver = webdriver.Chrome(chrome_options=chromeOptions)
driver.get('http://www.kancloud.cn/digest/ ... %2339;)#用chrome打開(kāi)這個(gè)網(wǎng)頁(yè)
運行上面的代碼,打開(kāi)一個(gè)chrome標簽,如下圖:
點(diǎn)擊下載按鈕,我們看到有PDF、epub、mobi三個(gè)下載選項。為了模擬點(diǎn)擊動(dòng)作,我們需要獲取元素的位置。這時(shí)候我們就可以使用chrome的inspect功能了,快捷鍵是 Ctrl+shift+I ,或者將鼠標懸停在下載上,右鍵選擇inspect,效果如下:
選擇右邊高亮的代碼,右鍵->復制->復制xpath,可以得到元素的xpath
//*[@id="manualDownload"]/span/b
然后使用webdriver本身的xpath搜索功能獲取元素,并模擬點(diǎn)擊操作
運行上面這句話(huà),我們可以看到網(wǎng)站確實(shí)響應了,支持下載的電子書(shū)格式有3種。這一步點(diǎn)擊下載按鈕是必須的,否則直接點(diǎn)擊epub會(huì )報 element not visible 的錯誤。接下來(lái)我們演示下載epub,鼠標懸停在epub上,右鍵查看,可以得到下載epub的xpath,同上
driver.find_element_by_xpath('//*[@id="manualDownload"]/div/div/ul/li[2]/a').click()
這樣我們就可以把這本epub電子書(shū)下載到我們指定的路徑了。
這是 Selenium 的基本應用。它還有一些其他定位元素的方法和模擬操作的功能,比如把網(wǎng)頁(yè)往下拉,因為有些網(wǎng)站會(huì )根據用戶(hù)的下拉情況來(lái)渲染網(wǎng)頁(yè),越往下拉,顯示的內容越多。詳情請查看 selenium 的官方文檔。
我們對每一頁(yè)的每一本書(shū)執行上述過(guò)程,然后我們可以爬取整個(gè)站點(diǎn)的書(shū)籍,前提是你的網(wǎng)速夠快,運氣夠好。這是因為在持續爬取過(guò)程中會(huì )出現一些異常,例如
1. webdriver 將無(wú)法打開(kāi)網(wǎng)頁(yè)
2. 下載完成前打開(kāi)下一個(gè)網(wǎng)頁(yè),導致webdriver負擔過(guò)重,無(wú)法加載網(wǎng)頁(yè)
3. 網(wǎng)站可能是基于IP地址的反爬蟲(chóng)
下一篇我們將解決以上問(wèn)題,使用多進(jìn)程加速(webdriver太慢,無(wú)法打開(kāi)網(wǎng)頁(yè))。
抓取網(wǎng)頁(yè)生成電子書(shū)(問(wèn)題的話(huà)()設置網(wǎng)站RSS輸出方式)
網(wǎng)站優(yōu)化 ? 優(yōu)采云 發(fā)表了文章 ? 0 個(gè)評論 ? 117 次瀏覽 ? 2022-03-10 07:18
準備好 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只輸出有限數量的最新的文章,所以無(wú)論在Caliber中如何設置都會(huì )受到這個(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)站沒(méi)有提供RSS feed,可以參考《Calibre使用教程:抓取網(wǎng)站頁(yè)面制作電子書(shū)》中文章提供的方法編寫(xiě)腳本直接抓取網(wǎng)站的頁(yè)面內容,制作電子書(shū)。 查看全部
抓取網(wǎng)頁(yè)生成電子書(shū)(問(wèn)題的話(huà)()設置網(wǎng)站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只輸出有限數量的最新的文章,所以無(wú)論在Caliber中如何設置都會(huì )受到這個(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)站沒(méi)有提供RSS feed,可以參考《Calibre使用教程:抓取網(wǎng)站頁(yè)面制作電子書(shū)》中文章提供的方法編寫(xiě)腳本直接抓取網(wǎng)站的頁(yè)面內容,制作電子書(shū)。
抓取網(wǎng)頁(yè)生成電子書(shū)(網(wǎng)上無(wú)法下載的“小說(shuō)在線(xiàn)閱讀”內容?有種Python2.7基礎知識)
網(wǎng)站優(yōu)化 ? 優(yōu)采云 發(fā)表了文章 ? 0 個(gè)評論 ? 100 次瀏覽 ? 2022-03-08 15:08
你還在為無(wú)法在線(xiàn)下載的“小說(shuō)在線(xiàn)閱讀”內容而煩惱嗎?或者是一些文章的內容讓你有采集的沖動(dòng),卻找不到下載鏈接?你有沒(méi)有想自己寫(xiě)一個(gè)程序來(lái)完成這一切的沖動(dòng)?你是不是學(xué)了python,想找點(diǎn)東西炫耀一下自己,告訴別人“兄弟真棒!”?所以讓我們開(kāi)始吧!哈哈~
嗯,最近剛寫(xiě)了很多關(guān)于Yii的東西,想找點(diǎn)東西調整一下.... = =
本項目以研究為目的。在所有版權問(wèn)題上,我們都站在作者一邊。想看盜版小說(shuō)的讀者,要自己面對墻!
說(shuō)了這么多,我們要做的就是從網(wǎng)頁(yè)上爬下小說(shuō)正文的內容。我們的研究對象是全本小說(shuō)網(wǎng)....再次聲明,我們不對任何版權負責....
一開(kāi)始,做最基礎的內容,即抓取某一章的內容。
環(huán)境:Ubuntu,Python 2.7
基礎知識
本程序涉及到的知識點(diǎn)有幾個(gè),這里羅列一下,不贅述,會(huì )有一堆直接百度的疑惑。
1. urllib2 模塊的請求對象,用于設置 HTTP 請求,包括獲取的 url,以及偽裝成瀏覽器代理。然后就是urlopen和read方法,很好理解。
2.chardet 模塊,用于檢測網(wǎng)頁(yè)的編碼。網(wǎng)頁(yè)抓取數據時(shí)容易遇到亂碼問(wèn)題。為了判斷網(wǎng)頁(yè)是gtk編碼還是utf-8,使用chardet的detect函數進(jìn)行檢測。使用Windows的同學(xué)可以在這里下載,解壓到python的lib目錄下。
3. decode函數將字符串從某種編碼轉換為unicode字符,encode將unicode字符轉換為指定編碼格式的字符串。
4. re 模塊正則表達式的應用。搜索功能可以找到匹配正則表達式的項目,replace是替換匹配的字符串。
思路分析:
我們選擇的網(wǎng)址是斗羅大陸第一章??梢圆榭淳W(wǎng)頁(yè)的源碼,會(huì )發(fā)現只有一個(gè)內容標簽收錄了所有章節的內容,所以可以使用正則表達式匹配內容標簽并抓取。試著(zhù)把這部分打印出來(lái),你會(huì )發(fā)現很多
和 ,
換行,就是網(wǎng)頁(yè)中的占位符,也就是空格,換成空格就行了。這一章的內容非常漂亮。為了完整起見(jiàn),也使用正則來(lái)爬下標題。
程序
<p>
# -*- coding: utf-8 -*-
import urllib2
import re
import chardet
class Book_Spider:
def __init__(self):
self.pages = []
# 抓取一個(gè)章節
def GetPage(self):
myUrl = "http://www.quanben.com/xiaoshu ... 3B%3B
user_agent = 'Mozilla/4.0 (compatible; MSIE 5.5; Windows NT)'
headers = { 'User-Agent' : user_agent }
request = urllib2.Request(myUrl, headers = headers)
myResponse = urllib2.urlopen(request)
myPage = myResponse.read()
#先檢測網(wǎng)頁(yè)的字符編碼,最后統一轉為 utf-8
charset = chardet.detect(myPage)
charset = charset['encoding']
if charset == 'utf-8' or charset == 'UTF-8':
myPage = myPage
else:
myPage = myPage.decode('gb2312','ignore').encode('utf-8')
unicodePage = myPage.decode("utf-8")
try:
#抓取標題
my_title = re.search('(.*?)',unicodePage,re.S)
my_title = my_title.group(1)
except:
print '標題 HTML 變化,請重新分析!'
return False
try:
#抓取章節內容
my_content = re.search('(.*?) 查看全部
抓取網(wǎng)頁(yè)生成電子書(shū)(網(wǎng)上無(wú)法下載的“小說(shuō)在線(xiàn)閱讀”內容?有種Python2.7基礎知識)
你還在為無(wú)法在線(xiàn)下載的“小說(shuō)在線(xiàn)閱讀”內容而煩惱嗎?或者是一些文章的內容讓你有采集的沖動(dòng),卻找不到下載鏈接?你有沒(méi)有想自己寫(xiě)一個(gè)程序來(lái)完成這一切的沖動(dòng)?你是不是學(xué)了python,想找點(diǎn)東西炫耀一下自己,告訴別人“兄弟真棒!”?所以讓我們開(kāi)始吧!哈哈~
嗯,最近剛寫(xiě)了很多關(guān)于Yii的東西,想找點(diǎn)東西調整一下.... = =
本項目以研究為目的。在所有版權問(wèn)題上,我們都站在作者一邊。想看盜版小說(shuō)的讀者,要自己面對墻!
說(shuō)了這么多,我們要做的就是從網(wǎng)頁(yè)上爬下小說(shuō)正文的內容。我們的研究對象是全本小說(shuō)網(wǎng)....再次聲明,我們不對任何版權負責....
一開(kāi)始,做最基礎的內容,即抓取某一章的內容。
環(huán)境:Ubuntu,Python 2.7
基礎知識
本程序涉及到的知識點(diǎn)有幾個(gè),這里羅列一下,不贅述,會(huì )有一堆直接百度的疑惑。
1. urllib2 模塊的請求對象,用于設置 HTTP 請求,包括獲取的 url,以及偽裝成瀏覽器代理。然后就是urlopen和read方法,很好理解。
2.chardet 模塊,用于檢測網(wǎng)頁(yè)的編碼。網(wǎng)頁(yè)抓取數據時(shí)容易遇到亂碼問(wèn)題。為了判斷網(wǎng)頁(yè)是gtk編碼還是utf-8,使用chardet的detect函數進(jìn)行檢測。使用Windows的同學(xué)可以在這里下載,解壓到python的lib目錄下。
3. decode函數將字符串從某種編碼轉換為unicode字符,encode將unicode字符轉換為指定編碼格式的字符串。
4. re 模塊正則表達式的應用。搜索功能可以找到匹配正則表達式的項目,replace是替換匹配的字符串。
思路分析:
我們選擇的網(wǎng)址是斗羅大陸第一章??梢圆榭淳W(wǎng)頁(yè)的源碼,會(huì )發(fā)現只有一個(gè)內容標簽收錄了所有章節的內容,所以可以使用正則表達式匹配內容標簽并抓取。試著(zhù)把這部分打印出來(lái),你會(huì )發(fā)現很多
和 ,
換行,就是網(wǎng)頁(yè)中的占位符,也就是空格,換成空格就行了。這一章的內容非常漂亮。為了完整起見(jiàn),也使用正則來(lái)爬下標題。
程序
<p>
# -*- coding: utf-8 -*-
import urllib2
import re
import chardet
class Book_Spider:
def __init__(self):
self.pages = []
# 抓取一個(gè)章節
def GetPage(self):
myUrl = "http://www.quanben.com/xiaoshu ... 3B%3B
user_agent = 'Mozilla/4.0 (compatible; MSIE 5.5; Windows NT)'
headers = { 'User-Agent' : user_agent }
request = urllib2.Request(myUrl, headers = headers)
myResponse = urllib2.urlopen(request)
myPage = myResponse.read()
#先檢測網(wǎng)頁(yè)的字符編碼,最后統一轉為 utf-8
charset = chardet.detect(myPage)
charset = charset['encoding']
if charset == 'utf-8' or charset == 'UTF-8':
myPage = myPage
else:
myPage = myPage.decode('gb2312','ignore').encode('utf-8')
unicodePage = myPage.decode("utf-8")
try:
#抓取標題
my_title = re.search('(.*?)',unicodePage,re.S)
my_title = my_title.group(1)
except:
print '標題 HTML 變化,請重新分析!'
return False
try:
#抓取章節內容
my_content = re.search('(.*?)
抓取網(wǎng)頁(yè)生成電子書(shū)(如何用Python寫(xiě)成的電子書(shū)提取工具?軟件幫你)
網(wǎng)站優(yōu)化 ? 優(yōu)采云 發(fā)表了文章 ? 0 個(gè)評論 ? 111 次瀏覽 ? 2022-03-08 07:10
KindleUnpack 是 Kindle 用戶(hù)的電子書(shū)提取工具。該軟件可以幫助您將kindle中的電子書(shū)提取到本地。該軟件可用于提取Kindle電子書(shū)如mobi、azw3等格式文件中的HTML內容。、圖像和元數據文件,并且可以按照 KindleGen 生成的電子書(shū)的標準和格式放置這些文件。
格式介紹:
KindleUnpack(原名mobiunpack)是一個(gè)用Python編寫(xiě)的小程序,起源于專(zhuān)業(yè)電子書(shū)論壇mobileread??捎糜谔崛indle電子書(shū)如mobi、azw3等格式文件中的HTML內容、圖片和元數據文件,并可以按照KindleGen生成的電子書(shū)的標準和形式放置這些文件。
對于 KF8 文件和混合 Mobi 和 KF8 文件,它可以生成單獨的 Mobi 和 KF8 文件,以及收錄在電子書(shū)中的原創(chuàng )源文件。另外,對于 KF8 文件,它也會(huì )生成一個(gè) ePub 文件,但是如果生成的 HTML 文件不符合 EPUB 標準,那么生成的 ePub 文件也不會(huì )符合 EPUB 標準。對于亞馬遜 .azw4 格式的電子書(shū),它可以提取格式文件中收錄的 PDF 文檔。
KindleUnpack 對于普通人來(lái)說(shuō)用處不大,但是對于喜歡制作電子書(shū)的小伙伴來(lái)說(shuō)卻非常有用。例如,如果你看到一本電子書(shū)漂亮的布局或樣式,你可以用它來(lái)拆解電子書(shū),分析它的源文件,并將你喜歡的功能移植到你的電子書(shū)項目中。這是一個(gè)非常有用的學(xué)習工具。
指示:
運行名為 KindleUnpack.pyw 的 Python 腳本,打開(kāi)工作界面;
點(diǎn)擊“未加密的Kindle電子書(shū)輸入文件”后的【瀏覽...】按鈕,選擇電子書(shū);
點(diǎn)擊“輸出目錄”后的【瀏覽...】按鈕,選擇生成文件的輸出目錄;
其他選項一般可以默認保留,點(diǎn)擊【開(kāi)始】按鈕,稍等片刻即可完成反匯編。 查看全部
抓取網(wǎng)頁(yè)生成電子書(shū)(如何用Python寫(xiě)成的電子書(shū)提取工具?軟件幫你)
KindleUnpack 是 Kindle 用戶(hù)的電子書(shū)提取工具。該軟件可以幫助您將kindle中的電子書(shū)提取到本地。該軟件可用于提取Kindle電子書(shū)如mobi、azw3等格式文件中的HTML內容。、圖像和元數據文件,并且可以按照 KindleGen 生成的電子書(shū)的標準和格式放置這些文件。
格式介紹:
KindleUnpack(原名mobiunpack)是一個(gè)用Python編寫(xiě)的小程序,起源于專(zhuān)業(yè)電子書(shū)論壇mobileread??捎糜谔崛indle電子書(shū)如mobi、azw3等格式文件中的HTML內容、圖片和元數據文件,并可以按照KindleGen生成的電子書(shū)的標準和形式放置這些文件。
對于 KF8 文件和混合 Mobi 和 KF8 文件,它可以生成單獨的 Mobi 和 KF8 文件,以及收錄在電子書(shū)中的原創(chuàng )源文件。另外,對于 KF8 文件,它也會(huì )生成一個(gè) ePub 文件,但是如果生成的 HTML 文件不符合 EPUB 標準,那么生成的 ePub 文件也不會(huì )符合 EPUB 標準。對于亞馬遜 .azw4 格式的電子書(shū),它可以提取格式文件中收錄的 PDF 文檔。
KindleUnpack 對于普通人來(lái)說(shuō)用處不大,但是對于喜歡制作電子書(shū)的小伙伴來(lái)說(shuō)卻非常有用。例如,如果你看到一本電子書(shū)漂亮的布局或樣式,你可以用它來(lái)拆解電子書(shū),分析它的源文件,并將你喜歡的功能移植到你的電子書(shū)項目中。這是一個(gè)非常有用的學(xué)習工具。
指示:
運行名為 KindleUnpack.pyw 的 Python 腳本,打開(kāi)工作界面;
點(diǎn)擊“未加密的Kindle電子書(shū)輸入文件”后的【瀏覽...】按鈕,選擇電子書(shū);
點(diǎn)擊“輸出目錄”后的【瀏覽...】按鈕,選擇生成文件的輸出目錄;
其他選項一般可以默認保留,點(diǎn)擊【開(kāi)始】按鈕,稍等片刻即可完成反匯編。
抓取網(wǎng)頁(yè)生成電子書(shū)(如何使用網(wǎng)絡(luò )爬蟲(chóng)?代理IP的優(yōu)勢是什么?)
網(wǎng)站優(yōu)化 ? 優(yōu)采云 發(fā)表了文章 ? 0 個(gè)評論 ? 99 次瀏覽 ? 2022-03-08 06:20
在大數據時(shí)代,信息采集是一項重要任務(wù)。如果信息采集單純依靠人力,不僅效率低、麻煩,而且采集成本也會(huì )增加。網(wǎng)絡(luò )爬蟲(chóng)可以代替人自動(dòng)采集整理互聯(lián)網(wǎng)上的數據信息,因其效率和速度而廣受青睞。
現在很多網(wǎng)站都設置了反爬機制來(lái)拒絕網(wǎng)絡(luò )爬蟲(chóng),以保護自己的安全。如果要繼續訪(fǎng)問(wèn)網(wǎng)站,需要使用爬蟲(chóng)IP。如果當前IP地址被屏蔽,您可以將其更改為新的IP地址,以保證爬蟲(chóng)的順利運行。
與普通IP相比,爬蟲(chóng)代理IP的優(yōu)勢:
一、高效率、高質(zhì)量的代理多為機房撥號VPS搭建,效率一般在90%以上,也就是提取的IP基本可以連上。
二是速度快。優(yōu)質(zhì)代理IP多為機房寬帶。機房的寬帶比較快。與普通代理相比,用戶(hù)數量相對較少,因此速度更快。
三、高安全性,優(yōu)質(zhì)代理IP一般需要授權才能使用,要么綁定終端IP授權,要么使用賬號密碼驗證,均支持代理IP,后臺自動(dòng)切換。
在爬取相關(guān)信息的過(guò)程中,如果之前的頻率過(guò)高,會(huì )被網(wǎng)站的反爬機制檢測到,反爬機制會(huì )通過(guò)你的IP識別網(wǎng)絡(luò )爬蟲(chóng)。那么我們如何使用代理IP呢?
1、進(jìn)入軟件-提取代理ip
2、生成 API 鏈接 - 打開(kāi)鏈接
3、查看IP地址-使用 查看全部
抓取網(wǎng)頁(yè)生成電子書(shū)(如何使用網(wǎng)絡(luò )爬蟲(chóng)?代理IP的優(yōu)勢是什么?)
在大數據時(shí)代,信息采集是一項重要任務(wù)。如果信息采集單純依靠人力,不僅效率低、麻煩,而且采集成本也會(huì )增加。網(wǎng)絡(luò )爬蟲(chóng)可以代替人自動(dòng)采集整理互聯(lián)網(wǎng)上的數據信息,因其效率和速度而廣受青睞。
現在很多網(wǎng)站都設置了反爬機制來(lái)拒絕網(wǎng)絡(luò )爬蟲(chóng),以保護自己的安全。如果要繼續訪(fǎng)問(wèn)網(wǎng)站,需要使用爬蟲(chóng)IP。如果當前IP地址被屏蔽,您可以將其更改為新的IP地址,以保證爬蟲(chóng)的順利運行。
與普通IP相比,爬蟲(chóng)代理IP的優(yōu)勢:
一、高效率、高質(zhì)量的代理多為機房撥號VPS搭建,效率一般在90%以上,也就是提取的IP基本可以連上。
二是速度快。優(yōu)質(zhì)代理IP多為機房寬帶。機房的寬帶比較快。與普通代理相比,用戶(hù)數量相對較少,因此速度更快。
三、高安全性,優(yōu)質(zhì)代理IP一般需要授權才能使用,要么綁定終端IP授權,要么使用賬號密碼驗證,均支持代理IP,后臺自動(dòng)切換。
在爬取相關(guān)信息的過(guò)程中,如果之前的頻率過(guò)高,會(huì )被網(wǎng)站的反爬機制檢測到,反爬機制會(huì )通過(guò)你的IP識別網(wǎng)絡(luò )爬蟲(chóng)。那么我們如何使用代理IP呢?
1、進(jìn)入軟件-提取代理ip
2、生成 API 鏈接 - 打開(kāi)鏈接
3、查看IP地址-使用
抓取網(wǎng)頁(yè)生成電子書(shū)(.js的命令行工具/Git來(lái)制作精美的電子書(shū)工具)
網(wǎng)站優(yōu)化 ? 優(yōu)采云 發(fā)表了文章 ? 0 個(gè)評論 ? 120 次瀏覽 ? 2022-03-05 15:22
####GitBook 是一個(gè)基于 Node.js 的命令行工具,它使用 Github/Git 和 Markdown 創(chuàng )建精美的電子書(shū),用于同步、共享和錄制
####包格式:html、pdf(需要安裝gitbook-pdf,效果不是很好)、epub、MOBI
現在只介紹html格式:
完整效果:
基本步驟:
以管理員身份安裝
$ npm install gitbook-cli -g 或
$ cnpm install gitbook-cli -g
新建一個(gè)文件夾來(lái)存放這樣的目錄
README.md:簡(jiǎn)介
###Welcome
[外鏈圖片轉存失敗(img-Fpt1DMpr-1563846800927)(/img/huge.jpeg)]
SUMMARY.md:生成目錄組織
* [簡(jiǎn)介](README.md)
* [第一章](chapter1/README.md)
* [第一節](chapter1/node1/README.md)
* [第二章](chapter2/README.md)
* [結束](end/README.md)
在目錄下運行$ gitbook init
如果運行下載依賴(lài)包,會(huì )報如下錯誤:
解決方法:你可以用管理員權限運行 $ gitbook -V
注意:這只是一種解決方案,可能還有其他方法
全部安裝完成后,可以再次執行文件下的$ gitbook init
$tree:查看目錄
$ gitbook serve: 監聽(tīng)頁(yè)面,localhost:4000 或 $ gitbook serve -p 8080
$ gitbook build: 構建文件夾_book
注意:生成的html不能直接訪(fǎng)問(wèn)跳轉,因為有json數據請求??梢员痪幾g器讀取,也可以通過(guò)搭建本地服務(wù)器來(lái)訪(fǎng)問(wèn)
構建到 github:
注意:構建到github,可以參考這個(gè)文章 查看全部
抓取網(wǎng)頁(yè)生成電子書(shū)(.js的命令行工具/Git來(lái)制作精美的電子書(shū)工具)
####GitBook 是一個(gè)基于 Node.js 的命令行工具,它使用 Github/Git 和 Markdown 創(chuàng )建精美的電子書(shū),用于同步、共享和錄制
####包格式:html、pdf(需要安裝gitbook-pdf,效果不是很好)、epub、MOBI
現在只介紹html格式:
完整效果:
基本步驟:
以管理員身份安裝
$ npm install gitbook-cli -g 或
$ cnpm install gitbook-cli -g
新建一個(gè)文件夾來(lái)存放這樣的目錄
README.md:簡(jiǎn)介
###Welcome
[外鏈圖片轉存失敗(img-Fpt1DMpr-1563846800927)(/img/huge.jpeg)]
SUMMARY.md:生成目錄組織
* [簡(jiǎn)介](README.md)
* [第一章](chapter1/README.md)
* [第一節](chapter1/node1/README.md)
* [第二章](chapter2/README.md)
* [結束](end/README.md)
在目錄下運行$ gitbook init
如果運行下載依賴(lài)包,會(huì )報如下錯誤:
解決方法:你可以用管理員權限運行 $ gitbook -V
注意:這只是一種解決方案,可能還有其他方法
全部安裝完成后,可以再次執行文件下的$ gitbook init
$tree:查看目錄
$ gitbook serve: 監聽(tīng)頁(yè)面,localhost:4000 或 $ gitbook serve -p 8080
$ gitbook build: 構建文件夾_book
注意:生成的html不能直接訪(fǎng)問(wèn)跳轉,因為有json數據請求??梢员痪幾g器讀取,也可以通過(guò)搭建本地服務(wù)器來(lái)訪(fǎng)問(wèn)
構建到 github:
注意:構建到github,可以參考這個(gè)文章
抓取網(wǎng)頁(yè)生成電子書(shū)(國外網(wǎng)站?5.超星網(wǎng)址)
網(wǎng)站優(yōu)化 ? 優(yōu)采云 發(fā)表了文章 ? 0 個(gè)評論 ? 95 次瀏覽 ? 2022-03-04 10:11
網(wǎng)址:
以“光催化”為例進(jìn)行搜索,出現以下資源,包括書(shū)籍和專(zhuān)利,按更新時(shí)間排序。注冊會(huì )員即可下載標準共享網(wǎng)絡(luò )資源或微信。一般會(huì )員每天可以免費下載兩次。VIP會(huì )員似乎可以無(wú)限下載。您可以根據情況決定是否花錢(qián)開(kāi)通VIP。
?5. 超級巨星
網(wǎng)址:
最常見(jiàn)的資源最容易被每個(gè)人忽視。大學(xué)一般都和超星合作,學(xué)術(shù)資源還是很多的。部分圖書(shū)提供目錄試讀功能。很多時(shí)候,看目錄就知道要不要繼續看下去了。同時(shí),您還可以使用館際互借或文獻傳遞功能,以及獨秀和中國國家數字圖書(shū)館。
?6. 上千個(gè)采集站
網(wǎng)址:
個(gè)人感覺(jué)本科生的教材比較多,研究生的書(shū)資源比較少。你可以試試看。無(wú)論如何,它是免費的。
?7.電子書(shū)聯(lián)盟
網(wǎng)址:
其他學(xué)科不清楚,但是化學(xué)材料的資源比較少,資源比較老,好在是免費的,可以無(wú)限下載。
國外網(wǎng)站
?8. 圖書(shū)館創(chuàng )世紀
網(wǎng)址:
我覺(jué)得Library Genesis 是英文書(shū)籍的Sci-Hub。頁(yè)面也很簡(jiǎn)單。找到資源后,點(diǎn)擊資源欄最右側鏡像下的任意數字,會(huì )彈出一個(gè)新頁(yè)面。單擊頂部的“獲取”以獲取所需的資源。.
?9. BookSC
網(wǎng)址:
在Bug Tribe點(diǎn)擊英文電子書(shū)彈出BookSC頁(yè)面,簡(jiǎn)潔干凈,無(wú)廣告污染。
?10. HathiTrust 數字圖書(shū)館
網(wǎng)址:
HathiTrust 是一個(gè)學(xué)術(shù)和研究機構的合作計劃,它匯集了來(lái)自世界各地的數字圖書(shū)館。找到資源后,直接點(diǎn)擊,可以在線(xiàn)閱讀,有的可以直接下載,點(diǎn)擊左側“下載整本書(shū)(PDF)”,會(huì )自行生成PDF文檔;.
最后,我想強調的是,盡管近年來(lái)全球范圍內關(guān)于出版物數字化和免費共享的呼聲越來(lái)越高,但書(shū)籍的作者和編輯們在書(shū)籍上付出了很多努力。如果您有條件,請購買(mǎi)正版書(shū)籍并在線(xiàn)下載。資源僅供個(gè)人學(xué)習使用,不得用于商業(yè)用途! 查看全部
抓取網(wǎng)頁(yè)生成電子書(shū)(國外網(wǎng)站?5.超星網(wǎng)址)
網(wǎng)址:
以“光催化”為例進(jìn)行搜索,出現以下資源,包括書(shū)籍和專(zhuān)利,按更新時(shí)間排序。注冊會(huì )員即可下載標準共享網(wǎng)絡(luò )資源或微信。一般會(huì )員每天可以免費下載兩次。VIP會(huì )員似乎可以無(wú)限下載。您可以根據情況決定是否花錢(qián)開(kāi)通VIP。
?5. 超級巨星
網(wǎng)址:
最常見(jiàn)的資源最容易被每個(gè)人忽視。大學(xué)一般都和超星合作,學(xué)術(shù)資源還是很多的。部分圖書(shū)提供目錄試讀功能。很多時(shí)候,看目錄就知道要不要繼續看下去了。同時(shí),您還可以使用館際互借或文獻傳遞功能,以及獨秀和中國國家數字圖書(shū)館。
?6. 上千個(gè)采集站
網(wǎng)址:
個(gè)人感覺(jué)本科生的教材比較多,研究生的書(shū)資源比較少。你可以試試看。無(wú)論如何,它是免費的。
?7.電子書(shū)聯(lián)盟
網(wǎng)址:
其他學(xué)科不清楚,但是化學(xué)材料的資源比較少,資源比較老,好在是免費的,可以無(wú)限下載。
國外網(wǎng)站
?8. 圖書(shū)館創(chuàng )世紀
網(wǎng)址:
我覺(jué)得Library Genesis 是英文書(shū)籍的Sci-Hub。頁(yè)面也很簡(jiǎn)單。找到資源后,點(diǎn)擊資源欄最右側鏡像下的任意數字,會(huì )彈出一個(gè)新頁(yè)面。單擊頂部的“獲取”以獲取所需的資源。.
?9. BookSC
網(wǎng)址:
在Bug Tribe點(diǎn)擊英文電子書(shū)彈出BookSC頁(yè)面,簡(jiǎn)潔干凈,無(wú)廣告污染。
?10. HathiTrust 數字圖書(shū)館
網(wǎng)址:
HathiTrust 是一個(gè)學(xué)術(shù)和研究機構的合作計劃,它匯集了來(lái)自世界各地的數字圖書(shū)館。找到資源后,直接點(diǎn)擊,可以在線(xiàn)閱讀,有的可以直接下載,點(diǎn)擊左側“下載整本書(shū)(PDF)”,會(huì )自行生成PDF文檔;.
最后,我想強調的是,盡管近年來(lái)全球范圍內關(guān)于出版物數字化和免費共享的呼聲越來(lái)越高,但書(shū)籍的作者和編輯們在書(shū)籍上付出了很多努力。如果您有條件,請購買(mǎi)正版書(shū)籍并在線(xiàn)下載。資源僅供個(gè)人學(xué)習使用,不得用于商業(yè)用途!
抓取網(wǎng)頁(yè)生成電子書(shū)(calibre網(wǎng)站的在線(xiàn)幫助文檔無(wú)疑是最基本的學(xué)習資源)
網(wǎng)站優(yōu)化 ? 優(yōu)采云 發(fā)表了文章 ? 0 個(gè)評論 ? 118 次瀏覽 ? 2022-03-01 12:00
calibre 可以抓取網(wǎng)頁(yè)并生成各種格式的電子書(shū)。您可以通過(guò)輸入一些數據使用GUI來(lái)實(shí)現簡(jiǎn)單的自動(dòng)頁(yè)面爬取。主要用于RSS。您還可以使用高級功能來(lái)實(shí)現更復雜的網(wǎng)頁(yè)抓取。但是要爬取一些比較復雜的網(wǎng)頁(yè)內容,還是需要自動(dòng)寫(xiě)一個(gè)PYTHON程序,也就是寫(xiě)一個(gè)recipe。calibre網(wǎng)站的在線(xiàn)幫助文??檔無(wú)疑是最基本的學(xué)習資源。
學(xué)習資料主要有三本,分別是添加你喜歡的新聞網(wǎng)站介紹爬取網(wǎng)頁(yè)的基本方法。食譜的 API 文檔介紹了基本的食譜編寫(xiě)接口 (API),包括參數設置和方法調用。其實(shí)就是研究子類(lèi)的接口,再研究一些菜譜例子。學(xué)完這些內容,應該就可以完成菜譜的編寫(xiě)了。當然,因為菜譜是用python寫(xiě)的,所以學(xué)習python是必不可少的。這里只想介紹一下我學(xué)習界面的心得:
寫(xiě)菜譜,學(xué)習設置界面參數是第一步。其實(shí)通過(guò)設置參數,可以爬取一些簡(jiǎn)單的網(wǎng)頁(yè),生成一定質(zhì)量的電子書(shū)。
API中列出了所有的接口參數,一共48個(gè),并給出了一些解釋。更多細節可以看源碼,源碼前面部分,定義了這48個(gè)參數,有更詳細的解釋。這些參數有些是獨立可設置的,有些是互斥的,設置一個(gè),另一個(gè)不起作用。有些,如果設置為 true,需要實(shí)現一個(gè)方法。大致如下:
1、title =_('未知新聞來(lái)源')
對于生成的電子書(shū)的標題,通常是設置的。
2、描述=你''
使用幾行文字來(lái)描述這個(gè)食譜爬取的內容。原本是對GUI界面下一系列菜譜作用的描述。
3、__author__= __appname__
這個(gè)食譜的作者
4、requires_version= (0,6,0)
執行此配方所需的最低版本 calibre,默認為 0.6.0
5、語(yǔ)言='und'
網(wǎng)頁(yè)內容中使用的語(yǔ)言必須符合 ISO-639 編碼,并且長(cháng)度必須為 2-3 個(gè)字符。
6、max_articles_per_feed= 100
每個(gè)供稿的最大 文章 下載次數,在沒(méi)有 文章 日期的情況下使用。默認為 100。文章oldest_article 參數通常在有日期時(shí)使用。
7、最舊的文章= 7.0
最早下載的 文章 是幾天前。默認為 7 天,單位為天。如果 文章 有日期,則此參數有效。
8、遞歸= 0
網(wǎng)頁(yè)中鏈接的遞歸級別數。默認情況下,不執行遞歸下載。
9、延遲=0
連續下載時(shí),兩次下載之間的時(shí)間間隔,以浮點(diǎn)數表示,單位為秒。
10、publication_type='未知'
發(fā)布類(lèi)型,要爬取的內容類(lèi)型,如報紙(newspaper)、雜志(magazine)、博客(blog)等。如果設置為None,則沒(méi)有類(lèi)型,該參數將作為元數據數據并寫(xiě)入 opf 文件。
11、simultaneous_downloads=5
同時(shí)下載的數量,如果服務(wù)器有限制,則設置為 1。delay`>0時(shí),自動(dòng)減為1,默認為5
12、超時(shí)= 120.0
從服務(wù)器下載的最大時(shí)間限制,超過(guò)這個(gè)時(shí)間就是超時(shí)。單位為秒,默認為 120 秒。
13、timefmt= ' [%a, %d %b%Y]
首頁(yè)顯示的日期格式,默認格式為日、月、年
14、feeds=無(wú)
用于下載的 feed,可以是 ``[url1,url2, ...]`` 或 ``[('title1', url1), ('title2', url2),. ..]`` 兩種形式。
15、summary_length= 500
簡(jiǎn)短描述的最大字符數,默認為 500 個(gè)字符。
16、no_stylesheets=False
指示是否下載和使用原創(chuàng )網(wǎng)頁(yè)的樣式表。默認是下載使用。當設置為 True 時(shí),原創(chuàng )樣式表將不會(huì )被下載和使用。
17、remove_javascript=真
是否刪除下載網(wǎng)頁(yè)中的 javascript 腳本。默認是刪除腳本。
18、needs_subscription=False
下載時(shí)是否登錄,如果為T(mén)rue,GUI界面會(huì )詢(xún)問(wèn)登錄用戶(hù)名和密碼。如果設置為“可選”,則登錄名和密碼是可選的。
19、center_navbar=真
生成的電子書(shū)的目錄是否居中對齊。默認為居中對齊,False 為左對齊。
20、編碼=無(wú)
網(wǎng)頁(yè)的字符集編碼不正確時(shí)要設置的字符集編碼,通常是“l(fā)atin1”和“cp1252”。如果設置為無(wú),將自動(dòng)檢測編碼。如果它是可調用的,則使用兩個(gè)參數調用它,即配方對象和解碼的源文件,并返回解碼的源文件。
21、use_embedded_content=無(wú)
通常,我們會(huì )根據嵌入內容的長(cháng)度猜測提要將嵌入所有 文章 內容。該參數具有三個(gè)值。當設置為 None 時(shí),將進(jìn)行猜測;當設置為 True 時(shí),假定提要收錄所有嵌入的 文章 內容;當設置為 False 時(shí),提要不收錄嵌入的 文章 內容。
22、articles_are_obfuscated=False
默認為False,文章更方便抓取。如果設置為T(mén)rue,則表示文章不易爬取,而較難爬取的文章頁(yè)面將通過(guò)實(shí)現get_obfuscated_article方法進(jìn)行處理。
23、reverse_article_order=False
當設置為 True 時(shí),將反轉提要中 文章 的排序。 查看全部
抓取網(wǎng)頁(yè)生成電子書(shū)(calibre網(wǎng)站的在線(xiàn)幫助文檔無(wú)疑是最基本的學(xué)習資源)
calibre 可以抓取網(wǎng)頁(yè)并生成各種格式的電子書(shū)。您可以通過(guò)輸入一些數據使用GUI來(lái)實(shí)現簡(jiǎn)單的自動(dòng)頁(yè)面爬取。主要用于RSS。您還可以使用高級功能來(lái)實(shí)現更復雜的網(wǎng)頁(yè)抓取。但是要爬取一些比較復雜的網(wǎng)頁(yè)內容,還是需要自動(dòng)寫(xiě)一個(gè)PYTHON程序,也就是寫(xiě)一個(gè)recipe。calibre網(wǎng)站的在線(xiàn)幫助文??檔無(wú)疑是最基本的學(xué)習資源。
學(xué)習資料主要有三本,分別是添加你喜歡的新聞網(wǎng)站介紹爬取網(wǎng)頁(yè)的基本方法。食譜的 API 文檔介紹了基本的食譜編寫(xiě)接口 (API),包括參數設置和方法調用。其實(shí)就是研究子類(lèi)的接口,再研究一些菜譜例子。學(xué)完這些內容,應該就可以完成菜譜的編寫(xiě)了。當然,因為菜譜是用python寫(xiě)的,所以學(xué)習python是必不可少的。這里只想介紹一下我學(xué)習界面的心得:
寫(xiě)菜譜,學(xué)習設置界面參數是第一步。其實(shí)通過(guò)設置參數,可以爬取一些簡(jiǎn)單的網(wǎng)頁(yè),生成一定質(zhì)量的電子書(shū)。
API中列出了所有的接口參數,一共48個(gè),并給出了一些解釋。更多細節可以看源碼,源碼前面部分,定義了這48個(gè)參數,有更詳細的解釋。這些參數有些是獨立可設置的,有些是互斥的,設置一個(gè),另一個(gè)不起作用。有些,如果設置為 true,需要實(shí)現一個(gè)方法。大致如下:
1、title =_('未知新聞來(lái)源')
對于生成的電子書(shū)的標題,通常是設置的。
2、描述=你''
使用幾行文字來(lái)描述這個(gè)食譜爬取的內容。原本是對GUI界面下一系列菜譜作用的描述。
3、__author__= __appname__
這個(gè)食譜的作者
4、requires_version= (0,6,0)
執行此配方所需的最低版本 calibre,默認為 0.6.0
5、語(yǔ)言='und'
網(wǎng)頁(yè)內容中使用的語(yǔ)言必須符合 ISO-639 編碼,并且長(cháng)度必須為 2-3 個(gè)字符。
6、max_articles_per_feed= 100
每個(gè)供稿的最大 文章 下載次數,在沒(méi)有 文章 日期的情況下使用。默認為 100。文章oldest_article 參數通常在有日期時(shí)使用。
7、最舊的文章= 7.0
最早下載的 文章 是幾天前。默認為 7 天,單位為天。如果 文章 有日期,則此參數有效。
8、遞歸= 0
網(wǎng)頁(yè)中鏈接的遞歸級別數。默認情況下,不執行遞歸下載。
9、延遲=0
連續下載時(shí),兩次下載之間的時(shí)間間隔,以浮點(diǎn)數表示,單位為秒。
10、publication_type='未知'
發(fā)布類(lèi)型,要爬取的內容類(lèi)型,如報紙(newspaper)、雜志(magazine)、博客(blog)等。如果設置為None,則沒(méi)有類(lèi)型,該參數將作為元數據數據并寫(xiě)入 opf 文件。
11、simultaneous_downloads=5
同時(shí)下載的數量,如果服務(wù)器有限制,則設置為 1。delay`>0時(shí),自動(dòng)減為1,默認為5
12、超時(shí)= 120.0
從服務(wù)器下載的最大時(shí)間限制,超過(guò)這個(gè)時(shí)間就是超時(shí)。單位為秒,默認為 120 秒。
13、timefmt= ' [%a, %d %b%Y]
首頁(yè)顯示的日期格式,默認格式為日、月、年
14、feeds=無(wú)
用于下載的 feed,可以是 ``[url1,url2, ...]`` 或 ``[('title1', url1), ('title2', url2),. ..]`` 兩種形式。
15、summary_length= 500
簡(jiǎn)短描述的最大字符數,默認為 500 個(gè)字符。
16、no_stylesheets=False
指示是否下載和使用原創(chuàng )網(wǎng)頁(yè)的樣式表。默認是下載使用。當設置為 True 時(shí),原創(chuàng )樣式表將不會(huì )被下載和使用。
17、remove_javascript=真
是否刪除下載網(wǎng)頁(yè)中的 javascript 腳本。默認是刪除腳本。
18、needs_subscription=False
下載時(shí)是否登錄,如果為T(mén)rue,GUI界面會(huì )詢(xún)問(wèn)登錄用戶(hù)名和密碼。如果設置為“可選”,則登錄名和密碼是可選的。
19、center_navbar=真
生成的電子書(shū)的目錄是否居中對齊。默認為居中對齊,False 為左對齊。
20、編碼=無(wú)
網(wǎng)頁(yè)的字符集編碼不正確時(shí)要設置的字符集編碼,通常是“l(fā)atin1”和“cp1252”。如果設置為無(wú),將自動(dòng)檢測編碼。如果它是可調用的,則使用兩個(gè)參數調用它,即配方對象和解碼的源文件,并返回解碼的源文件。
21、use_embedded_content=無(wú)
通常,我們會(huì )根據嵌入內容的長(cháng)度猜測提要將嵌入所有 文章 內容。該參數具有三個(gè)值。當設置為 None 時(shí),將進(jìn)行猜測;當設置為 True 時(shí),假定提要收錄所有嵌入的 文章 內容;當設置為 False 時(shí),提要不收錄嵌入的 文章 內容。
22、articles_are_obfuscated=False
默認為False,文章更方便抓取。如果設置為T(mén)rue,則表示文章不易爬取,而較難爬取的文章頁(yè)面將通過(guò)實(shí)現get_obfuscated_article方法進(jìn)行處理。
23、reverse_article_order=False
當設置為 True 時(shí),將反轉提要中 文章 的排序。
抓取網(wǎng)頁(yè)生成電子書(shū)(微信公眾號【出書(shū)啦】效果紙質(zhì)書(shū)效果代碼思路獲取)
網(wǎng)站優(yōu)化 ? 優(yōu)采云 發(fā)表了文章 ? 0 個(gè)評論 ? 475 次瀏覽 ? 2022-03-01 11:23
[目錄](méi)
為您的個(gè)人微信朋友圈數據生成電子書(shū)!介紹
朋友圈留著(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ū)效果
紙書(shū)效果
獲取微信書(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ǎ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 中。如果不存在,則獲取彈框的內容并執行下一步。流程代碼如下:
# 執行以上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è)月了。
# 判斷當下一月控件的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è)面上的所有元素都加載完畢,所以有些元素打印后可能無(wú)法顯示,導致不太好看。因此,需要判斷加載何時(shí)結束。
通過(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)。
這很令人困惑,為什么?通過(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
補充
完整版源碼存放在github上,需要的可以下載
項目持續更新中,歡迎您star此項目 查看全部
抓取網(wǎng)頁(yè)生成電子書(shū)(微信公眾號【出書(shū)啦】效果紙質(zhì)書(shū)效果代碼思路獲取)
[目錄](méi)
為您的個(gè)人微信朋友圈數據生成電子書(shū)!介紹
朋友圈留著(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ū)效果
紙書(shū)效果
獲取微信書(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ǎ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 中。如果不存在,則獲取彈框的內容并執行下一步。流程代碼如下:
# 執行以上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è)月了。
# 判斷當下一月控件的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è)面上的所有元素都加載完畢,所以有些元素打印后可能無(wú)法顯示,導致不太好看。因此,需要判斷加載何時(shí)結束。
通過(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)。
這很令人困惑,為什么?通過(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
補充
完整版源碼存放在github上,需要的可以下載
項目持續更新中,歡迎您star此項目
抓取網(wǎng)頁(yè)生成電子書(shū)( Requests-html快速指南發(fā)送一個(gè)GET請求:Requests(圖) )
網(wǎng)站優(yōu)化 ? 優(yōu)采云 發(fā)表了文章 ? 0 個(gè)評論 ? 113 次瀏覽 ? 2022-02-27 15:10
Requests-html快速指南發(fā)送一個(gè)GET請求:Requests(圖)
)
前兩天無(wú)意中發(fā)現了一個(gè)可以免費下載電子書(shū)的網(wǎng)站,引起了我的采集癮,迫不及待地想下載這些書(shū)。碰巧不久前 requests 的作者 kennethreitz 有一個(gè)新的庫 requests-html,它不僅可以請求網(wǎng)頁(yè),還可以解析 HTML 文檔。事不宜遲,讓我們開(kāi)始吧。
安裝
安裝很簡(jiǎn)單,只需執行:
pip install requests-html
而已。
分析頁(yè)面結構
通過(guò)查看瀏覽器中的元素,可以發(fā)現這本電子書(shū)網(wǎng)站是用WordPress構建的。主頁(yè)列表元素非常簡(jiǎn)單和規則。
所以我們可以通過(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/pyth ... 39%3B, 'https://docs.python.org/3/tutorial/'}
# 通過(guò) CSS 選擇器選擇元素:
about = r.find('.about', first=True)
# 參數 first 表示只獲取找到的第一元素
about.text # 獲取 .about 下的所有文本
about.attrs # 獲取 .about 下所有屬性像 id, src, href 等等
about.html # 獲取 .about 的 HTML
about.find('a') # 獲取 .about 下的所有 a 標簽
構建代碼
需要Python學(xué)習資料可以加群:821871075 資料免費贈予大家
from requests_html import HTMLSession
import requests
import time
import json
import random
import sys
session = HTMLSession()
list_url = 'http://www.allitebooks.com/page/'
USER_AGENTS = [
"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_7_3) AppleWebKit/535.20 (KHTML, like Gecko) Chrome/19.0.1036.7 Safari/535.20",
"Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.1 (KHTML, like Gecko) Chrome/21.0.1180.71 Safari/537.1 LBBROWSER",
"Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/535.11 (KHTML, like Gecko) Chrome/17.0.963.84 Safari/535.11 LBBROWSER",
"Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.1; WOW64; Trident/5.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; .NET4.0C; .NET4.0E)",
"Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; QQDownload 732; .NET4.0C; .NET4.0E)",
"Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; Trident/4.0; SV1; QQDownload 732; .NET4.0C; .NET4.0E; 360SE)",
"Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; QQDownload 732; .NET4.0C; .NET4.0E)",
"Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.1 (KHTML, like Gecko) Chrome/21.0.1180.89 Safari/537.1",
"Mozilla/5.0 (iPad; U; CPU OS 4_2_1 like Mac OS X; zh-cn) AppleWebKit/533.17.9 (KHTML, like Gecko) Version/5.0.2 Mobile/8C148 Safari/6533.18.5",
"Mozilla/5.0 (Windows NT 6.1; Win64; x64; rv:2.0b13pre) Gecko/20110307 Firefox/4.0b13pre",
"Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:16.0) Gecko/20100101 Firefox/16.0",
"Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.11 (KHTML, like Gecko) Chrome/23.0.1271.64 Safari/537.11",
"Mozilla/5.0 (X11; U; Linux x86_64; zh-CN; rv:1.9.2.10) Gecko/20100922 Ubuntu/10.10 (maverick) Firefox/3.6.10"
]
# 獲取當前列表頁(yè)所有圖書(shū)鏈接
def get_list(url):
response = session.get(url)
all_link = response.html.find('.entry-title a') # 獲取頁(yè)面所有圖書(shū)詳情鏈接
for link in all_link:
getBookUrl(link.attrs['href'])
# 獲取圖書(shū)下載鏈接
def getBookUrl(url):
response = session.get(url)
l = response.html.find('.download-links a', first=True)
if l is not None: # 運行后發(fā)現有的個(gè)別頁(yè)面沒(méi)有下載鏈接,這里加個(gè)判斷
link = l.attrs['href'];
download(link)
#下載圖書(shū)
def download(url):
# 隨機瀏覽器 User-Agent
headers={ "User-Agent":random.choice(USER_AGENTS) }
# 獲取文件名
filename = url.split('/')[-1]
# 如果 url 里包含 .pdf
if ".pdf" in url:
file = 'book/'+filename # 文件路徑寫(xiě)死了,運行時(shí)當前目錄必須有名 book 的文件夾
with open(file, 'wb') as f:
print("正在下載 %s" % filename)
response = requests.get(url, stream=True, headers=headers)
# 獲取文件大小
total_length = response.headers.get('content-length')
# 如果文件大小不存在,則直接寫(xiě)入返回的文本
if total_length is None:
f.write(response.content)
else:
# 下載進(jìn)度條
dl = 0
total_length = int(total_length) # 文件大小
for data in response.iter_content(chunk_size=4096): # 每次響應獲取 4096 字節
dl += len(data)
f.write(data)
done = int(50 * dl / total_length)
sys.stdout.write("\r[%s%s]" % ('=' * done, ' ' * (50-done)) ) # 打印進(jìn)度條
sys.stdout.flush()
print(filename + '下載完成!')
if __name__ == '__main__':
#從這運行,應為知道列表總數,所以偷個(gè)懶直接開(kāi)始循環(huán)
for x in range(1,756):
print('當前頁(yè)面: '+ str(x))
get_list(list_url+str(x))
運行結果:
查看全部
抓取網(wǎng)頁(yè)生成電子書(shū)(
Requests-html快速指南發(fā)送一個(gè)GET請求:Requests(圖)
)
前兩天無(wú)意中發(fā)現了一個(gè)可以免費下載電子書(shū)的網(wǎng)站,引起了我的采集癮,迫不及待地想下載這些書(shū)。碰巧不久前 requests 的作者 kennethreitz 有一個(gè)新的庫 requests-html,它不僅可以請求網(wǎng)頁(yè),還可以解析 HTML 文檔。事不宜遲,讓我們開(kāi)始吧。
安裝
安裝很簡(jiǎn)單,只需執行:
pip install requests-html
而已。
分析頁(yè)面結構
通過(guò)查看瀏覽器中的元素,可以發(fā)現這本電子書(shū)網(wǎng)站是用WordPress構建的。主頁(yè)列表元素非常簡(jiǎn)單和規則。
所以我們可以通過(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/pyth ... 39%3B, 'https://docs.python.org/3/tutorial/'}
# 通過(guò) CSS 選擇器選擇元素:
about = r.find('.about', first=True)
# 參數 first 表示只獲取找到的第一元素
about.text # 獲取 .about 下的所有文本
about.attrs # 獲取 .about 下所有屬性像 id, src, href 等等
about.html # 獲取 .about 的 HTML
about.find('a') # 獲取 .about 下的所有 a 標簽
構建代碼
需要Python學(xué)習資料可以加群:821871075 資料免費贈予大家
from requests_html import HTMLSession
import requests
import time
import json
import random
import sys
session = HTMLSession()
list_url = 'http://www.allitebooks.com/page/'
USER_AGENTS = [
"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_7_3) AppleWebKit/535.20 (KHTML, like Gecko) Chrome/19.0.1036.7 Safari/535.20",
"Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.1 (KHTML, like Gecko) Chrome/21.0.1180.71 Safari/537.1 LBBROWSER",
"Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/535.11 (KHTML, like Gecko) Chrome/17.0.963.84 Safari/535.11 LBBROWSER",
"Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.1; WOW64; Trident/5.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; .NET4.0C; .NET4.0E)",
"Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; QQDownload 732; .NET4.0C; .NET4.0E)",
"Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; Trident/4.0; SV1; QQDownload 732; .NET4.0C; .NET4.0E; 360SE)",
"Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; QQDownload 732; .NET4.0C; .NET4.0E)",
"Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.1 (KHTML, like Gecko) Chrome/21.0.1180.89 Safari/537.1",
"Mozilla/5.0 (iPad; U; CPU OS 4_2_1 like Mac OS X; zh-cn) AppleWebKit/533.17.9 (KHTML, like Gecko) Version/5.0.2 Mobile/8C148 Safari/6533.18.5",
"Mozilla/5.0 (Windows NT 6.1; Win64; x64; rv:2.0b13pre) Gecko/20110307 Firefox/4.0b13pre",
"Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:16.0) Gecko/20100101 Firefox/16.0",
"Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.11 (KHTML, like Gecko) Chrome/23.0.1271.64 Safari/537.11",
"Mozilla/5.0 (X11; U; Linux x86_64; zh-CN; rv:1.9.2.10) Gecko/20100922 Ubuntu/10.10 (maverick) Firefox/3.6.10"
]
# 獲取當前列表頁(yè)所有圖書(shū)鏈接
def get_list(url):
response = session.get(url)
all_link = response.html.find('.entry-title a') # 獲取頁(yè)面所有圖書(shū)詳情鏈接
for link in all_link:
getBookUrl(link.attrs['href'])
# 獲取圖書(shū)下載鏈接
def getBookUrl(url):
response = session.get(url)
l = response.html.find('.download-links a', first=True)
if l is not None: # 運行后發(fā)現有的個(gè)別頁(yè)面沒(méi)有下載鏈接,這里加個(gè)判斷
link = l.attrs['href'];
download(link)
#下載圖書(shū)
def download(url):
# 隨機瀏覽器 User-Agent
headers={ "User-Agent":random.choice(USER_AGENTS) }
# 獲取文件名
filename = url.split('/')[-1]
# 如果 url 里包含 .pdf
if ".pdf" in url:
file = 'book/'+filename # 文件路徑寫(xiě)死了,運行時(shí)當前目錄必須有名 book 的文件夾
with open(file, 'wb') as f:
print("正在下載 %s" % filename)
response = requests.get(url, stream=True, headers=headers)
# 獲取文件大小
total_length = response.headers.get('content-length')
# 如果文件大小不存在,則直接寫(xiě)入返回的文本
if total_length is None:
f.write(response.content)
else:
# 下載進(jìn)度條
dl = 0
total_length = int(total_length) # 文件大小
for data in response.iter_content(chunk_size=4096): # 每次響應獲取 4096 字節
dl += len(data)
f.write(data)
done = int(50 * dl / total_length)
sys.stdout.write("\r[%s%s]" % ('=' * done, ' ' * (50-done)) ) # 打印進(jìn)度條
sys.stdout.flush()
print(filename + '下載完成!')
if __name__ == '__main__':
#從這運行,應為知道列表總數,所以偷個(gè)懶直接開(kāi)始循環(huán)
for x in range(1,756):
print('當前頁(yè)面: '+ str(x))
get_list(list_url+str(x))
運行結果:
抓取網(wǎng)頁(yè)生成電子書(shū)(軟件介紹王子網(wǎng)頁(yè)轉換小精靈(圖)的軟件特色)
網(wǎng)站優(yōu)化 ? 優(yōu)采云 發(fā)表了文章 ? 0 個(gè)評論 ? 127 次瀏覽 ? 2022-02-27 07:16
軟件介紹
王子網(wǎng)頁(yè)轉換精靈是一款簡(jiǎn)單易用的網(wǎng)頁(yè)轉換小程序,支持網(wǎng)頁(yè)制作、網(wǎng)頁(yè)批量轉換、電子書(shū)制作、簡(jiǎn)繁體轉換、文件格式轉換、文件分割合并、文件加密和解密等功能。將網(wǎng)頁(yè)內容轉換為文本或快速將文本轉換為網(wǎng)頁(yè)可以快速完成。
軟件功能
1、 將文本文件批量轉換為web文件(txt等轉htm)
2、網(wǎng)頁(yè)文件批量轉成文本文件(htm等轉成txt)
3、Word、EXCEL、POWERPOINT文檔批量轉換成web文件(doc xls ppt等轉換成htm)
4、圖片文件、FLASH、mp3、wmv文件批量轉換為網(wǎng)頁(yè)(jpg gif swf mp3 wmv等--> htm)
5、支持WORD(doc文件)一步生成電子書(shū)(夢(mèng)寐以求的功能吧?哈哈……)
6、可以作為文本文件使用的電子書(shū)創(chuàng )作工具軟件。(并選擇 Web 模板或 CSS)
7、支持一步將圖片文件編譯成電子相冊。(并且可以選擇電子相冊模板或CSS)
8、支持mht文件一鍵生成電子書(shū)
9、網(wǎng)頁(yè)顏色選擇功能??梢圆东@屏幕任何可見(jiàn)部分的顏色代碼;目前以三種格式捕獲顏色
10、網(wǎng)頁(yè)批量壓縮功能。選擇性或批量壓縮網(wǎng)頁(yè)文件
11、批量加密文件,也可以解密文件。
12、批量拆分文件,也可以合并文件。
13、文檔合并功能。支持多種文件格式合并為五種格式之一,HTML、TXT、RTF、DOC、XML
14、支持HTML網(wǎng)頁(yè)文件一鍵生成電子書(shū)。
15、支持簡(jiǎn)繁體中文轉換(GB2312->BIG5 BIG5->GB2312)
16、網(wǎng)頁(yè)特效采集與管理功能。并且可以方便的批量插入網(wǎng)頁(yè)
17、反編譯 CHM 電子書(shū)。
18、在線(xiàn)搜索功能。集成強大的中文搜索引擎---百度搜索
19、已經(jīng)提供了幾個(gè) CSS 和模板。你也可以自己寫(xiě)。讓過(guò)渡更隨意
20、提供從html文件生成電子書(shū)的兩個(gè)選項
21、支持ppt(powerpoint)文件一步生成電子書(shū)
22、支持xls(excel)文件一鍵生成電子書(shū)
23、文字和網(wǎng)頁(yè)文字的批量替換
24、HTML TXT RTF DOC XML等格式可以任意相互轉換
25、除了轉換上面列出的文件類(lèi)型,還可以自己添加轉換類(lèi)型
安裝方式
1、先等待王子網(wǎng)頁(yè)轉換精靈下載完成
2、使用壓縮軟件解壓文件
3、雙擊運行“PrinceSetup_nh.exe”開(kāi)始安裝
4、安裝完成后可以使用自定義安裝目錄 查看全部
抓取網(wǎng)頁(yè)生成電子書(shū)(軟件介紹王子網(wǎng)頁(yè)轉換小精靈(圖)的軟件特色)
軟件介紹
王子網(wǎng)頁(yè)轉換精靈是一款簡(jiǎn)單易用的網(wǎng)頁(yè)轉換小程序,支持網(wǎng)頁(yè)制作、網(wǎng)頁(yè)批量轉換、電子書(shū)制作、簡(jiǎn)繁體轉換、文件格式轉換、文件分割合并、文件加密和解密等功能。將網(wǎng)頁(yè)內容轉換為文本或快速將文本轉換為網(wǎng)頁(yè)可以快速完成。

軟件功能
1、 將文本文件批量轉換為web文件(txt等轉htm)
2、網(wǎng)頁(yè)文件批量轉成文本文件(htm等轉成txt)
3、Word、EXCEL、POWERPOINT文檔批量轉換成web文件(doc xls ppt等轉換成htm)
4、圖片文件、FLASH、mp3、wmv文件批量轉換為網(wǎng)頁(yè)(jpg gif swf mp3 wmv等--> htm)
5、支持WORD(doc文件)一步生成電子書(shū)(夢(mèng)寐以求的功能吧?哈哈……)
6、可以作為文本文件使用的電子書(shū)創(chuàng )作工具軟件。(并選擇 Web 模板或 CSS)
7、支持一步將圖片文件編譯成電子相冊。(并且可以選擇電子相冊模板或CSS)
8、支持mht文件一鍵生成電子書(shū)
9、網(wǎng)頁(yè)顏色選擇功能??梢圆东@屏幕任何可見(jiàn)部分的顏色代碼;目前以三種格式捕獲顏色
10、網(wǎng)頁(yè)批量壓縮功能。選擇性或批量壓縮網(wǎng)頁(yè)文件
11、批量加密文件,也可以解密文件。
12、批量拆分文件,也可以合并文件。
13、文檔合并功能。支持多種文件格式合并為五種格式之一,HTML、TXT、RTF、DOC、XML
14、支持HTML網(wǎng)頁(yè)文件一鍵生成電子書(shū)。
15、支持簡(jiǎn)繁體中文轉換(GB2312->BIG5 BIG5->GB2312)
16、網(wǎng)頁(yè)特效采集與管理功能。并且可以方便的批量插入網(wǎng)頁(yè)
17、反編譯 CHM 電子書(shū)。
18、在線(xiàn)搜索功能。集成強大的中文搜索引擎---百度搜索
19、已經(jīng)提供了幾個(gè) CSS 和模板。你也可以自己寫(xiě)。讓過(guò)渡更隨意
20、提供從html文件生成電子書(shū)的兩個(gè)選項
21、支持ppt(powerpoint)文件一步生成電子書(shū)
22、支持xls(excel)文件一鍵生成電子書(shū)
23、文字和網(wǎng)頁(yè)文字的批量替換
24、HTML TXT RTF DOC XML等格式可以任意相互轉換
25、除了轉換上面列出的文件類(lèi)型,還可以自己添加轉換類(lèi)型
安裝方式
1、先等待王子網(wǎng)頁(yè)轉換精靈下載完成
2、使用壓縮軟件解壓文件
3、雙擊運行“PrinceSetup_nh.exe”開(kāi)始安裝
4、安裝完成后可以使用自定義安裝目錄
抓取網(wǎng)頁(yè)生成電子書(shū)(這是最好轉換為PDF后的效果怎么樣?怎么用?)
網(wǎng)站優(yōu)化 ? 優(yōu)采云 發(fā)表了文章 ? 0 個(gè)評論 ? 97 次瀏覽 ? 2022-02-26 18:22
大路最近遇到一個(gè)問(wèn)題。有些網(wǎng)頁(yè)上的數據需要離線(xiàn)保存備份,但是各種剪輯工具并不能完全抓取完整的網(wǎng)頁(yè),所以不知道能不能轉成PDF保存。
注意,這是在大陸搜索了大約7到8個(gè)在線(xiàn)工具后,選擇了一個(gè)各方面都滿(mǎn)足需求、使用頻率低、用量少的工具。但絕對不是最好的,如果你知道更好的工具,請留言告訴我
至于為什么要保存到本地閱讀,其實(shí)我是想用記事本保存的,但是效果很差,幾乎看不懂。本地存儲是因為這幾年內容太多變成404了。原來(lái)的網(wǎng)絡(luò )采集夾已成為孤島。除了采集夾本身,大部分鏈接都死了,很尷尬。.
不過(guò)大路轉成PDF后還是把PDF放在記事本里,畢竟方便
Pdf人群
Pdfcrowd 是一個(gè)在線(xiàn)文檔轉換工具,支持將網(wǎng)頁(yè)轉換為PDF和圖片,可以是URL、HTML文件或HTML代碼
可以使用了,使用默認配置,直接輸入網(wǎng)址,點(diǎn)擊轉換即可,可以直接下載,也可以在線(xiàn)閱讀,非常方便。
但是轉換后的PDF會(huì )在每一頁(yè)的末尾加一個(gè)小尾巴,對個(gè)人使用是無(wú)害的,商業(yè)應用請慎重。
例子
下面是使用 Pdfcrowd 轉換為 PDF 的效果。注意中間的黑框是PDF分頁(yè),不是bug
有相同需求的同學(xué)可以試試,Pdfcrowd網(wǎng)站:
另外,本文的重點(diǎn)是,如果您有其他建議,請盡快發(fā)送過(guò)來(lái)。 查看全部
抓取網(wǎng)頁(yè)生成電子書(shū)(這是最好轉換為PDF后的效果怎么樣?怎么用?)
大路最近遇到一個(gè)問(wèn)題。有些網(wǎng)頁(yè)上的數據需要離線(xiàn)保存備份,但是各種剪輯工具并不能完全抓取完整的網(wǎng)頁(yè),所以不知道能不能轉成PDF保存。
注意,這是在大陸搜索了大約7到8個(gè)在線(xiàn)工具后,選擇了一個(gè)各方面都滿(mǎn)足需求、使用頻率低、用量少的工具。但絕對不是最好的,如果你知道更好的工具,請留言告訴我
至于為什么要保存到本地閱讀,其實(shí)我是想用記事本保存的,但是效果很差,幾乎看不懂。本地存儲是因為這幾年內容太多變成404了。原來(lái)的網(wǎng)絡(luò )采集夾已成為孤島。除了采集夾本身,大部分鏈接都死了,很尷尬。.
不過(guò)大路轉成PDF后還是把PDF放在記事本里,畢竟方便
Pdf人群
Pdfcrowd 是一個(gè)在線(xiàn)文檔轉換工具,支持將網(wǎng)頁(yè)轉換為PDF和圖片,可以是URL、HTML文件或HTML代碼
可以使用了,使用默認配置,直接輸入網(wǎng)址,點(diǎn)擊轉換即可,可以直接下載,也可以在線(xiàn)閱讀,非常方便。
但是轉換后的PDF會(huì )在每一頁(yè)的末尾加一個(gè)小尾巴,對個(gè)人使用是無(wú)害的,商業(yè)應用請慎重。
例子
下面是使用 Pdfcrowd 轉換為 PDF 的效果。注意中間的黑框是PDF分頁(yè),不是bug
有相同需求的同學(xué)可以試試,Pdfcrowd網(wǎng)站:
另外,本文的重點(diǎn)是,如果您有其他建議,請盡快發(fā)送過(guò)來(lái)。
抓取網(wǎng)頁(yè)生成電子書(shū)(Python解釋器及豐富的標準庫模塊源碼或機器碼源碼)
網(wǎng)站優(yōu)化 ? 優(yōu)采云 發(fā)表了文章 ? 0 個(gè)評論 ? 95 次瀏覽 ? 2022-02-24 16:07
Python官方文檔(中文版)
Python 是一種易于學(xué)習但功能強大的編程語(yǔ)言。它提供了高效的高級數據結構,以及簡(jiǎn)單高效的面向對象編程。Python 優(yōu)雅的語(yǔ)法和動(dòng)態(tài)類(lèi)型,以及解釋語(yǔ)言的性質(zhì),使其成為大多數平臺上腳本和快速應用程序開(kāi)發(fā)的理想語(yǔ)言。Python解釋器及其豐富的標準庫以源代碼或機器碼的形式提供,適用于各大系統平臺的版本可從Python官網(wǎng)免費獲取,并可免費分發(fā)。這個(gè) 網(wǎng)站 還收錄發(fā)布頁(yè)面或許多免費第三方 Python 模塊、程序和工具的鏈接,以及其他文檔。Python 解釋器易于擴展,并且可以使用 C 或 C++(或其他可以從 C 調用的語(yǔ)言)擴展新的函數和數據類(lèi)型。Python 也可以用作可定制軟件中的擴展語(yǔ)言。本教程對 Python 語(yǔ)言和系統的基本概念和功能進(jìn)行了非正式的介紹。最好有一個(gè) Python 解釋器準備好邊看邊練習,但是所有的例子都是獨立的,所以本教程也可以離線(xiàn)閱讀。有關(guān)標準對象和模塊,請參閱 Python 標準庫。Python 語(yǔ)言參考提供了更正式的語(yǔ)言參考。想寫(xiě) C 或 C++ 擴展的可以參考擴展和嵌入 Python 解釋器和 Python/C API 參考手冊。也有不少書(shū)籍深入解釋了 Python。本教程并未完全涵蓋所有功能,甚至可能不會(huì )涵蓋常用功能。本教程僅涵蓋 Python 最顯著(zhù)的特性,并將讓您體驗該語(yǔ)言的風(fēng)格特性。完成本教程后,您將能夠閱讀和編寫(xiě) Python 模塊和程序,并開(kāi)始學(xué)習更多 Python 庫模塊,詳情請參閱 Python 標準庫。
立即下載 查看全部
抓取網(wǎng)頁(yè)生成電子書(shū)(Python解釋器及豐富的標準庫模塊源碼或機器碼源碼)
Python官方文檔(中文版)
Python 是一種易于學(xué)習但功能強大的編程語(yǔ)言。它提供了高效的高級數據結構,以及簡(jiǎn)單高效的面向對象編程。Python 優(yōu)雅的語(yǔ)法和動(dòng)態(tài)類(lèi)型,以及解釋語(yǔ)言的性質(zhì),使其成為大多數平臺上腳本和快速應用程序開(kāi)發(fā)的理想語(yǔ)言。Python解釋器及其豐富的標準庫以源代碼或機器碼的形式提供,適用于各大系統平臺的版本可從Python官網(wǎng)免費獲取,并可免費分發(fā)。這個(gè) 網(wǎng)站 還收錄發(fā)布頁(yè)面或許多免費第三方 Python 模塊、程序和工具的鏈接,以及其他文檔。Python 解釋器易于擴展,并且可以使用 C 或 C++(或其他可以從 C 調用的語(yǔ)言)擴展新的函數和數據類(lèi)型。Python 也可以用作可定制軟件中的擴展語(yǔ)言。本教程對 Python 語(yǔ)言和系統的基本概念和功能進(jìn)行了非正式的介紹。最好有一個(gè) Python 解釋器準備好邊看邊練習,但是所有的例子都是獨立的,所以本教程也可以離線(xiàn)閱讀。有關(guān)標準對象和模塊,請參閱 Python 標準庫。Python 語(yǔ)言參考提供了更正式的語(yǔ)言參考。想寫(xiě) C 或 C++ 擴展的可以參考擴展和嵌入 Python 解釋器和 Python/C API 參考手冊。也有不少書(shū)籍深入解釋了 Python。本教程并未完全涵蓋所有功能,甚至可能不會(huì )涵蓋常用功能。本教程僅涵蓋 Python 最顯著(zhù)的特性,并將讓您體驗該語(yǔ)言的風(fēng)格特性。完成本教程后,您將能夠閱讀和編寫(xiě) Python 模塊和程序,并開(kāi)始學(xué)習更多 Python 庫模塊,詳情請參閱 Python 標準庫。
立即下載
抓取網(wǎng)頁(yè)生成電子書(shū)(從里抓取書(shū)籍列表的書(shū)籍信息和每本書(shū)對應的ISBN碼)
網(wǎng)站優(yōu)化 ? 優(yōu)采云 發(fā)表了文章 ? 0 個(gè)評論 ? 231 次瀏覽 ? 2022-03-16 10:16
本文首先抓取圖書(shū)列表的圖書(shū)信息和每本書(shū)對應的ISBN碼。
一、分析需求和網(wǎng)站結構
這個(gè)網(wǎng)站的結構很簡(jiǎn)單,分頁(yè)+書(shū)單+書(shū)詳情頁(yè)。
獲取圖書(shū)的詳細信息和ISBN碼,我們需要遍歷所有頁(yè)碼,進(jìn)入圖書(shū)列表,然后從圖書(shū)列表中進(jìn)入每本書(shū)的詳細信息頁(yè)面,這樣就可以抓取到詳細信息和ISBN代碼。
二、 從分頁(yè)開(kāi)始遍歷書(shū)單的每一頁(yè)
通過(guò)查看分頁(yè)功能的HTML代碼,可以通過(guò)class="current"定位到當前頁(yè)碼所在的span標簽。這個(gè)span標簽的下一個(gè)兄弟a標簽是指向下一頁(yè)的鏈接所在的標簽。
通過(guò)比較最后一頁(yè)的span可以發(fā)現,在最后一頁(yè)中,class="current"找到的span標簽沒(méi)有下一個(gè)兄弟a標簽。所以我們可以用它來(lái)判斷我們是否已經(jīng)到了最后一頁(yè)。代碼顯示如下:
# Get the next page url from the current page url
def get_next_page_url(url):
page = urlopen(url)
soup_page = BeautifulSoup(page, 'lxml')
page.close()
# Get current page and next page tag
current_page_tag = soup_page.find(class_="current")
next_page_tag = current_page_tag.find_next_sibling()
# Check if the current page is the last one
if next_page_tag is None:
next_page_url = None
else:
next_page_url = next_page_tag['href']
return next_page_url
三、從書(shū)單中找到詳細頁(yè)面的鏈接
點(diǎn)擊書(shū)單中的書(shū)名或封面圖進(jìn)入詳情,然后選擇書(shū)名和封面圖之一,在此處選擇書(shū)名。
我們可以通過(guò)查找class="entry-title"來(lái)定位書(shū)名所在的h2標簽,然后通過(guò)這個(gè)標簽的a屬性獲取鏈接所在的a標簽,再通過(guò)字符串獲取鏈接a 標簽的屬性。
代碼顯示如下:
# Get the book detail urls by page url
def get_book_detail_urls(url):
page = urlopen(url)
soup = BeautifulSoup(page, 'lxml')
page.close()
urls = []
book_header_tags = soup.find_all(class_="entry-title")
for book_header_tag in book_header_tags:
urls.append(book_header_tag.a['href'])
return urls
四、從圖書(shū)詳情頁(yè)面獲取書(shū)名和 ISBN 碼
通過(guò)查看圖書(shū)詳情頁(yè)的HTML代碼,我們可以通過(guò)查找class="single-title"獲取書(shū)名,定位到書(shū)名所在的h1標簽,然后定位到"Isbn:"所在的dt標簽通過(guò)查找 text="Isbn:" 進(jìn)行定位,該標簽的下一個(gè)兄弟節點(diǎn)就是該書(shū)的 ISBN 碼所在的標簽,通過(guò)該標簽的字符串屬性可以獲取 ISBN 碼的內容。
代碼顯示如下:
# Get the book detail info by book detail url
def get_book_detail_info(url):
page = urlopen(url)
book_detail_soup = BeautifulSoup(page, 'lxml')
page.close()
title_tag = book_detail_soup.find(class_="single-title")
title = title_tag.string
isbn_key_tag = book_detail_soup.find(text="Isbn:").parent
isbn_tag = isbn_key_tag.find_next_sibling()
isbn = isbn_tag.string.strip() # Remove the whitespace with the strip method
return { 'title': title, 'isbn': isbn }
五、整合三部分代碼
def run():
url = "http://www.allitebooks.com/pro ... ot%3B
book_info_list = []
def scapping(page_url):
book_detail_urls = get_book_detail_urls(page_url)
for book_detail_url in book_detail_urls:
# print(book_detail_url)
book_info = get_book_detail_info(book_detail_url)
print(book_info)
book_info_list.append(book_info)
next_page_url = get_next_page_url(page_url)
if next_page_url is not None:
scapping(next_page_url)
else:
return
scapping(url)
運行結果
六、將結果寫(xiě)入文件以供進(jìn)一步處理
def save_to_csv(list):
with open('books.csv', 'w', newline='') as fp:
a = csv.writer(fp, delimiter=',')
a.writerow(['title','isbn'])
a.writerows(list)
待續...
完整代碼請移步github:
Beautiful Soup 基礎知識:Web 爬蟲(chóng):從刮書(shū)信息和刮價(jià)格 (1): Basics Beautiful Soup
我們正處于大數據時(shí)代,歡迎對數據處理感興趣的朋友查看另一個(gè)系列隨筆:Using Python for Data Analysis Basics 系列隨筆小結
接下來(lái)的作文是網(wǎng)站根據得到的ISBN碼得到每本書(shū)對應的價(jià)格,通過(guò)數據分析的知識對得到的數據進(jìn)行處理,最后輸出成csv文件。感興趣的朋友歡迎關(guān)注本博客,也歡迎留言討論。 查看全部
抓取網(wǎng)頁(yè)生成電子書(shū)(從里抓取書(shū)籍列表的書(shū)籍信息和每本書(shū)對應的ISBN碼)
本文首先抓取圖書(shū)列表的圖書(shū)信息和每本書(shū)對應的ISBN碼。
一、分析需求和網(wǎng)站結構
這個(gè)網(wǎng)站的結構很簡(jiǎn)單,分頁(yè)+書(shū)單+書(shū)詳情頁(yè)。
獲取圖書(shū)的詳細信息和ISBN碼,我們需要遍歷所有頁(yè)碼,進(jìn)入圖書(shū)列表,然后從圖書(shū)列表中進(jìn)入每本書(shū)的詳細信息頁(yè)面,這樣就可以抓取到詳細信息和ISBN代碼。
二、 從分頁(yè)開(kāi)始遍歷書(shū)單的每一頁(yè)

通過(guò)查看分頁(yè)功能的HTML代碼,可以通過(guò)class="current"定位到當前頁(yè)碼所在的span標簽。這個(gè)span標簽的下一個(gè)兄弟a標簽是指向下一頁(yè)的鏈接所在的標簽。
通過(guò)比較最后一頁(yè)的span可以發(fā)現,在最后一頁(yè)中,class="current"找到的span標簽沒(méi)有下一個(gè)兄弟a標簽。所以我們可以用它來(lái)判斷我們是否已經(jīng)到了最后一頁(yè)。代碼顯示如下:
# Get the next page url from the current page url
def get_next_page_url(url):
page = urlopen(url)
soup_page = BeautifulSoup(page, 'lxml')
page.close()
# Get current page and next page tag
current_page_tag = soup_page.find(class_="current")
next_page_tag = current_page_tag.find_next_sibling()
# Check if the current page is the last one
if next_page_tag is None:
next_page_url = None
else:
next_page_url = next_page_tag['href']
return next_page_url
三、從書(shū)單中找到詳細頁(yè)面的鏈接
點(diǎn)擊書(shū)單中的書(shū)名或封面圖進(jìn)入詳情,然后選擇書(shū)名和封面圖之一,在此處選擇書(shū)名。

我們可以通過(guò)查找class="entry-title"來(lái)定位書(shū)名所在的h2標簽,然后通過(guò)這個(gè)標簽的a屬性獲取鏈接所在的a標簽,再通過(guò)字符串獲取鏈接a 標簽的屬性。
代碼顯示如下:
# Get the book detail urls by page url
def get_book_detail_urls(url):
page = urlopen(url)
soup = BeautifulSoup(page, 'lxml')
page.close()
urls = []
book_header_tags = soup.find_all(class_="entry-title")
for book_header_tag in book_header_tags:
urls.append(book_header_tag.a['href'])
return urls
四、從圖書(shū)詳情頁(yè)面獲取書(shū)名和 ISBN 碼

通過(guò)查看圖書(shū)詳情頁(yè)的HTML代碼,我們可以通過(guò)查找class="single-title"獲取書(shū)名,定位到書(shū)名所在的h1標簽,然后定位到"Isbn:"所在的dt標簽通過(guò)查找 text="Isbn:" 進(jìn)行定位,該標簽的下一個(gè)兄弟節點(diǎn)就是該書(shū)的 ISBN 碼所在的標簽,通過(guò)該標簽的字符串屬性可以獲取 ISBN 碼的內容。
代碼顯示如下:
# Get the book detail info by book detail url
def get_book_detail_info(url):
page = urlopen(url)
book_detail_soup = BeautifulSoup(page, 'lxml')
page.close()
title_tag = book_detail_soup.find(class_="single-title")
title = title_tag.string
isbn_key_tag = book_detail_soup.find(text="Isbn:").parent
isbn_tag = isbn_key_tag.find_next_sibling()
isbn = isbn_tag.string.strip() # Remove the whitespace with the strip method
return { 'title': title, 'isbn': isbn }
五、整合三部分代碼
def run():
url = "http://www.allitebooks.com/pro ... ot%3B
book_info_list = []
def scapping(page_url):
book_detail_urls = get_book_detail_urls(page_url)
for book_detail_url in book_detail_urls:
# print(book_detail_url)
book_info = get_book_detail_info(book_detail_url)
print(book_info)
book_info_list.append(book_info)
next_page_url = get_next_page_url(page_url)
if next_page_url is not None:
scapping(next_page_url)
else:
return
scapping(url)
運行結果

六、將結果寫(xiě)入文件以供進(jìn)一步處理
def save_to_csv(list):
with open('books.csv', 'w', newline='') as fp:
a = csv.writer(fp, delimiter=',')
a.writerow(['title','isbn'])
a.writerows(list)
待續...
完整代碼請移步github:
Beautiful Soup 基礎知識:Web 爬蟲(chóng):從刮書(shū)信息和刮價(jià)格 (1): Basics Beautiful Soup
我們正處于大數據時(shí)代,歡迎對數據處理感興趣的朋友查看另一個(gè)系列隨筆:Using Python for Data Analysis Basics 系列隨筆小結
接下來(lái)的作文是網(wǎng)站根據得到的ISBN碼得到每本書(shū)對應的價(jià)格,通過(guò)數據分析的知識對得到的數據進(jìn)行處理,最后輸出成csv文件。感興趣的朋友歡迎關(guān)注本博客,也歡迎留言討論。
抓取網(wǎng)頁(yè)生成電子書(shū)(如何將網(wǎng)頁(yè)文章批量抓取、生成電子書(shū)、直接推送到Kindle)
網(wǎng)站優(yōu)化 ? 優(yōu)采云 發(fā)表了文章 ? 0 個(gè)評論 ? 136 次瀏覽 ? 2022-03-14 07:13
我一直在研究如何將我關(guān)心的網(wǎng)頁(yè)或 文章 放入我的 Kindle 中進(jìn)行認真閱讀,但我已經(jīng)很長(cháng)時(shí)間沒(méi)有取得任何真正的進(jìn)展。手工排版制作電子書(shū)的方法雖然簡(jiǎn)單易行,但對于短小、更新頻繁的網(wǎng)頁(yè)文章來(lái)說(shuō)效率低下。如果有一個(gè)工具可以文章批量抓取網(wǎng)頁(yè),生成電子書(shū),然后直接推送到Kindle上就好了。Doocer 就是這樣一種實(shí)用程序。
Doocer是@lepture開(kāi)發(fā)的在線(xiàn)服務(wù),允許用戶(hù)在Pocket Read Later賬號中提交URL、RSS提要地址和文章,然后逐一或批量制作成ePub和MOBI電子書(shū). 您可以直接在 Doocer 中閱讀所有文章,也可以將它們推送到 Kindle、Apple Books 中閱讀。
真的很好的閱讀體驗
Doocer 生成的電子書(shū)在排版方面非常出色。應該有的內容很多,不應該有的內容不多。本書(shū)不僅封面圖文并茂,還有文章目錄、網(wǎng)站出處、文章原作者等信息。Doocer生成的MOBI電子書(shū)支持KF8標準,因此支持Kindle原生替換自定義字體。
由于網(wǎng)站文章通常有標準和通用的排版規范,Doocer生成的電子書(shū)文章中的大小標題和列表圖例與原網(wǎng)頁(yè)文章高度一致@>。原文章中的所有超鏈接也被保留,評論、廣告等內容全部丟棄。整本書(shū)的閱讀體驗非常友好。(當然,如果原網(wǎng)頁(yè)文章的布局沒(méi)有規則,那么生成的電子書(shū)也可能面目全非。)
將網(wǎng)頁(yè) 文章 制作成電子書(shū)
Doocer完成注冊登錄后,我們就可以開(kāi)始將網(wǎng)頁(yè)文章制作成電子書(shū)了。首先,我們點(diǎn)擊“NEW BOOK”按鈕新建電子書(shū),輸入電子書(shū)名稱(chēng)。接下來(lái)選擇右上角的“添加”以添加 文章 URL 或 RSS 提要地址。
以小眾網(wǎng)站的文章為例,我們選擇“FEED”,在輸入框中粘貼RSS地址,然后點(diǎn)擊“PARSE”,那么小眾最近文章的列表就會(huì )出現為我們顯示添加到。我們可以根據需要選擇,也可以點(diǎn)擊“SELECT ALL”全選文章。最后,下拉到頁(yè)面底部,選擇“SAVE”,那么這些文章就會(huì )被添加到書(shū)里。
其實(shí)Doocer網(wǎng)頁(yè)與RSS工具很相似,實(shí)現了從網(wǎng)站批量抓取文章并集中展示的功能。
要將這些 文章 轉換為電子書(shū)并將它們推送到 Kindle,我們必須做一些簡(jiǎn)單的事情。
首先,根據Doocer個(gè)人設置頁(yè)面中的提示,我們打開(kāi)它,將Doocer電子書(shū)的發(fā)送地址添加到個(gè)人文檔接收地址中。完成后,我們在輸入框中填寫(xiě)Kindle的個(gè)人文檔接收地址,點(diǎn)擊保存。
最后,我們在 Doocer 中打開(kāi)《少數派》這本書(shū),在頁(yè)面上找到“Publish”,選擇 Send to Kindle。大約 10 到 30 分鐘,Doocer 將完成圖書(shū)制作并將圖書(shū)推送到 Kindle。
仍有一些問(wèn)題需要注意
Doocer目前處于beta測試階段,還有一些bug,尤其是中文網(wǎng)站經(jīng)常出現問(wèn)題。好在Doocer官網(wǎng)有開(kāi)發(fā)者對話(huà)頻道,可以直接聯(lián)系他幫忙解決。
自動(dòng)化所有操作的過(guò)程是我認為 Doocer 最需要做的事情。Doocer可以像RSS工具一樣抓取網(wǎng)頁(yè)中更新的文章,但是要抓取新的文章并生成電子書(shū)并推送,仍然需要手動(dòng)完成。如果整個(gè)過(guò)程可以自動(dòng)化,RSS - MOBI - Kindle 一口氣,相信它的用處會(huì )更好。
目前,Doocer 的所有功能都可以免費使用。 查看全部
抓取網(wǎng)頁(yè)生成電子書(shū)(如何將網(wǎng)頁(yè)文章批量抓取、生成電子書(shū)、直接推送到Kindle)
我一直在研究如何將我關(guān)心的網(wǎng)頁(yè)或 文章 放入我的 Kindle 中進(jìn)行認真閱讀,但我已經(jīng)很長(cháng)時(shí)間沒(méi)有取得任何真正的進(jìn)展。手工排版制作電子書(shū)的方法雖然簡(jiǎn)單易行,但對于短小、更新頻繁的網(wǎng)頁(yè)文章來(lái)說(shuō)效率低下。如果有一個(gè)工具可以文章批量抓取網(wǎng)頁(yè),生成電子書(shū),然后直接推送到Kindle上就好了。Doocer 就是這樣一種實(shí)用程序。
Doocer是@lepture開(kāi)發(fā)的在線(xiàn)服務(wù),允許用戶(hù)在Pocket Read Later賬號中提交URL、RSS提要地址和文章,然后逐一或批量制作成ePub和MOBI電子書(shū). 您可以直接在 Doocer 中閱讀所有文章,也可以將它們推送到 Kindle、Apple Books 中閱讀。

真的很好的閱讀體驗
Doocer 生成的電子書(shū)在排版方面非常出色。應該有的內容很多,不應該有的內容不多。本書(shū)不僅封面圖文并茂,還有文章目錄、網(wǎng)站出處、文章原作者等信息。Doocer生成的MOBI電子書(shū)支持KF8標準,因此支持Kindle原生替換自定義字體。
由于網(wǎng)站文章通常有標準和通用的排版規范,Doocer生成的電子書(shū)文章中的大小標題和列表圖例與原網(wǎng)頁(yè)文章高度一致@>。原文章中的所有超鏈接也被保留,評論、廣告等內容全部丟棄。整本書(shū)的閱讀體驗非常友好。(當然,如果原網(wǎng)頁(yè)文章的布局沒(méi)有規則,那么生成的電子書(shū)也可能面目全非。)

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

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

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

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

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

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

真的很好的閱讀體驗
Doocer 生成的電子書(shū)在排版方面非常出色。應該有的內容很多,不應該有的內容不多。本書(shū)不僅封面圖文并茂,還有文章目錄、網(wǎng)站出處、文章原作者等信息。Doocer生成的MOBI電子書(shū)支持KF8標準,因此支持Kindle原生替換自定義字體。
由于網(wǎng)站文章通常有標準和通用的排版規范,Doocer生成的電子書(shū)文章中的大小標題和列表圖例與原網(wǎng)頁(yè)文章高度一致@>。原文章中的所有超鏈接也被保留,評論、廣告等內容全部丟棄。整本書(shū)的閱讀體驗非常友好。(當然,如果原網(wǎng)頁(yè)文章的布局沒(méi)有規則,那么生成的電子書(shū)也可能面目全非。)

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

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

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

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

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

仍有一些問(wèn)題需要注意
Doocer目前處于beta測試階段,還有一些bug,尤其是中文網(wǎng)站經(jīng)常出現問(wèn)題。好在Doocer官網(wǎng)有開(kāi)發(fā)者對話(huà)頻道,可以直接聯(lián)系他幫忙解決。
自動(dòng)化所有操作的過(guò)程是我認為 Doocer 最需要做的事情。Doocer可以像RSS工具一樣抓取網(wǎng)頁(yè)中更新的文章,但是要抓取新的文章并生成電子書(shū)并推送,仍然需要手動(dòng)完成。如果整個(gè)過(guò)程可以自動(dòng)化,RSS - MOBI - Kindle 一口氣,相信它的用處會(huì )更好。
目前,Doocer 的所有功能都可以免費使用。
抓取網(wǎng)頁(yè)生成電子書(shū)(一步步解析單個(gè)頁(yè)面,得到該頁(yè)書(shū)籍鏈接列表得到)
網(wǎng)站優(yōu)化 ? 優(yōu)采云 發(fā)表了文章 ? 0 個(gè)評論 ? 163 次瀏覽 ? 2022-03-14 07:08
2. 解析單個(gè)頁(yè)面以獲取該頁(yè)面上的書(shū)籍鏈接列表
3. 轉到書(shū)頁(yè)
* 判斷是否可以下載
* 如果可以下載,請下載所有格式的書(shū)籍
其次,為了獲得爬蟲(chóng)的健壯性,我們需要保證每次網(wǎng)頁(yè)加載成功,文件下載完成,我會(huì )在后面的內容中一步一步介紹。
實(shí)施過(guò)程
Selenium 可以模擬打開(kāi)瀏覽器。在此之前,我們需要下載瀏覽器的驅動(dòng)程序。在本文中,我們使用的是chrome瀏覽器,Firefox也是常用的瀏覽器。步驟類(lèi)似,不再贅述。
硒的安裝:
sudo pip install selenium
然后下載chrome的webdriver,直接保存到本地,比如/usr/bin,然后設置selenium的基本設置
import re#正則表達式
import random#隨機選擇
import subprocess# 執行bash命令
from multiprocessing import Pool#建立線(xiàn)程池,并行爬取加快速度
from selenium import webdriver
# set chromedriver path and download path
chromeOptions = webdriver.ChromeOptions()
dl_path="~/Downloads/KanCloud"#設置下載路徑
chromedriver="/usr/bin/chromedriver"#修改為你的chromedriver路徑
prefs = {"download.default_directory" : dl_path}
chromeOptions.add_experimental_option("prefs",prefs)
#可以為webdriver設置代理,自動(dòng)獲得代理IP地址下面會(huì )解釋,這里注釋掉
#PROXY='1.82.216.134:80'
#chromeOptions.add_argument('--proxy-server=%s' % PROXY)
# url_start='http://www.kancloud.cn/explore/top'
#建立一個(gè)webdriver對象
driver = webdriver.Chrome(chrome_options=chromeOptions)
driver.get('http://www.kancloud.cn/digest/ ... %2339;)#用chrome打開(kāi)這個(gè)網(wǎng)頁(yè)
運行上面的代碼,打開(kāi)一個(gè)chrome標簽,如下圖:
點(diǎn)擊下載按鈕,我們看到有PDF、epub、mobi三個(gè)下載選項。為了模擬點(diǎn)擊動(dòng)作,我們需要獲取元素的位置。這時(shí)候我們就可以使用chrome的inspect功能了,快捷鍵是 Ctrl+shift+I ,或者將鼠標懸停在下載上,右鍵選擇inspect,效果如下:
選擇右邊高亮的代碼,右鍵->復制->復制xpath,可以得到元素的xpath
//*[@id="manualDownload"]/span/b
然后使用webdriver本身的xpath搜索功能獲取元素,并模擬點(diǎn)擊操作
運行上面這句話(huà),我們可以看到網(wǎng)站確實(shí)響應了,支持下載的電子書(shū)格式有3種。這一步點(diǎn)擊下載按鈕是必須的,否則直接點(diǎn)擊epub會(huì )報 element not visible 的錯誤。接下來(lái)我們演示下載epub,鼠標懸停在epub上,右鍵查看,可以得到下載epub的xpath,同上
driver.find_element_by_xpath('//*[@id="manualDownload"]/div/div/ul/li[2]/a').click()
這樣我們就可以把這本epub電子書(shū)下載到我們指定的路徑了。
這是 Selenium 的基本應用。它還有一些其他的定位元素的方法和模擬操作的功能,比如把網(wǎng)頁(yè)往下拉,因為有些網(wǎng)站會(huì )根據用戶(hù)的下拉情況來(lái)渲染網(wǎng)頁(yè),越往下拉,顯示的內容越多。詳情請查看 selenium 的官方文檔。
我們對每一頁(yè)的每一本書(shū)執行上述過(guò)程,然后我們可以爬取整個(gè)站點(diǎn)的書(shū)籍,前提是你的網(wǎng)速夠快,運氣夠好。這是因為在持續爬取過(guò)程中會(huì )出現一些異常,例如
1. webdriver 將無(wú)法打開(kāi)網(wǎng)頁(yè)
2. 下載完成前打開(kāi)下一個(gè)網(wǎng)頁(yè),導致webdriver負擔過(guò)重,無(wú)法加載網(wǎng)頁(yè)
3. 網(wǎng)站可能是基于IP地址的反爬蟲(chóng)
下一篇我們將解決以上問(wèn)題,使用多進(jìn)程加速(webdriver太慢,無(wú)法打開(kāi)網(wǎng)頁(yè))。 查看全部
抓取網(wǎng)頁(yè)生成電子書(shū)(一步步解析單個(gè)頁(yè)面,得到該頁(yè)書(shū)籍鏈接列表得到)
2. 解析單個(gè)頁(yè)面以獲取該頁(yè)面上的書(shū)籍鏈接列表
3. 轉到書(shū)頁(yè)
* 判斷是否可以下載
* 如果可以下載,請下載所有格式的書(shū)籍
其次,為了獲得爬蟲(chóng)的健壯性,我們需要保證每次網(wǎng)頁(yè)加載成功,文件下載完成,我會(huì )在后面的內容中一步一步介紹。
實(shí)施過(guò)程
Selenium 可以模擬打開(kāi)瀏覽器。在此之前,我們需要下載瀏覽器的驅動(dòng)程序。在本文中,我們使用的是chrome瀏覽器,Firefox也是常用的瀏覽器。步驟類(lèi)似,不再贅述。
硒的安裝:
sudo pip install selenium
然后下載chrome的webdriver,直接保存到本地,比如/usr/bin,然后設置selenium的基本設置
import re#正則表達式
import random#隨機選擇
import subprocess# 執行bash命令
from multiprocessing import Pool#建立線(xiàn)程池,并行爬取加快速度
from selenium import webdriver
# set chromedriver path and download path
chromeOptions = webdriver.ChromeOptions()
dl_path="~/Downloads/KanCloud"#設置下載路徑
chromedriver="/usr/bin/chromedriver"#修改為你的chromedriver路徑
prefs = {"download.default_directory" : dl_path}
chromeOptions.add_experimental_option("prefs",prefs)
#可以為webdriver設置代理,自動(dòng)獲得代理IP地址下面會(huì )解釋,這里注釋掉
#PROXY='1.82.216.134:80'
#chromeOptions.add_argument('--proxy-server=%s' % PROXY)
# url_start='http://www.kancloud.cn/explore/top'
#建立一個(gè)webdriver對象
driver = webdriver.Chrome(chrome_options=chromeOptions)
driver.get('http://www.kancloud.cn/digest/ ... %2339;)#用chrome打開(kāi)這個(gè)網(wǎng)頁(yè)
運行上面的代碼,打開(kāi)一個(gè)chrome標簽,如下圖:
點(diǎn)擊下載按鈕,我們看到有PDF、epub、mobi三個(gè)下載選項。為了模擬點(diǎn)擊動(dòng)作,我們需要獲取元素的位置。這時(shí)候我們就可以使用chrome的inspect功能了,快捷鍵是 Ctrl+shift+I ,或者將鼠標懸停在下載上,右鍵選擇inspect,效果如下:
選擇右邊高亮的代碼,右鍵->復制->復制xpath,可以得到元素的xpath
//*[@id="manualDownload"]/span/b
然后使用webdriver本身的xpath搜索功能獲取元素,并模擬點(diǎn)擊操作
運行上面這句話(huà),我們可以看到網(wǎng)站確實(shí)響應了,支持下載的電子書(shū)格式有3種。這一步點(diǎn)擊下載按鈕是必須的,否則直接點(diǎn)擊epub會(huì )報 element not visible 的錯誤。接下來(lái)我們演示下載epub,鼠標懸停在epub上,右鍵查看,可以得到下載epub的xpath,同上
driver.find_element_by_xpath('//*[@id="manualDownload"]/div/div/ul/li[2]/a').click()
這樣我們就可以把這本epub電子書(shū)下載到我們指定的路徑了。
這是 Selenium 的基本應用。它還有一些其他的定位元素的方法和模擬操作的功能,比如把網(wǎng)頁(yè)往下拉,因為有些網(wǎng)站會(huì )根據用戶(hù)的下拉情況來(lái)渲染網(wǎng)頁(yè),越往下拉,顯示的內容越多。詳情請查看 selenium 的官方文檔。
我們對每一頁(yè)的每一本書(shū)執行上述過(guò)程,然后我們可以爬取整個(gè)站點(diǎn)的書(shū)籍,前提是你的網(wǎng)速夠快,運氣夠好。這是因為在持續爬取過(guò)程中會(huì )出現一些異常,例如
1. webdriver 將無(wú)法打開(kāi)網(wǎng)頁(yè)
2. 下載完成前打開(kāi)下一個(gè)網(wǎng)頁(yè),導致webdriver負擔過(guò)重,無(wú)法加載網(wǎng)頁(yè)
3. 網(wǎng)站可能是基于IP地址的反爬蟲(chóng)
下一篇我們將解決以上問(wèn)題,使用多進(jìn)程加速(webdriver太慢,無(wú)法打開(kāi)網(wǎng)頁(yè))。
抓取網(wǎng)頁(yè)生成電子書(shū)(如何將網(wǎng)頁(yè)文章批量抓取、生成電子書(shū)、直接推送到Kindle)
網(wǎng)站優(yōu)化 ? 優(yōu)采云 發(fā)表了文章 ? 0 個(gè)評論 ? 125 次瀏覽 ? 2022-03-13 07:14
我一直在研究如何將我關(guān)心的網(wǎng)頁(yè)或 文章 放入我的 Kindle 中進(jìn)行認真閱讀,但我已經(jīng)很長(cháng)時(shí)間沒(méi)有取得任何真正的進(jìn)展。手工排版制作電子書(shū)的方法雖然簡(jiǎn)單易行,但對于短小、更新頻繁的網(wǎng)頁(yè)文章來(lái)說(shuō)效率低下。如果有一個(gè)工具可以文章批量抓取網(wǎng)頁(yè),生成電子書(shū),然后直接推送到Kindle上就好了。Doocer 就是這樣一種實(shí)用程序。
Doocer是@lepture開(kāi)發(fā)的在線(xiàn)服務(wù),允許用戶(hù)在Pocket Read Later賬戶(hù)中提交URL、RSS提要地址和文章,然后逐一或批量制作成ePub和MOBI電子書(shū). 您可以直接在 Doocer 中閱讀所有文章,也可以將它們推送到 Kindle、Apple Books 中閱讀。
真的很好的閱讀體驗
Doocer 生成的電子書(shū)在排版方面非常出色。應該有的內容很多,不應該有的內容不多。本書(shū)不僅封面圖文并茂,還有文章目錄、網(wǎng)站出處、文章原作者等信息。Doocer生成的MOBI電子書(shū)支持KF8標準,因此支持Kindle原生替換自定義字體。
由于網(wǎng)站文章通常有標準和通用的排版規范,Doocer生成的電子書(shū)文章中的大小標題和列表圖例與原網(wǎng)頁(yè)文章高度一致@>。原文章中的所有超鏈接也被保留,評論、廣告等內容全部丟棄。整本書(shū)的閱讀體驗非常友好。(當然,如果原網(wǎng)頁(yè)文章的布局沒(méi)有規則,那么生成的電子書(shū)也可能面目全非。)
將網(wǎng)頁(yè) 文章 制作成電子書(shū)
Doocer完成注冊登錄后,我們就可以開(kāi)始將網(wǎng)頁(yè)文章制作成電子書(shū)了。首先,我們點(diǎn)擊“NEW BOOK”按鈕新建電子書(shū),輸入電子書(shū)名稱(chēng)。接下來(lái)選擇右上角的“添加”以添加 文章 URL 或 RSS 提要地址。
以小眾網(wǎng)頁(yè)的文章為例,我們選擇“FEED”,在輸入框中粘貼RSS地址,然后點(diǎn)擊“PARSE”,那么小眾最近的文章列表就會(huì )出現為我們顯示添加到。我們可以根據需要選擇,也可以點(diǎn)擊“SELECT ALL”全選文章。最后,下拉到頁(yè)面底部,選擇“SAVE”,那么這些文章就會(huì )被添加到書(shū)里。
其實(shí)Doocer網(wǎng)頁(yè)與RSS工具很相似,實(shí)現了從網(wǎng)站批量抓取文章并集中展示的功能。
要將這些 文章 轉換為電子書(shū)并將它們推送到 Kindle,我們必須做一些簡(jiǎn)單的事情。
首先,根據Doocer個(gè)人設置頁(yè)面的提示,打開(kāi)Amazon Kindle的個(gè)人文檔設置,將Doocer電子書(shū)的發(fā)送地址添加到個(gè)人文檔接收地址中。完成后,我們在輸入框中填寫(xiě)Kindle的個(gè)人文檔接收地址,點(diǎn)擊保存。
最后,我們在 Doocer 中打開(kāi)《少數派》這本書(shū),在頁(yè)面上找到“Publish”,選擇 Send to Kindle。大約 10 到 30 分鐘,Doocer 將完成圖書(shū)制作并將圖書(shū)推送到 Kindle。
仍有一些問(wèn)題需要注意
Doocer目前處于beta測試階段,還有一些bug,尤其是中文網(wǎng)站經(jīng)常出現問(wèn)題。好在Doocer官網(wǎng)有開(kāi)發(fā)者對話(huà)頻道,可以直接聯(lián)系他幫忙解決。
自動(dòng)化所有操作的過(guò)程是我認為 Doocer 最需要做的事情。Doocer可以像RSS工具一樣抓取網(wǎng)頁(yè)中更新的文章,但是要抓取新的文章并生成電子書(shū)并推送,仍然需要手動(dòng)完成。如果整個(gè)過(guò)程可以自動(dòng)化,RSS - MOBI - Kindle 一口氣,相信它的用處會(huì )更好。
目前,Doocer 的所有功能都可以免費使用。 查看全部
抓取網(wǎng)頁(yè)生成電子書(shū)(如何將網(wǎng)頁(yè)文章批量抓取、生成電子書(shū)、直接推送到Kindle)
我一直在研究如何將我關(guān)心的網(wǎng)頁(yè)或 文章 放入我的 Kindle 中進(jìn)行認真閱讀,但我已經(jīng)很長(cháng)時(shí)間沒(méi)有取得任何真正的進(jìn)展。手工排版制作電子書(shū)的方法雖然簡(jiǎn)單易行,但對于短小、更新頻繁的網(wǎng)頁(yè)文章來(lái)說(shuō)效率低下。如果有一個(gè)工具可以文章批量抓取網(wǎng)頁(yè),生成電子書(shū),然后直接推送到Kindle上就好了。Doocer 就是這樣一種實(shí)用程序。
Doocer是@lepture開(kāi)發(fā)的在線(xiàn)服務(wù),允許用戶(hù)在Pocket Read Later賬戶(hù)中提交URL、RSS提要地址和文章,然后逐一或批量制作成ePub和MOBI電子書(shū). 您可以直接在 Doocer 中閱讀所有文章,也可以將它們推送到 Kindle、Apple Books 中閱讀。

真的很好的閱讀體驗
Doocer 生成的電子書(shū)在排版方面非常出色。應該有的內容很多,不應該有的內容不多。本書(shū)不僅封面圖文并茂,還有文章目錄、網(wǎng)站出處、文章原作者等信息。Doocer生成的MOBI電子書(shū)支持KF8標準,因此支持Kindle原生替換自定義字體。
由于網(wǎng)站文章通常有標準和通用的排版規范,Doocer生成的電子書(shū)文章中的大小標題和列表圖例與原網(wǎng)頁(yè)文章高度一致@>。原文章中的所有超鏈接也被保留,評論、廣告等內容全部丟棄。整本書(shū)的閱讀體驗非常友好。(當然,如果原網(wǎng)頁(yè)文章的布局沒(méi)有規則,那么生成的電子書(shū)也可能面目全非。)

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

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

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

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

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

仍有一些問(wèn)題需要注意
Doocer目前處于beta測試階段,還有一些bug,尤其是中文網(wǎng)站經(jīng)常出現問(wèn)題。好在Doocer官網(wǎng)有開(kāi)發(fā)者對話(huà)頻道,可以直接聯(lián)系他幫忙解決。
自動(dòng)化所有操作的過(guò)程是我認為 Doocer 最需要做的事情。Doocer可以像RSS工具一樣抓取網(wǎng)頁(yè)中更新的文章,但是要抓取新的文章并生成電子書(shū)并推送,仍然需要手動(dòng)完成。如果整個(gè)過(guò)程可以自動(dòng)化,RSS - MOBI - Kindle 一口氣,相信它的用處會(huì )更好。
目前,Doocer 的所有功能都可以免費使用。
抓取網(wǎng)頁(yè)生成電子書(shū)(Windows,OSX及Linux的在線(xiàn)資料epub或mobi格式)
網(wǎng)站優(yōu)化 ? 優(yōu)采云 發(fā)表了文章 ? 0 個(gè)評論 ? 229 次瀏覽 ? 2022-03-13 01:22
自從我買(mǎi)了kindle之后,我就一直在思考如何充分利用它。雖然可以從多多購買(mǎi)很多書(shū)籍,網(wǎng)上也有很多免費的電子書(shū),但還是有很多網(wǎng)頁(yè)形式的有趣內容。比如O'Reilly Atlas提供了很多電子書(shū),但只提供免費在線(xiàn)閱讀;此外,許多材料或文件只是網(wǎng)頁(yè)形式。所以我希望通過(guò)某種方式把這些網(wǎng)上資料轉換成epub或者mobi格式,這樣就可以在kindle上閱讀了。這篇 文章 文章描述了如何使用 calibre 和少量代碼來(lái)做到這一點(diǎn)。
CalibreCalibre 簡(jiǎn)介
Calibre 是一款免費的電子書(shū)管理工具,兼容 Windows、OS X 和 Linux。幸運的是,除了 GUI 之外,calibre 還提供了很多命令行工具,其中 ebook-convert 命令可以根據用戶(hù)編寫(xiě)的食譜進(jìn)行。文件(其實(shí)是python代碼)抓取指定頁(yè)面的內容,生成mobi等格式的電子書(shū)。通過(guò)編寫(xiě)食譜,可以自定義爬取行為以適應不同的網(wǎng)頁(yè)結構。
安裝口徑
Calibre的下載地址為download,您可以根據自己的操作系統下載相應的安裝程序。
如果是 Linux 操作系統,也可以從軟件倉庫安裝:
Archlinux:
pacman -S calibre
Debian/Ubuntu:
apt-get install calibre
紅帽/Fedora/CentOS:
yum -y install calibre
請注意,如果您使用 OSX,則需要單獨安裝命令行工具。
抓取網(wǎng)頁(yè)以生成電子書(shū)
下面以Git Pocket Guide為例,說(shuō)明如何通過(guò)calibre從網(wǎng)頁(yè)生成電子書(shū)。
找到索引頁(yè)面
爬取整本書(shū),首先要找到索引頁(yè),通常是Table of Contents,也就是目錄,其中每個(gè)目錄都鏈接到對應的內容頁(yè)。索引頁(yè)面將指導生成電子書(shū)時(shí)要抓取的頁(yè)面以及內容的組織順序。在本例中,索引頁(yè)為 61/index.html。
寫(xiě)食譜
Recipes 是一個(gè)帶有recipe 擴展名的腳本。內容其實(shí)是一段python代碼,用來(lái)定義calibre爬取頁(yè)面的范圍和行為。以下是用于爬取 Git 袖珍指南的食譜:
from calibre.web.feeds.recipes import BasicNewsRecipe?class Git_Pocket_Guide(BasicNewsRecipe):? title = 'Git Pocket Guide' description = '' cover_url = 'http://akamaicovers.oreilly.com/images/0636920024972/lrg.jpg'? url_prefix = '1230000000561/' no_stylesheets = True keep_only_tags = [{ 'class': 'chapter' }]? def get_title(self, link): return link.contents[0].strip()? def parse_index(self): soup = self.index_to_soup(self.url_prefix + 'index.html')? div = soup.find('div', { 'class': 'toc' })? articles = [] for link in div.findAll('a'): if '#' in link['href']: continue? if not 'ch' in link['href']: continue? til = self.get_title(link) url = self.url_prefix + link['href'] a = { 'title': til, 'url': url }? articles.append(a)? ans = [('Git_Pocket_Guide', articles)]? return ans
下面解釋代碼的不同部分。
整體結構
一般來(lái)說(shuō),recipe是一個(gè)python類(lèi),但是這個(gè)類(lèi)必須繼承calibre.web.feeds.recipes.BasicNewsRecipe。
解析索引
整個(gè)recipe的核心方法是parse_index,這也是recipe必須實(shí)現的唯一方法。該方法的目標是分析索引頁(yè)的內容并返回一個(gè)稍微復雜的數據結構(稍后描述),該結構定義了整個(gè)電子書(shū)的內容以及內容的組織順序。
整體屬性設置
在類(lèi)的開(kāi)頭,定義了一些全局屬性:
title = 'Git Pocket Guide'description = ''cover_url = 'http://akamaicovers.oreilly.com/images/0636920024972/lrg.jpg'?url_prefix = '1230000000561/'no_stylesheets = Truekeep_only_tags = [{ 'class': 'chapter' }]
parse_index 返回值
下面通過(guò)分析索引頁(yè)來(lái)描述parse_index需要返回的數據結構。
整體返回數據結構是一個(gè)列表,其中每個(gè)元素是一個(gè)元組,一個(gè)元組代表一個(gè)卷。在這個(gè)例子中只有一個(gè)卷,所以列表中只有一個(gè)元組。
每個(gè)元組有兩個(gè)元素,第一個(gè)元素是卷名,第二個(gè)元素是一個(gè)列表,列表中的每個(gè)元素都是一個(gè)map,代表一個(gè)章節(chapter),map中有兩個(gè)元素:title和url,title是章節標題,url是章節所在內容頁(yè)面的url。
Calibre 會(huì )根據 parse_index 的返回結果對整本書(shū)進(jìn)行爬取和整理,并會(huì )自行對內容中的外部鏈接的圖片進(jìn)行爬取和處理。
整個(gè)parse_index使用soup解析索引頁(yè),生成上述數據結構。
更多的
以上是最基本的食譜。如果想詳細了解如何使用,可以參考 API 文檔。
生成手機
菜譜寫(xiě)好后,可以在命令行通過(guò)以下命令生成電子書(shū):
ebook-convert Git_Pocket_Guide.recipe Git_Pocket_Guide.mobi
您可以生成 mobi 格式的電子書(shū)。ebook-convert 將抓取相關(guān)內容并根據食譜代碼組織結構。
最終效果
下面是在kindle上看到的效果。
內容
內容一
內容二
有圖片的頁(yè)面
實(shí)際效果
我的食譜庫
我在github上建了一個(gè)kindle-open-books,里面放了一些菜譜,這些菜譜是我自己寫(xiě)的,其他同學(xué)貢獻的。歡迎任何人提供食譜。 查看全部
抓取網(wǎng)頁(yè)生成電子書(shū)(Windows,OSX及Linux的在線(xiàn)資料epub或mobi格式)
自從我買(mǎi)了kindle之后,我就一直在思考如何充分利用它。雖然可以從多多購買(mǎi)很多書(shū)籍,網(wǎng)上也有很多免費的電子書(shū),但還是有很多網(wǎng)頁(yè)形式的有趣內容。比如O'Reilly Atlas提供了很多電子書(shū),但只提供免費在線(xiàn)閱讀;此外,許多材料或文件只是網(wǎng)頁(yè)形式。所以我希望通過(guò)某種方式把這些網(wǎng)上資料轉換成epub或者mobi格式,這樣就可以在kindle上閱讀了。這篇 文章 文章描述了如何使用 calibre 和少量代碼來(lái)做到這一點(diǎn)。
CalibreCalibre 簡(jiǎn)介
Calibre 是一款免費的電子書(shū)管理工具,兼容 Windows、OS X 和 Linux。幸運的是,除了 GUI 之外,calibre 還提供了很多命令行工具,其中 ebook-convert 命令可以根據用戶(hù)編寫(xiě)的食譜進(jìn)行。文件(其實(shí)是python代碼)抓取指定頁(yè)面的內容,生成mobi等格式的電子書(shū)。通過(guò)編寫(xiě)食譜,可以自定義爬取行為以適應不同的網(wǎng)頁(yè)結構。
安裝口徑
Calibre的下載地址為download,您可以根據自己的操作系統下載相應的安裝程序。
如果是 Linux 操作系統,也可以從軟件倉庫安裝:
Archlinux:
pacman -S calibre
Debian/Ubuntu:
apt-get install calibre
紅帽/Fedora/CentOS:
yum -y install calibre
請注意,如果您使用 OSX,則需要單獨安裝命令行工具。
抓取網(wǎng)頁(yè)以生成電子書(shū)
下面以Git Pocket Guide為例,說(shuō)明如何通過(guò)calibre從網(wǎng)頁(yè)生成電子書(shū)。
找到索引頁(yè)面
爬取整本書(shū),首先要找到索引頁(yè),通常是Table of Contents,也就是目錄,其中每個(gè)目錄都鏈接到對應的內容頁(yè)。索引頁(yè)面將指導生成電子書(shū)時(shí)要抓取的頁(yè)面以及內容的組織順序。在本例中,索引頁(yè)為 61/index.html。
寫(xiě)食譜
Recipes 是一個(gè)帶有recipe 擴展名的腳本。內容其實(shí)是一段python代碼,用來(lái)定義calibre爬取頁(yè)面的范圍和行為。以下是用于爬取 Git 袖珍指南的食譜:
from calibre.web.feeds.recipes import BasicNewsRecipe?class Git_Pocket_Guide(BasicNewsRecipe):? title = 'Git Pocket Guide' description = '' cover_url = 'http://akamaicovers.oreilly.com/images/0636920024972/lrg.jpg'? url_prefix = '1230000000561/' no_stylesheets = True keep_only_tags = [{ 'class': 'chapter' }]? def get_title(self, link): return link.contents[0].strip()? def parse_index(self): soup = self.index_to_soup(self.url_prefix + 'index.html')? div = soup.find('div', { 'class': 'toc' })? articles = [] for link in div.findAll('a'): if '#' in link['href']: continue? if not 'ch' in link['href']: continue? til = self.get_title(link) url = self.url_prefix + link['href'] a = { 'title': til, 'url': url }? articles.append(a)? ans = [('Git_Pocket_Guide', articles)]? return ans
下面解釋代碼的不同部分。
整體結構
一般來(lái)說(shuō),recipe是一個(gè)python類(lèi),但是這個(gè)類(lèi)必須繼承calibre.web.feeds.recipes.BasicNewsRecipe。
解析索引
整個(gè)recipe的核心方法是parse_index,這也是recipe必須實(shí)現的唯一方法。該方法的目標是分析索引頁(yè)的內容并返回一個(gè)稍微復雜的數據結構(稍后描述),該結構定義了整個(gè)電子書(shū)的內容以及內容的組織順序。
整體屬性設置
在類(lèi)的開(kāi)頭,定義了一些全局屬性:
title = 'Git Pocket Guide'description = ''cover_url = 'http://akamaicovers.oreilly.com/images/0636920024972/lrg.jpg'?url_prefix = '1230000000561/'no_stylesheets = Truekeep_only_tags = [{ 'class': 'chapter' }]
parse_index 返回值
下面通過(guò)分析索引頁(yè)來(lái)描述parse_index需要返回的數據結構。

整體返回數據結構是一個(gè)列表,其中每個(gè)元素是一個(gè)元組,一個(gè)元組代表一個(gè)卷。在這個(gè)例子中只有一個(gè)卷,所以列表中只有一個(gè)元組。
每個(gè)元組有兩個(gè)元素,第一個(gè)元素是卷名,第二個(gè)元素是一個(gè)列表,列表中的每個(gè)元素都是一個(gè)map,代表一個(gè)章節(chapter),map中有兩個(gè)元素:title和url,title是章節標題,url是章節所在內容頁(yè)面的url。
Calibre 會(huì )根據 parse_index 的返回結果對整本書(shū)進(jìn)行爬取和整理,并會(huì )自行對內容中的外部鏈接的圖片進(jìn)行爬取和處理。
整個(gè)parse_index使用soup解析索引頁(yè),生成上述數據結構。
更多的
以上是最基本的食譜。如果想詳細了解如何使用,可以參考 API 文檔。
生成手機
菜譜寫(xiě)好后,可以在命令行通過(guò)以下命令生成電子書(shū):
ebook-convert Git_Pocket_Guide.recipe Git_Pocket_Guide.mobi
您可以生成 mobi 格式的電子書(shū)。ebook-convert 將抓取相關(guān)內容并根據食譜代碼組織結構。
最終效果
下面是在kindle上看到的效果。
內容

內容一

內容二

有圖片的頁(yè)面

實(shí)際效果

我的食譜庫
我在github上建了一個(gè)kindle-open-books,里面放了一些菜譜,這些菜譜是我自己寫(xiě)的,其他同學(xué)貢獻的。歡迎任何人提供食譜。
抓取網(wǎng)頁(yè)生成電子書(shū)(如何將網(wǎng)頁(yè)文章批量抓取、生成電子書(shū)、直接推送到Kindle)
網(wǎng)站優(yōu)化 ? 優(yōu)采云 發(fā)表了文章 ? 0 個(gè)評論 ? 337 次瀏覽 ? 2022-03-13 00:12
我一直在研究如何將我關(guān)心的網(wǎng)頁(yè)或 文章 放入我的 Kindle 中進(jìn)行認真閱讀,但我已經(jīng)很長(cháng)時(shí)間沒(méi)有取得任何真正的進(jìn)展。手工排版制作電子書(shū)的方法雖然簡(jiǎn)單易行,但對于短小、更新頻繁的網(wǎng)頁(yè)文章來(lái)說(shuō)效率低下。如果有一個(gè)工具可以文章批量抓取網(wǎng)頁(yè),生成電子書(shū),然后直接推送到Kindle上就好了。Doocer 就是這樣一種實(shí)用程序。
Doocer是@lepture開(kāi)發(fā)的在線(xiàn)服務(wù),允許用戶(hù)在Pocket Read Later賬戶(hù)中提交URL、RSS提要地址和文章,然后逐一或批量制作成ePub和MOBI電子書(shū). 您可以直接在 Doocer 中閱讀所有文章,也可以將它們推送到 Kindle、Apple Books 中閱讀。
真的很好的閱讀體驗
Doocer 生成的電子書(shū)在排版方面非常出色。應該有的內容很多,不應該有的內容不多。本書(shū)不僅封面圖文并茂,還有文章目錄、網(wǎng)站出處、文章原作者等信息。Doocer生成的MOBI電子書(shū)支持KF8標準,因此支持Kindle原生替換自定義字體。
由于網(wǎng)站文章通常有標準和通用的排版規范,Doocer生成的電子書(shū)文章中的大小標題和列表圖例與原網(wǎng)頁(yè)文章高度一致@>。原文章中的所有超鏈接也被保留,評論、廣告等內容全部丟棄。整本書(shū)的閱讀體驗非常友好。(當然,如果原網(wǎng)頁(yè)文章的布局沒(méi)有規則,那么生成的電子書(shū)也可能面目全非。)
將網(wǎng)頁(yè) 文章 制作成電子書(shū)
Doocer完成注冊登錄后,我們就可以開(kāi)始將網(wǎng)頁(yè)文章制作成電子書(shū)了。首先,我們點(diǎn)擊“NEW BOOK”按鈕新建電子書(shū),輸入電子書(shū)名稱(chēng)。接下來(lái)選擇右上角的“添加”以添加 文章 URL 或 RSS 提要地址。
以小眾網(wǎng)頁(yè)的文章為例,我們選擇“FEED”,在輸入框中粘貼RSS地址,然后點(diǎn)擊“PARSE”,那么小眾最近的文章列表就會(huì )出現為我們顯示添加到。我們可以根據需要選擇,也可以點(diǎn)擊“SELECT ALL”全選文章。最后,下拉到頁(yè)面底部,選擇“SAVE”,那么這些文章就會(huì )被添加到書(shū)里。
其實(shí)Doocer網(wǎng)頁(yè)與RSS工具很相似,實(shí)現了從網(wǎng)站批量抓取文章并集中展示的功能。
要將這些 文章 轉換為電子書(shū)并將它們推送到 Kindle,我們必須做一些簡(jiǎn)單的事情。
首先,根據Doocer個(gè)人設置頁(yè)面中的提示,我們打開(kāi)它,將Doocer電子書(shū)的發(fā)送地址添加到個(gè)人文檔接收地址中。完成后,我們在輸入框中填寫(xiě)Kindle的個(gè)人文檔接收地址,點(diǎn)擊保存。
最后,我們在 Doocer 中打開(kāi)《少數派》這本書(shū),在頁(yè)面上找到“Publish”,選擇 Send to Kindle。大約 10 到 30 分鐘,Doocer 將完成圖書(shū)制作并將圖書(shū)推送到 Kindle。
仍有一些問(wèn)題需要注意
Doocer目前處于beta測試階段,還有一些bug,尤其是中文網(wǎng)站經(jīng)常出現問(wèn)題。好在Doocer官網(wǎng)有開(kāi)發(fā)者對話(huà)頻道,可以直接聯(lián)系他幫忙解決。
自動(dòng)化所有操作的過(guò)程是我認為 Doocer 最需要做的事情。Doocer可以像RSS工具一樣抓取網(wǎng)頁(yè)中更新的文章,但是要抓取新的文章并生成電子書(shū)并推送,仍然需要手動(dòng)完成。如果整個(gè)過(guò)程可以自動(dòng)化,RSS - MOBI - Kindle 一口氣,相信它的用處會(huì )更好。
目前,Doocer 的所有功能都可以免費使用。 查看全部
抓取網(wǎng)頁(yè)生成電子書(shū)(如何將網(wǎng)頁(yè)文章批量抓取、生成電子書(shū)、直接推送到Kindle)
我一直在研究如何將我關(guān)心的網(wǎng)頁(yè)或 文章 放入我的 Kindle 中進(jìn)行認真閱讀,但我已經(jīng)很長(cháng)時(shí)間沒(méi)有取得任何真正的進(jìn)展。手工排版制作電子書(shū)的方法雖然簡(jiǎn)單易行,但對于短小、更新頻繁的網(wǎng)頁(yè)文章來(lái)說(shuō)效率低下。如果有一個(gè)工具可以文章批量抓取網(wǎng)頁(yè),生成電子書(shū),然后直接推送到Kindle上就好了。Doocer 就是這樣一種實(shí)用程序。
Doocer是@lepture開(kāi)發(fā)的在線(xiàn)服務(wù),允許用戶(hù)在Pocket Read Later賬戶(hù)中提交URL、RSS提要地址和文章,然后逐一或批量制作成ePub和MOBI電子書(shū). 您可以直接在 Doocer 中閱讀所有文章,也可以將它們推送到 Kindle、Apple Books 中閱讀。

真的很好的閱讀體驗
Doocer 生成的電子書(shū)在排版方面非常出色。應該有的內容很多,不應該有的內容不多。本書(shū)不僅封面圖文并茂,還有文章目錄、網(wǎng)站出處、文章原作者等信息。Doocer生成的MOBI電子書(shū)支持KF8標準,因此支持Kindle原生替換自定義字體。
由于網(wǎng)站文章通常有標準和通用的排版規范,Doocer生成的電子書(shū)文章中的大小標題和列表圖例與原網(wǎng)頁(yè)文章高度一致@>。原文章中的所有超鏈接也被保留,評論、廣告等內容全部丟棄。整本書(shū)的閱讀體驗非常友好。(當然,如果原網(wǎng)頁(yè)文章的布局沒(méi)有規則,那么生成的電子書(shū)也可能面目全非。)

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

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

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

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

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

仍有一些問(wèn)題需要注意
Doocer目前處于beta測試階段,還有一些bug,尤其是中文網(wǎng)站經(jīng)常出現問(wèn)題。好在Doocer官網(wǎng)有開(kāi)發(fā)者對話(huà)頻道,可以直接聯(lián)系他幫忙解決。
自動(dòng)化所有操作的過(guò)程是我認為 Doocer 最需要做的事情。Doocer可以像RSS工具一樣抓取網(wǎng)頁(yè)中更新的文章,但是要抓取新的文章并生成電子書(shū)并推送,仍然需要手動(dòng)完成。如果整個(gè)過(guò)程可以自動(dòng)化,RSS - MOBI - Kindle 一口氣,相信它的用處會(huì )更好。
目前,Doocer 的所有功能都可以免費使用。
抓取網(wǎng)頁(yè)生成電子書(shū)(一步步解析單個(gè)頁(yè)面,得到該頁(yè)書(shū)籍鏈接列表得到)
網(wǎng)站優(yōu)化 ? 優(yōu)采云 發(fā)表了文章 ? 0 個(gè)評論 ? 124 次瀏覽 ? 2022-03-13 00:12
2. 解析單個(gè)頁(yè)面以獲取該頁(yè)面上的書(shū)籍鏈接列表
3. 轉到書(shū)頁(yè)
* 判斷是否可以下載
* 如果可以下載,請下載所有格式的書(shū)籍
其次,為了獲得爬蟲(chóng)的健壯性,我們需要保證每次網(wǎng)頁(yè)加載成功,文件下載完成,我會(huì )在后面的內容中一步一步介紹。
實(shí)施過(guò)程
Selenium 可以模擬打開(kāi)瀏覽器。在此之前,我們需要下載瀏覽器的驅動(dòng)程序。在本文中,我們使用的是chrome瀏覽器,Firefox也是常用的瀏覽器。步驟類(lèi)似,不再贅述。
硒的安裝:
sudo pip install selenium
然后下載chrome的webdriver,直接保存到本地,比如/usr/bin,然后設置selenium的基本設置
import re#正則表達式
import random#隨機選擇
import subprocess# 執行bash命令
from multiprocessing import Pool#建立線(xiàn)程池,并行爬取加快速度
from selenium import webdriver
# set chromedriver path and download path
chromeOptions = webdriver.ChromeOptions()
dl_path="~/Downloads/KanCloud"#設置下載路徑
chromedriver="/usr/bin/chromedriver"#修改為你的chromedriver路徑
prefs = {"download.default_directory" : dl_path}
chromeOptions.add_experimental_option("prefs",prefs)
#可以為webdriver設置代理,自動(dòng)獲得代理IP地址下面會(huì )解釋,這里注釋掉
#PROXY='1.82.216.134:80'
#chromeOptions.add_argument('--proxy-server=%s' % PROXY)
# url_start='http://www.kancloud.cn/explore/top'
#建立一個(gè)webdriver對象
driver = webdriver.Chrome(chrome_options=chromeOptions)
driver.get('http://www.kancloud.cn/digest/ ... %2339;)#用chrome打開(kāi)這個(gè)網(wǎng)頁(yè)
運行上面的代碼,打開(kāi)一個(gè)chrome標簽,如下圖:
點(diǎn)擊下載按鈕,我們看到有PDF、epub、mobi三個(gè)下載選項。為了模擬點(diǎn)擊動(dòng)作,我們需要獲取元素的位置。這時(shí)候我們就可以使用chrome的inspect功能了,快捷鍵是 Ctrl+shift+I ,或者將鼠標懸停在下載上,右鍵選擇inspect,效果如下:
選擇右邊高亮的代碼,右鍵->復制->復制xpath,可以得到元素的xpath
//*[@id="manualDownload"]/span/b
然后使用webdriver本身的xpath搜索功能獲取元素,并模擬點(diǎn)擊操作
運行上面這句話(huà),我們可以看到網(wǎng)站確實(shí)響應了,支持下載的電子書(shū)格式有3種。這一步點(diǎn)擊下載按鈕是必須的,否則直接點(diǎn)擊epub會(huì )報 element not visible 的錯誤。接下來(lái)我們演示下載epub,鼠標懸停在epub上,右鍵查看,可以得到下載epub的xpath,同上
driver.find_element_by_xpath('//*[@id="manualDownload"]/div/div/ul/li[2]/a').click()
這樣我們就可以把這本epub電子書(shū)下載到我們指定的路徑了。
這是 Selenium 的基本應用。它還有一些其他定位元素的方法和模擬操作的功能,比如把網(wǎng)頁(yè)往下拉,因為有些網(wǎng)站會(huì )根據用戶(hù)的下拉情況來(lái)渲染網(wǎng)頁(yè),越往下拉,顯示的內容越多。詳情請查看 selenium 的官方文檔。
我們對每一頁(yè)的每一本書(shū)執行上述過(guò)程,然后我們可以爬取整個(gè)站點(diǎn)的書(shū)籍,前提是你的網(wǎng)速夠快,運氣夠好。這是因為在持續爬取過(guò)程中會(huì )出現一些異常,例如
1. webdriver 將無(wú)法打開(kāi)網(wǎng)頁(yè)
2. 下載完成前打開(kāi)下一個(gè)網(wǎng)頁(yè),導致webdriver負擔過(guò)重,無(wú)法加載網(wǎng)頁(yè)
3. 網(wǎng)站可能是基于IP地址的反爬蟲(chóng)
下一篇我們將解決以上問(wèn)題,使用多進(jìn)程加速(webdriver太慢,無(wú)法打開(kāi)網(wǎng)頁(yè))。 查看全部
抓取網(wǎng)頁(yè)生成電子書(shū)(一步步解析單個(gè)頁(yè)面,得到該頁(yè)書(shū)籍鏈接列表得到)
2. 解析單個(gè)頁(yè)面以獲取該頁(yè)面上的書(shū)籍鏈接列表
3. 轉到書(shū)頁(yè)
* 判斷是否可以下載
* 如果可以下載,請下載所有格式的書(shū)籍
其次,為了獲得爬蟲(chóng)的健壯性,我們需要保證每次網(wǎng)頁(yè)加載成功,文件下載完成,我會(huì )在后面的內容中一步一步介紹。
實(shí)施過(guò)程
Selenium 可以模擬打開(kāi)瀏覽器。在此之前,我們需要下載瀏覽器的驅動(dòng)程序。在本文中,我們使用的是chrome瀏覽器,Firefox也是常用的瀏覽器。步驟類(lèi)似,不再贅述。
硒的安裝:
sudo pip install selenium
然后下載chrome的webdriver,直接保存到本地,比如/usr/bin,然后設置selenium的基本設置
import re#正則表達式
import random#隨機選擇
import subprocess# 執行bash命令
from multiprocessing import Pool#建立線(xiàn)程池,并行爬取加快速度
from selenium import webdriver
# set chromedriver path and download path
chromeOptions = webdriver.ChromeOptions()
dl_path="~/Downloads/KanCloud"#設置下載路徑
chromedriver="/usr/bin/chromedriver"#修改為你的chromedriver路徑
prefs = {"download.default_directory" : dl_path}
chromeOptions.add_experimental_option("prefs",prefs)
#可以為webdriver設置代理,自動(dòng)獲得代理IP地址下面會(huì )解釋,這里注釋掉
#PROXY='1.82.216.134:80'
#chromeOptions.add_argument('--proxy-server=%s' % PROXY)
# url_start='http://www.kancloud.cn/explore/top'
#建立一個(gè)webdriver對象
driver = webdriver.Chrome(chrome_options=chromeOptions)
driver.get('http://www.kancloud.cn/digest/ ... %2339;)#用chrome打開(kāi)這個(gè)網(wǎng)頁(yè)
運行上面的代碼,打開(kāi)一個(gè)chrome標簽,如下圖:
點(diǎn)擊下載按鈕,我們看到有PDF、epub、mobi三個(gè)下載選項。為了模擬點(diǎn)擊動(dòng)作,我們需要獲取元素的位置。這時(shí)候我們就可以使用chrome的inspect功能了,快捷鍵是 Ctrl+shift+I ,或者將鼠標懸停在下載上,右鍵選擇inspect,效果如下:
選擇右邊高亮的代碼,右鍵->復制->復制xpath,可以得到元素的xpath
//*[@id="manualDownload"]/span/b
然后使用webdriver本身的xpath搜索功能獲取元素,并模擬點(diǎn)擊操作
運行上面這句話(huà),我們可以看到網(wǎng)站確實(shí)響應了,支持下載的電子書(shū)格式有3種。這一步點(diǎn)擊下載按鈕是必須的,否則直接點(diǎn)擊epub會(huì )報 element not visible 的錯誤。接下來(lái)我們演示下載epub,鼠標懸停在epub上,右鍵查看,可以得到下載epub的xpath,同上
driver.find_element_by_xpath('//*[@id="manualDownload"]/div/div/ul/li[2]/a').click()
這樣我們就可以把這本epub電子書(shū)下載到我們指定的路徑了。
這是 Selenium 的基本應用。它還有一些其他定位元素的方法和模擬操作的功能,比如把網(wǎng)頁(yè)往下拉,因為有些網(wǎng)站會(huì )根據用戶(hù)的下拉情況來(lái)渲染網(wǎng)頁(yè),越往下拉,顯示的內容越多。詳情請查看 selenium 的官方文檔。
我們對每一頁(yè)的每一本書(shū)執行上述過(guò)程,然后我們可以爬取整個(gè)站點(diǎn)的書(shū)籍,前提是你的網(wǎng)速夠快,運氣夠好。這是因為在持續爬取過(guò)程中會(huì )出現一些異常,例如
1. webdriver 將無(wú)法打開(kāi)網(wǎng)頁(yè)
2. 下載完成前打開(kāi)下一個(gè)網(wǎng)頁(yè),導致webdriver負擔過(guò)重,無(wú)法加載網(wǎng)頁(yè)
3. 網(wǎng)站可能是基于IP地址的反爬蟲(chóng)
下一篇我們將解決以上問(wèn)題,使用多進(jìn)程加速(webdriver太慢,無(wú)法打開(kāi)網(wǎng)頁(yè))。
抓取網(wǎng)頁(yè)生成電子書(shū)(問(wèn)題的話(huà)()設置網(wǎng)站RSS輸出方式)
網(wǎng)站優(yōu)化 ? 優(yōu)采云 發(fā)表了文章 ? 0 個(gè)評論 ? 117 次瀏覽 ? 2022-03-10 07:18
準備好 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只輸出有限數量的最新的文章,所以無(wú)論在Caliber中如何設置都會(huì )受到這個(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)站沒(méi)有提供RSS feed,可以參考《Calibre使用教程:抓取網(wǎng)站頁(yè)面制作電子書(shū)》中文章提供的方法編寫(xiě)腳本直接抓取網(wǎng)站的頁(yè)面內容,制作電子書(shū)。 查看全部
抓取網(wǎng)頁(yè)生成電子書(shū)(問(wèn)題的話(huà)()設置網(wǎng)站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只輸出有限數量的最新的文章,所以無(wú)論在Caliber中如何設置都會(huì )受到這個(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)站沒(méi)有提供RSS feed,可以參考《Calibre使用教程:抓取網(wǎng)站頁(yè)面制作電子書(shū)》中文章提供的方法編寫(xiě)腳本直接抓取網(wǎng)站的頁(yè)面內容,制作電子書(shū)。
抓取網(wǎng)頁(yè)生成電子書(shū)(網(wǎng)上無(wú)法下載的“小說(shuō)在線(xiàn)閱讀”內容?有種Python2.7基礎知識)
網(wǎng)站優(yōu)化 ? 優(yōu)采云 發(fā)表了文章 ? 0 個(gè)評論 ? 100 次瀏覽 ? 2022-03-08 15:08
你還在為無(wú)法在線(xiàn)下載的“小說(shuō)在線(xiàn)閱讀”內容而煩惱嗎?或者是一些文章的內容讓你有采集的沖動(dòng),卻找不到下載鏈接?你有沒(méi)有想自己寫(xiě)一個(gè)程序來(lái)完成這一切的沖動(dòng)?你是不是學(xué)了python,想找點(diǎn)東西炫耀一下自己,告訴別人“兄弟真棒!”?所以讓我們開(kāi)始吧!哈哈~
嗯,最近剛寫(xiě)了很多關(guān)于Yii的東西,想找點(diǎn)東西調整一下.... = =
本項目以研究為目的。在所有版權問(wèn)題上,我們都站在作者一邊。想看盜版小說(shuō)的讀者,要自己面對墻!
說(shuō)了這么多,我們要做的就是從網(wǎng)頁(yè)上爬下小說(shuō)正文的內容。我們的研究對象是全本小說(shuō)網(wǎng)....再次聲明,我們不對任何版權負責....
一開(kāi)始,做最基礎的內容,即抓取某一章的內容。
環(huán)境:Ubuntu,Python 2.7
基礎知識
本程序涉及到的知識點(diǎn)有幾個(gè),這里羅列一下,不贅述,會(huì )有一堆直接百度的疑惑。
1. urllib2 模塊的請求對象,用于設置 HTTP 請求,包括獲取的 url,以及偽裝成瀏覽器代理。然后就是urlopen和read方法,很好理解。
2.chardet 模塊,用于檢測網(wǎng)頁(yè)的編碼。網(wǎng)頁(yè)抓取數據時(shí)容易遇到亂碼問(wèn)題。為了判斷網(wǎng)頁(yè)是gtk編碼還是utf-8,使用chardet的detect函數進(jìn)行檢測。使用Windows的同學(xué)可以在這里下載,解壓到python的lib目錄下。
3. decode函數將字符串從某種編碼轉換為unicode字符,encode將unicode字符轉換為指定編碼格式的字符串。
4. re 模塊正則表達式的應用。搜索功能可以找到匹配正則表達式的項目,replace是替換匹配的字符串。
思路分析:
我們選擇的網(wǎng)址是斗羅大陸第一章??梢圆榭淳W(wǎng)頁(yè)的源碼,會(huì )發(fā)現只有一個(gè)內容標簽收錄了所有章節的內容,所以可以使用正則表達式匹配內容標簽并抓取。試著(zhù)把這部分打印出來(lái),你會(huì )發(fā)現很多
和 ,
換行,就是網(wǎng)頁(yè)中的占位符,也就是空格,換成空格就行了。這一章的內容非常漂亮。為了完整起見(jiàn),也使用正則來(lái)爬下標題。
程序
<p>
# -*- coding: utf-8 -*-
import urllib2
import re
import chardet
class Book_Spider:
def __init__(self):
self.pages = []
# 抓取一個(gè)章節
def GetPage(self):
myUrl = "http://www.quanben.com/xiaoshu ... 3B%3B
user_agent = 'Mozilla/4.0 (compatible; MSIE 5.5; Windows NT)'
headers = { 'User-Agent' : user_agent }
request = urllib2.Request(myUrl, headers = headers)
myResponse = urllib2.urlopen(request)
myPage = myResponse.read()
#先檢測網(wǎng)頁(yè)的字符編碼,最后統一轉為 utf-8
charset = chardet.detect(myPage)
charset = charset['encoding']
if charset == 'utf-8' or charset == 'UTF-8':
myPage = myPage
else:
myPage = myPage.decode('gb2312','ignore').encode('utf-8')
unicodePage = myPage.decode("utf-8")
try:
#抓取標題
my_title = re.search('(.*?)',unicodePage,re.S)
my_title = my_title.group(1)
except:
print '標題 HTML 變化,請重新分析!'
return False
try:
#抓取章節內容
my_content = re.search('(.*?) 查看全部
抓取網(wǎng)頁(yè)生成電子書(shū)(網(wǎng)上無(wú)法下載的“小說(shuō)在線(xiàn)閱讀”內容?有種Python2.7基礎知識)
你還在為無(wú)法在線(xiàn)下載的“小說(shuō)在線(xiàn)閱讀”內容而煩惱嗎?或者是一些文章的內容讓你有采集的沖動(dòng),卻找不到下載鏈接?你有沒(méi)有想自己寫(xiě)一個(gè)程序來(lái)完成這一切的沖動(dòng)?你是不是學(xué)了python,想找點(diǎn)東西炫耀一下自己,告訴別人“兄弟真棒!”?所以讓我們開(kāi)始吧!哈哈~
嗯,最近剛寫(xiě)了很多關(guān)于Yii的東西,想找點(diǎn)東西調整一下.... = =
本項目以研究為目的。在所有版權問(wèn)題上,我們都站在作者一邊。想看盜版小說(shuō)的讀者,要自己面對墻!
說(shuō)了這么多,我們要做的就是從網(wǎng)頁(yè)上爬下小說(shuō)正文的內容。我們的研究對象是全本小說(shuō)網(wǎng)....再次聲明,我們不對任何版權負責....
一開(kāi)始,做最基礎的內容,即抓取某一章的內容。
環(huán)境:Ubuntu,Python 2.7
基礎知識
本程序涉及到的知識點(diǎn)有幾個(gè),這里羅列一下,不贅述,會(huì )有一堆直接百度的疑惑。
1. urllib2 模塊的請求對象,用于設置 HTTP 請求,包括獲取的 url,以及偽裝成瀏覽器代理。然后就是urlopen和read方法,很好理解。
2.chardet 模塊,用于檢測網(wǎng)頁(yè)的編碼。網(wǎng)頁(yè)抓取數據時(shí)容易遇到亂碼問(wèn)題。為了判斷網(wǎng)頁(yè)是gtk編碼還是utf-8,使用chardet的detect函數進(jìn)行檢測。使用Windows的同學(xué)可以在這里下載,解壓到python的lib目錄下。
3. decode函數將字符串從某種編碼轉換為unicode字符,encode將unicode字符轉換為指定編碼格式的字符串。
4. re 模塊正則表達式的應用。搜索功能可以找到匹配正則表達式的項目,replace是替換匹配的字符串。
思路分析:
我們選擇的網(wǎng)址是斗羅大陸第一章??梢圆榭淳W(wǎng)頁(yè)的源碼,會(huì )發(fā)現只有一個(gè)內容標簽收錄了所有章節的內容,所以可以使用正則表達式匹配內容標簽并抓取。試著(zhù)把這部分打印出來(lái),你會(huì )發(fā)現很多
和 ,
換行,就是網(wǎng)頁(yè)中的占位符,也就是空格,換成空格就行了。這一章的內容非常漂亮。為了完整起見(jiàn),也使用正則來(lái)爬下標題。
程序
<p>
# -*- coding: utf-8 -*-
import urllib2
import re
import chardet
class Book_Spider:
def __init__(self):
self.pages = []
# 抓取一個(gè)章節
def GetPage(self):
myUrl = "http://www.quanben.com/xiaoshu ... 3B%3B
user_agent = 'Mozilla/4.0 (compatible; MSIE 5.5; Windows NT)'
headers = { 'User-Agent' : user_agent }
request = urllib2.Request(myUrl, headers = headers)
myResponse = urllib2.urlopen(request)
myPage = myResponse.read()
#先檢測網(wǎng)頁(yè)的字符編碼,最后統一轉為 utf-8
charset = chardet.detect(myPage)
charset = charset['encoding']
if charset == 'utf-8' or charset == 'UTF-8':
myPage = myPage
else:
myPage = myPage.decode('gb2312','ignore').encode('utf-8')
unicodePage = myPage.decode("utf-8")
try:
#抓取標題
my_title = re.search('(.*?)',unicodePage,re.S)
my_title = my_title.group(1)
except:
print '標題 HTML 變化,請重新分析!'
return False
try:
#抓取章節內容
my_content = re.search('(.*?)
抓取網(wǎng)頁(yè)生成電子書(shū)(如何用Python寫(xiě)成的電子書(shū)提取工具?軟件幫你)
網(wǎng)站優(yōu)化 ? 優(yōu)采云 發(fā)表了文章 ? 0 個(gè)評論 ? 111 次瀏覽 ? 2022-03-08 07:10
KindleUnpack 是 Kindle 用戶(hù)的電子書(shū)提取工具。該軟件可以幫助您將kindle中的電子書(shū)提取到本地。該軟件可用于提取Kindle電子書(shū)如mobi、azw3等格式文件中的HTML內容。、圖像和元數據文件,并且可以按照 KindleGen 生成的電子書(shū)的標準和格式放置這些文件。
格式介紹:
KindleUnpack(原名mobiunpack)是一個(gè)用Python編寫(xiě)的小程序,起源于專(zhuān)業(yè)電子書(shū)論壇mobileread??捎糜谔崛indle電子書(shū)如mobi、azw3等格式文件中的HTML內容、圖片和元數據文件,并可以按照KindleGen生成的電子書(shū)的標準和形式放置這些文件。
對于 KF8 文件和混合 Mobi 和 KF8 文件,它可以生成單獨的 Mobi 和 KF8 文件,以及收錄在電子書(shū)中的原創(chuàng )源文件。另外,對于 KF8 文件,它也會(huì )生成一個(gè) ePub 文件,但是如果生成的 HTML 文件不符合 EPUB 標準,那么生成的 ePub 文件也不會(huì )符合 EPUB 標準。對于亞馬遜 .azw4 格式的電子書(shū),它可以提取格式文件中收錄的 PDF 文檔。
KindleUnpack 對于普通人來(lái)說(shuō)用處不大,但是對于喜歡制作電子書(shū)的小伙伴來(lái)說(shuō)卻非常有用。例如,如果你看到一本電子書(shū)漂亮的布局或樣式,你可以用它來(lái)拆解電子書(shū),分析它的源文件,并將你喜歡的功能移植到你的電子書(shū)項目中。這是一個(gè)非常有用的學(xué)習工具。
指示:
運行名為 KindleUnpack.pyw 的 Python 腳本,打開(kāi)工作界面;
點(diǎn)擊“未加密的Kindle電子書(shū)輸入文件”后的【瀏覽...】按鈕,選擇電子書(shū);
點(diǎn)擊“輸出目錄”后的【瀏覽...】按鈕,選擇生成文件的輸出目錄;
其他選項一般可以默認保留,點(diǎn)擊【開(kāi)始】按鈕,稍等片刻即可完成反匯編。 查看全部
抓取網(wǎng)頁(yè)生成電子書(shū)(如何用Python寫(xiě)成的電子書(shū)提取工具?軟件幫你)
KindleUnpack 是 Kindle 用戶(hù)的電子書(shū)提取工具。該軟件可以幫助您將kindle中的電子書(shū)提取到本地。該軟件可用于提取Kindle電子書(shū)如mobi、azw3等格式文件中的HTML內容。、圖像和元數據文件,并且可以按照 KindleGen 生成的電子書(shū)的標準和格式放置這些文件。
格式介紹:
KindleUnpack(原名mobiunpack)是一個(gè)用Python編寫(xiě)的小程序,起源于專(zhuān)業(yè)電子書(shū)論壇mobileread??捎糜谔崛indle電子書(shū)如mobi、azw3等格式文件中的HTML內容、圖片和元數據文件,并可以按照KindleGen生成的電子書(shū)的標準和形式放置這些文件。
對于 KF8 文件和混合 Mobi 和 KF8 文件,它可以生成單獨的 Mobi 和 KF8 文件,以及收錄在電子書(shū)中的原創(chuàng )源文件。另外,對于 KF8 文件,它也會(huì )生成一個(gè) ePub 文件,但是如果生成的 HTML 文件不符合 EPUB 標準,那么生成的 ePub 文件也不會(huì )符合 EPUB 標準。對于亞馬遜 .azw4 格式的電子書(shū),它可以提取格式文件中收錄的 PDF 文檔。
KindleUnpack 對于普通人來(lái)說(shuō)用處不大,但是對于喜歡制作電子書(shū)的小伙伴來(lái)說(shuō)卻非常有用。例如,如果你看到一本電子書(shū)漂亮的布局或樣式,你可以用它來(lái)拆解電子書(shū),分析它的源文件,并將你喜歡的功能移植到你的電子書(shū)項目中。這是一個(gè)非常有用的學(xué)習工具。
指示:
運行名為 KindleUnpack.pyw 的 Python 腳本,打開(kāi)工作界面;
點(diǎn)擊“未加密的Kindle電子書(shū)輸入文件”后的【瀏覽...】按鈕,選擇電子書(shū);
點(diǎn)擊“輸出目錄”后的【瀏覽...】按鈕,選擇生成文件的輸出目錄;
其他選項一般可以默認保留,點(diǎn)擊【開(kāi)始】按鈕,稍等片刻即可完成反匯編。
抓取網(wǎng)頁(yè)生成電子書(shū)(如何使用網(wǎng)絡(luò )爬蟲(chóng)?代理IP的優(yōu)勢是什么?)
網(wǎng)站優(yōu)化 ? 優(yōu)采云 發(fā)表了文章 ? 0 個(gè)評論 ? 99 次瀏覽 ? 2022-03-08 06:20
在大數據時(shí)代,信息采集是一項重要任務(wù)。如果信息采集單純依靠人力,不僅效率低、麻煩,而且采集成本也會(huì )增加。網(wǎng)絡(luò )爬蟲(chóng)可以代替人自動(dòng)采集整理互聯(lián)網(wǎng)上的數據信息,因其效率和速度而廣受青睞。
現在很多網(wǎng)站都設置了反爬機制來(lái)拒絕網(wǎng)絡(luò )爬蟲(chóng),以保護自己的安全。如果要繼續訪(fǎng)問(wèn)網(wǎng)站,需要使用爬蟲(chóng)IP。如果當前IP地址被屏蔽,您可以將其更改為新的IP地址,以保證爬蟲(chóng)的順利運行。
與普通IP相比,爬蟲(chóng)代理IP的優(yōu)勢:
一、高效率、高質(zhì)量的代理多為機房撥號VPS搭建,效率一般在90%以上,也就是提取的IP基本可以連上。
二是速度快。優(yōu)質(zhì)代理IP多為機房寬帶。機房的寬帶比較快。與普通代理相比,用戶(hù)數量相對較少,因此速度更快。
三、高安全性,優(yōu)質(zhì)代理IP一般需要授權才能使用,要么綁定終端IP授權,要么使用賬號密碼驗證,均支持代理IP,后臺自動(dòng)切換。
在爬取相關(guān)信息的過(guò)程中,如果之前的頻率過(guò)高,會(huì )被網(wǎng)站的反爬機制檢測到,反爬機制會(huì )通過(guò)你的IP識別網(wǎng)絡(luò )爬蟲(chóng)。那么我們如何使用代理IP呢?
1、進(jìn)入軟件-提取代理ip
2、生成 API 鏈接 - 打開(kāi)鏈接
3、查看IP地址-使用 查看全部
抓取網(wǎng)頁(yè)生成電子書(shū)(如何使用網(wǎng)絡(luò )爬蟲(chóng)?代理IP的優(yōu)勢是什么?)
在大數據時(shí)代,信息采集是一項重要任務(wù)。如果信息采集單純依靠人力,不僅效率低、麻煩,而且采集成本也會(huì )增加。網(wǎng)絡(luò )爬蟲(chóng)可以代替人自動(dòng)采集整理互聯(lián)網(wǎng)上的數據信息,因其效率和速度而廣受青睞。
現在很多網(wǎng)站都設置了反爬機制來(lái)拒絕網(wǎng)絡(luò )爬蟲(chóng),以保護自己的安全。如果要繼續訪(fǎng)問(wèn)網(wǎng)站,需要使用爬蟲(chóng)IP。如果當前IP地址被屏蔽,您可以將其更改為新的IP地址,以保證爬蟲(chóng)的順利運行。
與普通IP相比,爬蟲(chóng)代理IP的優(yōu)勢:
一、高效率、高質(zhì)量的代理多為機房撥號VPS搭建,效率一般在90%以上,也就是提取的IP基本可以連上。
二是速度快。優(yōu)質(zhì)代理IP多為機房寬帶。機房的寬帶比較快。與普通代理相比,用戶(hù)數量相對較少,因此速度更快。
三、高安全性,優(yōu)質(zhì)代理IP一般需要授權才能使用,要么綁定終端IP授權,要么使用賬號密碼驗證,均支持代理IP,后臺自動(dòng)切換。
在爬取相關(guān)信息的過(guò)程中,如果之前的頻率過(guò)高,會(huì )被網(wǎng)站的反爬機制檢測到,反爬機制會(huì )通過(guò)你的IP識別網(wǎng)絡(luò )爬蟲(chóng)。那么我們如何使用代理IP呢?
1、進(jìn)入軟件-提取代理ip
2、生成 API 鏈接 - 打開(kāi)鏈接
3、查看IP地址-使用
抓取網(wǎng)頁(yè)生成電子書(shū)(.js的命令行工具/Git來(lái)制作精美的電子書(shū)工具)
網(wǎng)站優(yōu)化 ? 優(yōu)采云 發(fā)表了文章 ? 0 個(gè)評論 ? 120 次瀏覽 ? 2022-03-05 15:22
####GitBook 是一個(gè)基于 Node.js 的命令行工具,它使用 Github/Git 和 Markdown 創(chuàng )建精美的電子書(shū),用于同步、共享和錄制
####包格式:html、pdf(需要安裝gitbook-pdf,效果不是很好)、epub、MOBI
現在只介紹html格式:
完整效果:
基本步驟:
以管理員身份安裝
$ npm install gitbook-cli -g 或
$ cnpm install gitbook-cli -g
新建一個(gè)文件夾來(lái)存放這樣的目錄
README.md:簡(jiǎn)介
###Welcome
[外鏈圖片轉存失敗(img-Fpt1DMpr-1563846800927)(/img/huge.jpeg)]
SUMMARY.md:生成目錄組織
* [簡(jiǎn)介](README.md)
* [第一章](chapter1/README.md)
* [第一節](chapter1/node1/README.md)
* [第二章](chapter2/README.md)
* [結束](end/README.md)
在目錄下運行$ gitbook init
如果運行下載依賴(lài)包,會(huì )報如下錯誤:
解決方法:你可以用管理員權限運行 $ gitbook -V
注意:這只是一種解決方案,可能還有其他方法
全部安裝完成后,可以再次執行文件下的$ gitbook init
$tree:查看目錄
$ gitbook serve: 監聽(tīng)頁(yè)面,localhost:4000 或 $ gitbook serve -p 8080
$ gitbook build: 構建文件夾_book
注意:生成的html不能直接訪(fǎng)問(wèn)跳轉,因為有json數據請求??梢员痪幾g器讀取,也可以通過(guò)搭建本地服務(wù)器來(lái)訪(fǎng)問(wèn)
構建到 github:
注意:構建到github,可以參考這個(gè)文章 查看全部
抓取網(wǎng)頁(yè)生成電子書(shū)(.js的命令行工具/Git來(lái)制作精美的電子書(shū)工具)
####GitBook 是一個(gè)基于 Node.js 的命令行工具,它使用 Github/Git 和 Markdown 創(chuàng )建精美的電子書(shū),用于同步、共享和錄制
####包格式:html、pdf(需要安裝gitbook-pdf,效果不是很好)、epub、MOBI
現在只介紹html格式:
完整效果:
基本步驟:
以管理員身份安裝
$ npm install gitbook-cli -g 或
$ cnpm install gitbook-cli -g
新建一個(gè)文件夾來(lái)存放這樣的目錄
README.md:簡(jiǎn)介
###Welcome
[外鏈圖片轉存失敗(img-Fpt1DMpr-1563846800927)(/img/huge.jpeg)]
SUMMARY.md:生成目錄組織
* [簡(jiǎn)介](README.md)
* [第一章](chapter1/README.md)
* [第一節](chapter1/node1/README.md)
* [第二章](chapter2/README.md)
* [結束](end/README.md)
在目錄下運行$ gitbook init
如果運行下載依賴(lài)包,會(huì )報如下錯誤:
解決方法:你可以用管理員權限運行 $ gitbook -V
注意:這只是一種解決方案,可能還有其他方法
全部安裝完成后,可以再次執行文件下的$ gitbook init
$tree:查看目錄
$ gitbook serve: 監聽(tīng)頁(yè)面,localhost:4000 或 $ gitbook serve -p 8080
$ gitbook build: 構建文件夾_book
注意:生成的html不能直接訪(fǎng)問(wèn)跳轉,因為有json數據請求??梢员痪幾g器讀取,也可以通過(guò)搭建本地服務(wù)器來(lái)訪(fǎng)問(wèn)
構建到 github:
注意:構建到github,可以參考這個(gè)文章
抓取網(wǎng)頁(yè)生成電子書(shū)(國外網(wǎng)站?5.超星網(wǎng)址)
網(wǎng)站優(yōu)化 ? 優(yōu)采云 發(fā)表了文章 ? 0 個(gè)評論 ? 95 次瀏覽 ? 2022-03-04 10:11
網(wǎng)址:
以“光催化”為例進(jìn)行搜索,出現以下資源,包括書(shū)籍和專(zhuān)利,按更新時(shí)間排序。注冊會(huì )員即可下載標準共享網(wǎng)絡(luò )資源或微信。一般會(huì )員每天可以免費下載兩次。VIP會(huì )員似乎可以無(wú)限下載。您可以根據情況決定是否花錢(qián)開(kāi)通VIP。
?5. 超級巨星
網(wǎng)址:
最常見(jiàn)的資源最容易被每個(gè)人忽視。大學(xué)一般都和超星合作,學(xué)術(shù)資源還是很多的。部分圖書(shū)提供目錄試讀功能。很多時(shí)候,看目錄就知道要不要繼續看下去了。同時(shí),您還可以使用館際互借或文獻傳遞功能,以及獨秀和中國國家數字圖書(shū)館。
?6. 上千個(gè)采集站
網(wǎng)址:
個(gè)人感覺(jué)本科生的教材比較多,研究生的書(shū)資源比較少。你可以試試看。無(wú)論如何,它是免費的。
?7.電子書(shū)聯(lián)盟
網(wǎng)址:
其他學(xué)科不清楚,但是化學(xué)材料的資源比較少,資源比較老,好在是免費的,可以無(wú)限下載。
國外網(wǎng)站
?8. 圖書(shū)館創(chuàng )世紀
網(wǎng)址:
我覺(jué)得Library Genesis 是英文書(shū)籍的Sci-Hub。頁(yè)面也很簡(jiǎn)單。找到資源后,點(diǎn)擊資源欄最右側鏡像下的任意數字,會(huì )彈出一個(gè)新頁(yè)面。單擊頂部的“獲取”以獲取所需的資源。.
?9. BookSC
網(wǎng)址:
在Bug Tribe點(diǎn)擊英文電子書(shū)彈出BookSC頁(yè)面,簡(jiǎn)潔干凈,無(wú)廣告污染。
?10. HathiTrust 數字圖書(shū)館
網(wǎng)址:
HathiTrust 是一個(gè)學(xué)術(shù)和研究機構的合作計劃,它匯集了來(lái)自世界各地的數字圖書(shū)館。找到資源后,直接點(diǎn)擊,可以在線(xiàn)閱讀,有的可以直接下載,點(diǎn)擊左側“下載整本書(shū)(PDF)”,會(huì )自行生成PDF文檔;.
最后,我想強調的是,盡管近年來(lái)全球范圍內關(guān)于出版物數字化和免費共享的呼聲越來(lái)越高,但書(shū)籍的作者和編輯們在書(shū)籍上付出了很多努力。如果您有條件,請購買(mǎi)正版書(shū)籍并在線(xiàn)下載。資源僅供個(gè)人學(xué)習使用,不得用于商業(yè)用途! 查看全部
抓取網(wǎng)頁(yè)生成電子書(shū)(國外網(wǎng)站?5.超星網(wǎng)址)
網(wǎng)址:
以“光催化”為例進(jìn)行搜索,出現以下資源,包括書(shū)籍和專(zhuān)利,按更新時(shí)間排序。注冊會(huì )員即可下載標準共享網(wǎng)絡(luò )資源或微信。一般會(huì )員每天可以免費下載兩次。VIP會(huì )員似乎可以無(wú)限下載。您可以根據情況決定是否花錢(qián)開(kāi)通VIP。
?5. 超級巨星
網(wǎng)址:
最常見(jiàn)的資源最容易被每個(gè)人忽視。大學(xué)一般都和超星合作,學(xué)術(shù)資源還是很多的。部分圖書(shū)提供目錄試讀功能。很多時(shí)候,看目錄就知道要不要繼續看下去了。同時(shí),您還可以使用館際互借或文獻傳遞功能,以及獨秀和中國國家數字圖書(shū)館。
?6. 上千個(gè)采集站
網(wǎng)址:
個(gè)人感覺(jué)本科生的教材比較多,研究生的書(shū)資源比較少。你可以試試看。無(wú)論如何,它是免費的。
?7.電子書(shū)聯(lián)盟
網(wǎng)址:
其他學(xué)科不清楚,但是化學(xué)材料的資源比較少,資源比較老,好在是免費的,可以無(wú)限下載。
國外網(wǎng)站
?8. 圖書(shū)館創(chuàng )世紀
網(wǎng)址:
我覺(jué)得Library Genesis 是英文書(shū)籍的Sci-Hub。頁(yè)面也很簡(jiǎn)單。找到資源后,點(diǎn)擊資源欄最右側鏡像下的任意數字,會(huì )彈出一個(gè)新頁(yè)面。單擊頂部的“獲取”以獲取所需的資源。.
?9. BookSC
網(wǎng)址:
在Bug Tribe點(diǎn)擊英文電子書(shū)彈出BookSC頁(yè)面,簡(jiǎn)潔干凈,無(wú)廣告污染。
?10. HathiTrust 數字圖書(shū)館
網(wǎng)址:
HathiTrust 是一個(gè)學(xué)術(shù)和研究機構的合作計劃,它匯集了來(lái)自世界各地的數字圖書(shū)館。找到資源后,直接點(diǎn)擊,可以在線(xiàn)閱讀,有的可以直接下載,點(diǎn)擊左側“下載整本書(shū)(PDF)”,會(huì )自行生成PDF文檔;.
最后,我想強調的是,盡管近年來(lái)全球范圍內關(guān)于出版物數字化和免費共享的呼聲越來(lái)越高,但書(shū)籍的作者和編輯們在書(shū)籍上付出了很多努力。如果您有條件,請購買(mǎi)正版書(shū)籍并在線(xiàn)下載。資源僅供個(gè)人學(xué)習使用,不得用于商業(yè)用途!
抓取網(wǎng)頁(yè)生成電子書(shū)(calibre網(wǎng)站的在線(xiàn)幫助文檔無(wú)疑是最基本的學(xué)習資源)
網(wǎng)站優(yōu)化 ? 優(yōu)采云 發(fā)表了文章 ? 0 個(gè)評論 ? 118 次瀏覽 ? 2022-03-01 12:00
calibre 可以抓取網(wǎng)頁(yè)并生成各種格式的電子書(shū)。您可以通過(guò)輸入一些數據使用GUI來(lái)實(shí)現簡(jiǎn)單的自動(dòng)頁(yè)面爬取。主要用于RSS。您還可以使用高級功能來(lái)實(shí)現更復雜的網(wǎng)頁(yè)抓取。但是要爬取一些比較復雜的網(wǎng)頁(yè)內容,還是需要自動(dòng)寫(xiě)一個(gè)PYTHON程序,也就是寫(xiě)一個(gè)recipe。calibre網(wǎng)站的在線(xiàn)幫助文??檔無(wú)疑是最基本的學(xué)習資源。
學(xué)習資料主要有三本,分別是添加你喜歡的新聞網(wǎng)站介紹爬取網(wǎng)頁(yè)的基本方法。食譜的 API 文檔介紹了基本的食譜編寫(xiě)接口 (API),包括參數設置和方法調用。其實(shí)就是研究子類(lèi)的接口,再研究一些菜譜例子。學(xué)完這些內容,應該就可以完成菜譜的編寫(xiě)了。當然,因為菜譜是用python寫(xiě)的,所以學(xué)習python是必不可少的。這里只想介紹一下我學(xué)習界面的心得:
寫(xiě)菜譜,學(xué)習設置界面參數是第一步。其實(shí)通過(guò)設置參數,可以爬取一些簡(jiǎn)單的網(wǎng)頁(yè),生成一定質(zhì)量的電子書(shū)。
API中列出了所有的接口參數,一共48個(gè),并給出了一些解釋。更多細節可以看源碼,源碼前面部分,定義了這48個(gè)參數,有更詳細的解釋。這些參數有些是獨立可設置的,有些是互斥的,設置一個(gè),另一個(gè)不起作用。有些,如果設置為 true,需要實(shí)現一個(gè)方法。大致如下:
1、title =_('未知新聞來(lái)源')
對于生成的電子書(shū)的標題,通常是設置的。
2、描述=你''
使用幾行文字來(lái)描述這個(gè)食譜爬取的內容。原本是對GUI界面下一系列菜譜作用的描述。
3、__author__= __appname__
這個(gè)食譜的作者
4、requires_version= (0,6,0)
執行此配方所需的最低版本 calibre,默認為 0.6.0
5、語(yǔ)言='und'
網(wǎng)頁(yè)內容中使用的語(yǔ)言必須符合 ISO-639 編碼,并且長(cháng)度必須為 2-3 個(gè)字符。
6、max_articles_per_feed= 100
每個(gè)供稿的最大 文章 下載次數,在沒(méi)有 文章 日期的情況下使用。默認為 100。文章oldest_article 參數通常在有日期時(shí)使用。
7、最舊的文章= 7.0
最早下載的 文章 是幾天前。默認為 7 天,單位為天。如果 文章 有日期,則此參數有效。
8、遞歸= 0
網(wǎng)頁(yè)中鏈接的遞歸級別數。默認情況下,不執行遞歸下載。
9、延遲=0
連續下載時(shí),兩次下載之間的時(shí)間間隔,以浮點(diǎn)數表示,單位為秒。
10、publication_type='未知'
發(fā)布類(lèi)型,要爬取的內容類(lèi)型,如報紙(newspaper)、雜志(magazine)、博客(blog)等。如果設置為None,則沒(méi)有類(lèi)型,該參數將作為元數據數據并寫(xiě)入 opf 文件。
11、simultaneous_downloads=5
同時(shí)下載的數量,如果服務(wù)器有限制,則設置為 1。delay`>0時(shí),自動(dòng)減為1,默認為5
12、超時(shí)= 120.0
從服務(wù)器下載的最大時(shí)間限制,超過(guò)這個(gè)時(shí)間就是超時(shí)。單位為秒,默認為 120 秒。
13、timefmt= ' [%a, %d %b%Y]
首頁(yè)顯示的日期格式,默認格式為日、月、年
14、feeds=無(wú)
用于下載的 feed,可以是 ``[url1,url2, ...]`` 或 ``[('title1', url1), ('title2', url2),. ..]`` 兩種形式。
15、summary_length= 500
簡(jiǎn)短描述的最大字符數,默認為 500 個(gè)字符。
16、no_stylesheets=False
指示是否下載和使用原創(chuàng )網(wǎng)頁(yè)的樣式表。默認是下載使用。當設置為 True 時(shí),原創(chuàng )樣式表將不會(huì )被下載和使用。
17、remove_javascript=真
是否刪除下載網(wǎng)頁(yè)中的 javascript 腳本。默認是刪除腳本。
18、needs_subscription=False
下載時(shí)是否登錄,如果為T(mén)rue,GUI界面會(huì )詢(xún)問(wèn)登錄用戶(hù)名和密碼。如果設置為“可選”,則登錄名和密碼是可選的。
19、center_navbar=真
生成的電子書(shū)的目錄是否居中對齊。默認為居中對齊,False 為左對齊。
20、編碼=無(wú)
網(wǎng)頁(yè)的字符集編碼不正確時(shí)要設置的字符集編碼,通常是“l(fā)atin1”和“cp1252”。如果設置為無(wú),將自動(dòng)檢測編碼。如果它是可調用的,則使用兩個(gè)參數調用它,即配方對象和解碼的源文件,并返回解碼的源文件。
21、use_embedded_content=無(wú)
通常,我們會(huì )根據嵌入內容的長(cháng)度猜測提要將嵌入所有 文章 內容。該參數具有三個(gè)值。當設置為 None 時(shí),將進(jìn)行猜測;當設置為 True 時(shí),假定提要收錄所有嵌入的 文章 內容;當設置為 False 時(shí),提要不收錄嵌入的 文章 內容。
22、articles_are_obfuscated=False
默認為False,文章更方便抓取。如果設置為T(mén)rue,則表示文章不易爬取,而較難爬取的文章頁(yè)面將通過(guò)實(shí)現get_obfuscated_article方法進(jìn)行處理。
23、reverse_article_order=False
當設置為 True 時(shí),將反轉提要中 文章 的排序。 查看全部
抓取網(wǎng)頁(yè)生成電子書(shū)(calibre網(wǎng)站的在線(xiàn)幫助文檔無(wú)疑是最基本的學(xué)習資源)
calibre 可以抓取網(wǎng)頁(yè)并生成各種格式的電子書(shū)。您可以通過(guò)輸入一些數據使用GUI來(lái)實(shí)現簡(jiǎn)單的自動(dòng)頁(yè)面爬取。主要用于RSS。您還可以使用高級功能來(lái)實(shí)現更復雜的網(wǎng)頁(yè)抓取。但是要爬取一些比較復雜的網(wǎng)頁(yè)內容,還是需要自動(dòng)寫(xiě)一個(gè)PYTHON程序,也就是寫(xiě)一個(gè)recipe。calibre網(wǎng)站的在線(xiàn)幫助文??檔無(wú)疑是最基本的學(xué)習資源。
學(xué)習資料主要有三本,分別是添加你喜歡的新聞網(wǎng)站介紹爬取網(wǎng)頁(yè)的基本方法。食譜的 API 文檔介紹了基本的食譜編寫(xiě)接口 (API),包括參數設置和方法調用。其實(shí)就是研究子類(lèi)的接口,再研究一些菜譜例子。學(xué)完這些內容,應該就可以完成菜譜的編寫(xiě)了。當然,因為菜譜是用python寫(xiě)的,所以學(xué)習python是必不可少的。這里只想介紹一下我學(xué)習界面的心得:
寫(xiě)菜譜,學(xué)習設置界面參數是第一步。其實(shí)通過(guò)設置參數,可以爬取一些簡(jiǎn)單的網(wǎng)頁(yè),生成一定質(zhì)量的電子書(shū)。
API中列出了所有的接口參數,一共48個(gè),并給出了一些解釋。更多細節可以看源碼,源碼前面部分,定義了這48個(gè)參數,有更詳細的解釋。這些參數有些是獨立可設置的,有些是互斥的,設置一個(gè),另一個(gè)不起作用。有些,如果設置為 true,需要實(shí)現一個(gè)方法。大致如下:
1、title =_('未知新聞來(lái)源')
對于生成的電子書(shū)的標題,通常是設置的。
2、描述=你''
使用幾行文字來(lái)描述這個(gè)食譜爬取的內容。原本是對GUI界面下一系列菜譜作用的描述。
3、__author__= __appname__
這個(gè)食譜的作者
4、requires_version= (0,6,0)
執行此配方所需的最低版本 calibre,默認為 0.6.0
5、語(yǔ)言='und'
網(wǎng)頁(yè)內容中使用的語(yǔ)言必須符合 ISO-639 編碼,并且長(cháng)度必須為 2-3 個(gè)字符。
6、max_articles_per_feed= 100
每個(gè)供稿的最大 文章 下載次數,在沒(méi)有 文章 日期的情況下使用。默認為 100。文章oldest_article 參數通常在有日期時(shí)使用。
7、最舊的文章= 7.0
最早下載的 文章 是幾天前。默認為 7 天,單位為天。如果 文章 有日期,則此參數有效。
8、遞歸= 0
網(wǎng)頁(yè)中鏈接的遞歸級別數。默認情況下,不執行遞歸下載。
9、延遲=0
連續下載時(shí),兩次下載之間的時(shí)間間隔,以浮點(diǎn)數表示,單位為秒。
10、publication_type='未知'
發(fā)布類(lèi)型,要爬取的內容類(lèi)型,如報紙(newspaper)、雜志(magazine)、博客(blog)等。如果設置為None,則沒(méi)有類(lèi)型,該參數將作為元數據數據并寫(xiě)入 opf 文件。
11、simultaneous_downloads=5
同時(shí)下載的數量,如果服務(wù)器有限制,則設置為 1。delay`>0時(shí),自動(dòng)減為1,默認為5
12、超時(shí)= 120.0
從服務(wù)器下載的最大時(shí)間限制,超過(guò)這個(gè)時(shí)間就是超時(shí)。單位為秒,默認為 120 秒。
13、timefmt= ' [%a, %d %b%Y]
首頁(yè)顯示的日期格式,默認格式為日、月、年
14、feeds=無(wú)
用于下載的 feed,可以是 ``[url1,url2, ...]`` 或 ``[('title1', url1), ('title2', url2),. ..]`` 兩種形式。
15、summary_length= 500
簡(jiǎn)短描述的最大字符數,默認為 500 個(gè)字符。
16、no_stylesheets=False
指示是否下載和使用原創(chuàng )網(wǎng)頁(yè)的樣式表。默認是下載使用。當設置為 True 時(shí),原創(chuàng )樣式表將不會(huì )被下載和使用。
17、remove_javascript=真
是否刪除下載網(wǎng)頁(yè)中的 javascript 腳本。默認是刪除腳本。
18、needs_subscription=False
下載時(shí)是否登錄,如果為T(mén)rue,GUI界面會(huì )詢(xún)問(wèn)登錄用戶(hù)名和密碼。如果設置為“可選”,則登錄名和密碼是可選的。
19、center_navbar=真
生成的電子書(shū)的目錄是否居中對齊。默認為居中對齊,False 為左對齊。
20、編碼=無(wú)
網(wǎng)頁(yè)的字符集編碼不正確時(shí)要設置的字符集編碼,通常是“l(fā)atin1”和“cp1252”。如果設置為無(wú),將自動(dòng)檢測編碼。如果它是可調用的,則使用兩個(gè)參數調用它,即配方對象和解碼的源文件,并返回解碼的源文件。
21、use_embedded_content=無(wú)
通常,我們會(huì )根據嵌入內容的長(cháng)度猜測提要將嵌入所有 文章 內容。該參數具有三個(gè)值。當設置為 None 時(shí),將進(jìn)行猜測;當設置為 True 時(shí),假定提要收錄所有嵌入的 文章 內容;當設置為 False 時(shí),提要不收錄嵌入的 文章 內容。
22、articles_are_obfuscated=False
默認為False,文章更方便抓取。如果設置為T(mén)rue,則表示文章不易爬取,而較難爬取的文章頁(yè)面將通過(guò)實(shí)現get_obfuscated_article方法進(jìn)行處理。
23、reverse_article_order=False
當設置為 True 時(shí),將反轉提要中 文章 的排序。
抓取網(wǎng)頁(yè)生成電子書(shū)(微信公眾號【出書(shū)啦】效果紙質(zhì)書(shū)效果代碼思路獲取)
網(wǎng)站優(yōu)化 ? 優(yōu)采云 發(fā)表了文章 ? 0 個(gè)評論 ? 475 次瀏覽 ? 2022-03-01 11:23
[目錄](méi)
為您的個(gè)人微信朋友圈數據生成電子書(shū)!介紹
朋友圈留著(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ū)效果
紙書(shū)效果
獲取微信書(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ǎ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 中。如果不存在,則獲取彈框的內容并執行下一步。流程代碼如下:
# 執行以上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è)月了。
# 判斷當下一月控件的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è)面上的所有元素都加載完畢,所以有些元素打印后可能無(wú)法顯示,導致不太好看。因此,需要判斷加載何時(shí)結束。
通過(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)。
這很令人困惑,為什么?通過(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
補充
完整版源碼存放在github上,需要的可以下載
項目持續更新中,歡迎您star此項目 查看全部
抓取網(wǎng)頁(yè)生成電子書(shū)(微信公眾號【出書(shū)啦】效果紙質(zhì)書(shū)效果代碼思路獲取)
[目錄](méi)
為您的個(gè)人微信朋友圈數據生成電子書(shū)!介紹
朋友圈留著(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ū)效果
紙書(shū)效果
獲取微信書(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ǎ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 中。如果不存在,則獲取彈框的內容并執行下一步。流程代碼如下:
# 執行以上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è)月了。
# 判斷當下一月控件的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è)面上的所有元素都加載完畢,所以有些元素打印后可能無(wú)法顯示,導致不太好看。因此,需要判斷加載何時(shí)結束。
通過(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)。
這很令人困惑,為什么?通過(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
補充
完整版源碼存放在github上,需要的可以下載
項目持續更新中,歡迎您star此項目
抓取網(wǎng)頁(yè)生成電子書(shū)( Requests-html快速指南發(fā)送一個(gè)GET請求:Requests(圖) )
網(wǎng)站優(yōu)化 ? 優(yōu)采云 發(fā)表了文章 ? 0 個(gè)評論 ? 113 次瀏覽 ? 2022-02-27 15:10
Requests-html快速指南發(fā)送一個(gè)GET請求:Requests(圖)
)
前兩天無(wú)意中發(fā)現了一個(gè)可以免費下載電子書(shū)的網(wǎng)站,引起了我的采集癮,迫不及待地想下載這些書(shū)。碰巧不久前 requests 的作者 kennethreitz 有一個(gè)新的庫 requests-html,它不僅可以請求網(wǎng)頁(yè),還可以解析 HTML 文檔。事不宜遲,讓我們開(kāi)始吧。
安裝
安裝很簡(jiǎn)單,只需執行:
pip install requests-html
而已。
分析頁(yè)面結構
通過(guò)查看瀏覽器中的元素,可以發(fā)現這本電子書(shū)網(wǎng)站是用WordPress構建的。主頁(yè)列表元素非常簡(jiǎn)單和規則。
所以我們可以通過(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/pyth ... 39%3B, 'https://docs.python.org/3/tutorial/'}
# 通過(guò) CSS 選擇器選擇元素:
about = r.find('.about', first=True)
# 參數 first 表示只獲取找到的第一元素
about.text # 獲取 .about 下的所有文本
about.attrs # 獲取 .about 下所有屬性像 id, src, href 等等
about.html # 獲取 .about 的 HTML
about.find('a') # 獲取 .about 下的所有 a 標簽
構建代碼
需要Python學(xué)習資料可以加群:821871075 資料免費贈予大家
from requests_html import HTMLSession
import requests
import time
import json
import random
import sys
session = HTMLSession()
list_url = 'http://www.allitebooks.com/page/'
USER_AGENTS = [
"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_7_3) AppleWebKit/535.20 (KHTML, like Gecko) Chrome/19.0.1036.7 Safari/535.20",
"Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.1 (KHTML, like Gecko) Chrome/21.0.1180.71 Safari/537.1 LBBROWSER",
"Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/535.11 (KHTML, like Gecko) Chrome/17.0.963.84 Safari/535.11 LBBROWSER",
"Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.1; WOW64; Trident/5.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; .NET4.0C; .NET4.0E)",
"Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; QQDownload 732; .NET4.0C; .NET4.0E)",
"Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; Trident/4.0; SV1; QQDownload 732; .NET4.0C; .NET4.0E; 360SE)",
"Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; QQDownload 732; .NET4.0C; .NET4.0E)",
"Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.1 (KHTML, like Gecko) Chrome/21.0.1180.89 Safari/537.1",
"Mozilla/5.0 (iPad; U; CPU OS 4_2_1 like Mac OS X; zh-cn) AppleWebKit/533.17.9 (KHTML, like Gecko) Version/5.0.2 Mobile/8C148 Safari/6533.18.5",
"Mozilla/5.0 (Windows NT 6.1; Win64; x64; rv:2.0b13pre) Gecko/20110307 Firefox/4.0b13pre",
"Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:16.0) Gecko/20100101 Firefox/16.0",
"Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.11 (KHTML, like Gecko) Chrome/23.0.1271.64 Safari/537.11",
"Mozilla/5.0 (X11; U; Linux x86_64; zh-CN; rv:1.9.2.10) Gecko/20100922 Ubuntu/10.10 (maverick) Firefox/3.6.10"
]
# 獲取當前列表頁(yè)所有圖書(shū)鏈接
def get_list(url):
response = session.get(url)
all_link = response.html.find('.entry-title a') # 獲取頁(yè)面所有圖書(shū)詳情鏈接
for link in all_link:
getBookUrl(link.attrs['href'])
# 獲取圖書(shū)下載鏈接
def getBookUrl(url):
response = session.get(url)
l = response.html.find('.download-links a', first=True)
if l is not None: # 運行后發(fā)現有的個(gè)別頁(yè)面沒(méi)有下載鏈接,這里加個(gè)判斷
link = l.attrs['href'];
download(link)
#下載圖書(shū)
def download(url):
# 隨機瀏覽器 User-Agent
headers={ "User-Agent":random.choice(USER_AGENTS) }
# 獲取文件名
filename = url.split('/')[-1]
# 如果 url 里包含 .pdf
if ".pdf" in url:
file = 'book/'+filename # 文件路徑寫(xiě)死了,運行時(shí)當前目錄必須有名 book 的文件夾
with open(file, 'wb') as f:
print("正在下載 %s" % filename)
response = requests.get(url, stream=True, headers=headers)
# 獲取文件大小
total_length = response.headers.get('content-length')
# 如果文件大小不存在,則直接寫(xiě)入返回的文本
if total_length is None:
f.write(response.content)
else:
# 下載進(jìn)度條
dl = 0
total_length = int(total_length) # 文件大小
for data in response.iter_content(chunk_size=4096): # 每次響應獲取 4096 字節
dl += len(data)
f.write(data)
done = int(50 * dl / total_length)
sys.stdout.write("\r[%s%s]" % ('=' * done, ' ' * (50-done)) ) # 打印進(jìn)度條
sys.stdout.flush()
print(filename + '下載完成!')
if __name__ == '__main__':
#從這運行,應為知道列表總數,所以偷個(gè)懶直接開(kāi)始循環(huán)
for x in range(1,756):
print('當前頁(yè)面: '+ str(x))
get_list(list_url+str(x))
運行結果:
查看全部
抓取網(wǎng)頁(yè)生成電子書(shū)(
Requests-html快速指南發(fā)送一個(gè)GET請求:Requests(圖)
)
前兩天無(wú)意中發(fā)現了一個(gè)可以免費下載電子書(shū)的網(wǎng)站,引起了我的采集癮,迫不及待地想下載這些書(shū)。碰巧不久前 requests 的作者 kennethreitz 有一個(gè)新的庫 requests-html,它不僅可以請求網(wǎng)頁(yè),還可以解析 HTML 文檔。事不宜遲,讓我們開(kāi)始吧。
安裝
安裝很簡(jiǎn)單,只需執行:
pip install requests-html
而已。
分析頁(yè)面結構
通過(guò)查看瀏覽器中的元素,可以發(fā)現這本電子書(shū)網(wǎng)站是用WordPress構建的。主頁(yè)列表元素非常簡(jiǎn)單和規則。
所以我們可以通過(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/pyth ... 39%3B, 'https://docs.python.org/3/tutorial/'}
# 通過(guò) CSS 選擇器選擇元素:
about = r.find('.about', first=True)
# 參數 first 表示只獲取找到的第一元素
about.text # 獲取 .about 下的所有文本
about.attrs # 獲取 .about 下所有屬性像 id, src, href 等等
about.html # 獲取 .about 的 HTML
about.find('a') # 獲取 .about 下的所有 a 標簽
構建代碼
需要Python學(xué)習資料可以加群:821871075 資料免費贈予大家
from requests_html import HTMLSession
import requests
import time
import json
import random
import sys
session = HTMLSession()
list_url = 'http://www.allitebooks.com/page/'
USER_AGENTS = [
"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_7_3) AppleWebKit/535.20 (KHTML, like Gecko) Chrome/19.0.1036.7 Safari/535.20",
"Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.1 (KHTML, like Gecko) Chrome/21.0.1180.71 Safari/537.1 LBBROWSER",
"Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/535.11 (KHTML, like Gecko) Chrome/17.0.963.84 Safari/535.11 LBBROWSER",
"Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.1; WOW64; Trident/5.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; .NET4.0C; .NET4.0E)",
"Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; QQDownload 732; .NET4.0C; .NET4.0E)",
"Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; Trident/4.0; SV1; QQDownload 732; .NET4.0C; .NET4.0E; 360SE)",
"Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; QQDownload 732; .NET4.0C; .NET4.0E)",
"Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.1 (KHTML, like Gecko) Chrome/21.0.1180.89 Safari/537.1",
"Mozilla/5.0 (iPad; U; CPU OS 4_2_1 like Mac OS X; zh-cn) AppleWebKit/533.17.9 (KHTML, like Gecko) Version/5.0.2 Mobile/8C148 Safari/6533.18.5",
"Mozilla/5.0 (Windows NT 6.1; Win64; x64; rv:2.0b13pre) Gecko/20110307 Firefox/4.0b13pre",
"Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:16.0) Gecko/20100101 Firefox/16.0",
"Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.11 (KHTML, like Gecko) Chrome/23.0.1271.64 Safari/537.11",
"Mozilla/5.0 (X11; U; Linux x86_64; zh-CN; rv:1.9.2.10) Gecko/20100922 Ubuntu/10.10 (maverick) Firefox/3.6.10"
]
# 獲取當前列表頁(yè)所有圖書(shū)鏈接
def get_list(url):
response = session.get(url)
all_link = response.html.find('.entry-title a') # 獲取頁(yè)面所有圖書(shū)詳情鏈接
for link in all_link:
getBookUrl(link.attrs['href'])
# 獲取圖書(shū)下載鏈接
def getBookUrl(url):
response = session.get(url)
l = response.html.find('.download-links a', first=True)
if l is not None: # 運行后發(fā)現有的個(gè)別頁(yè)面沒(méi)有下載鏈接,這里加個(gè)判斷
link = l.attrs['href'];
download(link)
#下載圖書(shū)
def download(url):
# 隨機瀏覽器 User-Agent
headers={ "User-Agent":random.choice(USER_AGENTS) }
# 獲取文件名
filename = url.split('/')[-1]
# 如果 url 里包含 .pdf
if ".pdf" in url:
file = 'book/'+filename # 文件路徑寫(xiě)死了,運行時(shí)當前目錄必須有名 book 的文件夾
with open(file, 'wb') as f:
print("正在下載 %s" % filename)
response = requests.get(url, stream=True, headers=headers)
# 獲取文件大小
total_length = response.headers.get('content-length')
# 如果文件大小不存在,則直接寫(xiě)入返回的文本
if total_length is None:
f.write(response.content)
else:
# 下載進(jìn)度條
dl = 0
total_length = int(total_length) # 文件大小
for data in response.iter_content(chunk_size=4096): # 每次響應獲取 4096 字節
dl += len(data)
f.write(data)
done = int(50 * dl / total_length)
sys.stdout.write("\r[%s%s]" % ('=' * done, ' ' * (50-done)) ) # 打印進(jìn)度條
sys.stdout.flush()
print(filename + '下載完成!')
if __name__ == '__main__':
#從這運行,應為知道列表總數,所以偷個(gè)懶直接開(kāi)始循環(huán)
for x in range(1,756):
print('當前頁(yè)面: '+ str(x))
get_list(list_url+str(x))
運行結果:
抓取網(wǎng)頁(yè)生成電子書(shū)(軟件介紹王子網(wǎng)頁(yè)轉換小精靈(圖)的軟件特色)
網(wǎng)站優(yōu)化 ? 優(yōu)采云 發(fā)表了文章 ? 0 個(gè)評論 ? 127 次瀏覽 ? 2022-02-27 07:16
軟件介紹
王子網(wǎng)頁(yè)轉換精靈是一款簡(jiǎn)單易用的網(wǎng)頁(yè)轉換小程序,支持網(wǎng)頁(yè)制作、網(wǎng)頁(yè)批量轉換、電子書(shū)制作、簡(jiǎn)繁體轉換、文件格式轉換、文件分割合并、文件加密和解密等功能。將網(wǎng)頁(yè)內容轉換為文本或快速將文本轉換為網(wǎng)頁(yè)可以快速完成。
軟件功能
1、 將文本文件批量轉換為web文件(txt等轉htm)
2、網(wǎng)頁(yè)文件批量轉成文本文件(htm等轉成txt)
3、Word、EXCEL、POWERPOINT文檔批量轉換成web文件(doc xls ppt等轉換成htm)
4、圖片文件、FLASH、mp3、wmv文件批量轉換為網(wǎng)頁(yè)(jpg gif swf mp3 wmv等--> htm)
5、支持WORD(doc文件)一步生成電子書(shū)(夢(mèng)寐以求的功能吧?哈哈……)
6、可以作為文本文件使用的電子書(shū)創(chuàng )作工具軟件。(并選擇 Web 模板或 CSS)
7、支持一步將圖片文件編譯成電子相冊。(并且可以選擇電子相冊模板或CSS)
8、支持mht文件一鍵生成電子書(shū)
9、網(wǎng)頁(yè)顏色選擇功能??梢圆东@屏幕任何可見(jiàn)部分的顏色代碼;目前以三種格式捕獲顏色
10、網(wǎng)頁(yè)批量壓縮功能。選擇性或批量壓縮網(wǎng)頁(yè)文件
11、批量加密文件,也可以解密文件。
12、批量拆分文件,也可以合并文件。
13、文檔合并功能。支持多種文件格式合并為五種格式之一,HTML、TXT、RTF、DOC、XML
14、支持HTML網(wǎng)頁(yè)文件一鍵生成電子書(shū)。
15、支持簡(jiǎn)繁體中文轉換(GB2312->BIG5 BIG5->GB2312)
16、網(wǎng)頁(yè)特效采集與管理功能。并且可以方便的批量插入網(wǎng)頁(yè)
17、反編譯 CHM 電子書(shū)。
18、在線(xiàn)搜索功能。集成強大的中文搜索引擎---百度搜索
19、已經(jīng)提供了幾個(gè) CSS 和模板。你也可以自己寫(xiě)。讓過(guò)渡更隨意
20、提供從html文件生成電子書(shū)的兩個(gè)選項
21、支持ppt(powerpoint)文件一步生成電子書(shū)
22、支持xls(excel)文件一鍵生成電子書(shū)
23、文字和網(wǎng)頁(yè)文字的批量替換
24、HTML TXT RTF DOC XML等格式可以任意相互轉換
25、除了轉換上面列出的文件類(lèi)型,還可以自己添加轉換類(lèi)型
安裝方式
1、先等待王子網(wǎng)頁(yè)轉換精靈下載完成
2、使用壓縮軟件解壓文件
3、雙擊運行“PrinceSetup_nh.exe”開(kāi)始安裝
4、安裝完成后可以使用自定義安裝目錄 查看全部
抓取網(wǎng)頁(yè)生成電子書(shū)(軟件介紹王子網(wǎng)頁(yè)轉換小精靈(圖)的軟件特色)
軟件介紹
王子網(wǎng)頁(yè)轉換精靈是一款簡(jiǎn)單易用的網(wǎng)頁(yè)轉換小程序,支持網(wǎng)頁(yè)制作、網(wǎng)頁(yè)批量轉換、電子書(shū)制作、簡(jiǎn)繁體轉換、文件格式轉換、文件分割合并、文件加密和解密等功能。將網(wǎng)頁(yè)內容轉換為文本或快速將文本轉換為網(wǎng)頁(yè)可以快速完成。

軟件功能
1、 將文本文件批量轉換為web文件(txt等轉htm)
2、網(wǎng)頁(yè)文件批量轉成文本文件(htm等轉成txt)
3、Word、EXCEL、POWERPOINT文檔批量轉換成web文件(doc xls ppt等轉換成htm)
4、圖片文件、FLASH、mp3、wmv文件批量轉換為網(wǎng)頁(yè)(jpg gif swf mp3 wmv等--> htm)
5、支持WORD(doc文件)一步生成電子書(shū)(夢(mèng)寐以求的功能吧?哈哈……)
6、可以作為文本文件使用的電子書(shū)創(chuàng )作工具軟件。(并選擇 Web 模板或 CSS)
7、支持一步將圖片文件編譯成電子相冊。(并且可以選擇電子相冊模板或CSS)
8、支持mht文件一鍵生成電子書(shū)
9、網(wǎng)頁(yè)顏色選擇功能??梢圆东@屏幕任何可見(jiàn)部分的顏色代碼;目前以三種格式捕獲顏色
10、網(wǎng)頁(yè)批量壓縮功能。選擇性或批量壓縮網(wǎng)頁(yè)文件
11、批量加密文件,也可以解密文件。
12、批量拆分文件,也可以合并文件。
13、文檔合并功能。支持多種文件格式合并為五種格式之一,HTML、TXT、RTF、DOC、XML
14、支持HTML網(wǎng)頁(yè)文件一鍵生成電子書(shū)。
15、支持簡(jiǎn)繁體中文轉換(GB2312->BIG5 BIG5->GB2312)
16、網(wǎng)頁(yè)特效采集與管理功能。并且可以方便的批量插入網(wǎng)頁(yè)
17、反編譯 CHM 電子書(shū)。
18、在線(xiàn)搜索功能。集成強大的中文搜索引擎---百度搜索
19、已經(jīng)提供了幾個(gè) CSS 和模板。你也可以自己寫(xiě)。讓過(guò)渡更隨意
20、提供從html文件生成電子書(shū)的兩個(gè)選項
21、支持ppt(powerpoint)文件一步生成電子書(shū)
22、支持xls(excel)文件一鍵生成電子書(shū)
23、文字和網(wǎng)頁(yè)文字的批量替換
24、HTML TXT RTF DOC XML等格式可以任意相互轉換
25、除了轉換上面列出的文件類(lèi)型,還可以自己添加轉換類(lèi)型
安裝方式
1、先等待王子網(wǎng)頁(yè)轉換精靈下載完成
2、使用壓縮軟件解壓文件
3、雙擊運行“PrinceSetup_nh.exe”開(kāi)始安裝
4、安裝完成后可以使用自定義安裝目錄
抓取網(wǎng)頁(yè)生成電子書(shū)(這是最好轉換為PDF后的效果怎么樣?怎么用?)
網(wǎng)站優(yōu)化 ? 優(yōu)采云 發(fā)表了文章 ? 0 個(gè)評論 ? 97 次瀏覽 ? 2022-02-26 18:22
大路最近遇到一個(gè)問(wèn)題。有些網(wǎng)頁(yè)上的數據需要離線(xiàn)保存備份,但是各種剪輯工具并不能完全抓取完整的網(wǎng)頁(yè),所以不知道能不能轉成PDF保存。
注意,這是在大陸搜索了大約7到8個(gè)在線(xiàn)工具后,選擇了一個(gè)各方面都滿(mǎn)足需求、使用頻率低、用量少的工具。但絕對不是最好的,如果你知道更好的工具,請留言告訴我
至于為什么要保存到本地閱讀,其實(shí)我是想用記事本保存的,但是效果很差,幾乎看不懂。本地存儲是因為這幾年內容太多變成404了。原來(lái)的網(wǎng)絡(luò )采集夾已成為孤島。除了采集夾本身,大部分鏈接都死了,很尷尬。.
不過(guò)大路轉成PDF后還是把PDF放在記事本里,畢竟方便
Pdf人群
Pdfcrowd 是一個(gè)在線(xiàn)文檔轉換工具,支持將網(wǎng)頁(yè)轉換為PDF和圖片,可以是URL、HTML文件或HTML代碼
可以使用了,使用默認配置,直接輸入網(wǎng)址,點(diǎn)擊轉換即可,可以直接下載,也可以在線(xiàn)閱讀,非常方便。
但是轉換后的PDF會(huì )在每一頁(yè)的末尾加一個(gè)小尾巴,對個(gè)人使用是無(wú)害的,商業(yè)應用請慎重。
例子
下面是使用 Pdfcrowd 轉換為 PDF 的效果。注意中間的黑框是PDF分頁(yè),不是bug
有相同需求的同學(xué)可以試試,Pdfcrowd網(wǎng)站:
另外,本文的重點(diǎn)是,如果您有其他建議,請盡快發(fā)送過(guò)來(lái)。 查看全部
抓取網(wǎng)頁(yè)生成電子書(shū)(這是最好轉換為PDF后的效果怎么樣?怎么用?)
大路最近遇到一個(gè)問(wèn)題。有些網(wǎng)頁(yè)上的數據需要離線(xiàn)保存備份,但是各種剪輯工具并不能完全抓取完整的網(wǎng)頁(yè),所以不知道能不能轉成PDF保存。
注意,這是在大陸搜索了大約7到8個(gè)在線(xiàn)工具后,選擇了一個(gè)各方面都滿(mǎn)足需求、使用頻率低、用量少的工具。但絕對不是最好的,如果你知道更好的工具,請留言告訴我
至于為什么要保存到本地閱讀,其實(shí)我是想用記事本保存的,但是效果很差,幾乎看不懂。本地存儲是因為這幾年內容太多變成404了。原來(lái)的網(wǎng)絡(luò )采集夾已成為孤島。除了采集夾本身,大部分鏈接都死了,很尷尬。.
不過(guò)大路轉成PDF后還是把PDF放在記事本里,畢竟方便
Pdf人群
Pdfcrowd 是一個(gè)在線(xiàn)文檔轉換工具,支持將網(wǎng)頁(yè)轉換為PDF和圖片,可以是URL、HTML文件或HTML代碼
可以使用了,使用默認配置,直接輸入網(wǎng)址,點(diǎn)擊轉換即可,可以直接下載,也可以在線(xiàn)閱讀,非常方便。
但是轉換后的PDF會(huì )在每一頁(yè)的末尾加一個(gè)小尾巴,對個(gè)人使用是無(wú)害的,商業(yè)應用請慎重。
例子
下面是使用 Pdfcrowd 轉換為 PDF 的效果。注意中間的黑框是PDF分頁(yè),不是bug
有相同需求的同學(xué)可以試試,Pdfcrowd網(wǎng)站:
另外,本文的重點(diǎn)是,如果您有其他建議,請盡快發(fā)送過(guò)來(lái)。
抓取網(wǎng)頁(yè)生成電子書(shū)(Python解釋器及豐富的標準庫模塊源碼或機器碼源碼)
網(wǎng)站優(yōu)化 ? 優(yōu)采云 發(fā)表了文章 ? 0 個(gè)評論 ? 95 次瀏覽 ? 2022-02-24 16:07
Python官方文檔(中文版)
Python 是一種易于學(xué)習但功能強大的編程語(yǔ)言。它提供了高效的高級數據結構,以及簡(jiǎn)單高效的面向對象編程。Python 優(yōu)雅的語(yǔ)法和動(dòng)態(tài)類(lèi)型,以及解釋語(yǔ)言的性質(zhì),使其成為大多數平臺上腳本和快速應用程序開(kāi)發(fā)的理想語(yǔ)言。Python解釋器及其豐富的標準庫以源代碼或機器碼的形式提供,適用于各大系統平臺的版本可從Python官網(wǎng)免費獲取,并可免費分發(fā)。這個(gè) 網(wǎng)站 還收錄發(fā)布頁(yè)面或許多免費第三方 Python 模塊、程序和工具的鏈接,以及其他文檔。Python 解釋器易于擴展,并且可以使用 C 或 C++(或其他可以從 C 調用的語(yǔ)言)擴展新的函數和數據類(lèi)型。Python 也可以用作可定制軟件中的擴展語(yǔ)言。本教程對 Python 語(yǔ)言和系統的基本概念和功能進(jìn)行了非正式的介紹。最好有一個(gè) Python 解釋器準備好邊看邊練習,但是所有的例子都是獨立的,所以本教程也可以離線(xiàn)閱讀。有關(guān)標準對象和模塊,請參閱 Python 標準庫。Python 語(yǔ)言參考提供了更正式的語(yǔ)言參考。想寫(xiě) C 或 C++ 擴展的可以參考擴展和嵌入 Python 解釋器和 Python/C API 參考手冊。也有不少書(shū)籍深入解釋了 Python。本教程并未完全涵蓋所有功能,甚至可能不會(huì )涵蓋常用功能。本教程僅涵蓋 Python 最顯著(zhù)的特性,并將讓您體驗該語(yǔ)言的風(fēng)格特性。完成本教程后,您將能夠閱讀和編寫(xiě) Python 模塊和程序,并開(kāi)始學(xué)習更多 Python 庫模塊,詳情請參閱 Python 標準庫。
立即下載 查看全部
抓取網(wǎng)頁(yè)生成電子書(shū)(Python解釋器及豐富的標準庫模塊源碼或機器碼源碼)
Python官方文檔(中文版)
Python 是一種易于學(xué)習但功能強大的編程語(yǔ)言。它提供了高效的高級數據結構,以及簡(jiǎn)單高效的面向對象編程。Python 優(yōu)雅的語(yǔ)法和動(dòng)態(tài)類(lèi)型,以及解釋語(yǔ)言的性質(zhì),使其成為大多數平臺上腳本和快速應用程序開(kāi)發(fā)的理想語(yǔ)言。Python解釋器及其豐富的標準庫以源代碼或機器碼的形式提供,適用于各大系統平臺的版本可從Python官網(wǎng)免費獲取,并可免費分發(fā)。這個(gè) 網(wǎng)站 還收錄發(fā)布頁(yè)面或許多免費第三方 Python 模塊、程序和工具的鏈接,以及其他文檔。Python 解釋器易于擴展,并且可以使用 C 或 C++(或其他可以從 C 調用的語(yǔ)言)擴展新的函數和數據類(lèi)型。Python 也可以用作可定制軟件中的擴展語(yǔ)言。本教程對 Python 語(yǔ)言和系統的基本概念和功能進(jìn)行了非正式的介紹。最好有一個(gè) Python 解釋器準備好邊看邊練習,但是所有的例子都是獨立的,所以本教程也可以離線(xiàn)閱讀。有關(guān)標準對象和模塊,請參閱 Python 標準庫。Python 語(yǔ)言參考提供了更正式的語(yǔ)言參考。想寫(xiě) C 或 C++ 擴展的可以參考擴展和嵌入 Python 解釋器和 Python/C API 參考手冊。也有不少書(shū)籍深入解釋了 Python。本教程并未完全涵蓋所有功能,甚至可能不會(huì )涵蓋常用功能。本教程僅涵蓋 Python 最顯著(zhù)的特性,并將讓您體驗該語(yǔ)言的風(fēng)格特性。完成本教程后,您將能夠閱讀和編寫(xiě) Python 模塊和程序,并開(kāi)始學(xué)習更多 Python 庫模塊,詳情請參閱 Python 標準庫。
立即下載


