
抓取网页生成电子书
抓取网页生成电子书(从里抓取书籍列表的书籍信息和每本书对应的ISBN码)
网站优化 • 优采云 发表了文章 • 0 个评论 • 185 次浏览 • 2022-03-16 10:16
本文首先抓取图书列表的图书信息和每本书对应的ISBN码。
一、分析需求和网站结构
这个网站的结构很简单,分页+书单+书详情页。
获取图书的详细信息和ISBN码,我们需要遍历所有页码,进入图书列表,然后从图书列表中进入每本书的详细信息页面,这样就可以抓取到详细信息和ISBN代码。
二、 从分页开始遍历书单的每一页
通过查看分页功能的HTML代码,可以通过class="current"定位到当前页码所在的span标签。这个span标签的下一个兄弟a标签是指向下一页的链接所在的标签。
通过比较最后一页的span可以发现,在最后一页中,class="current"找到的span标签没有下一个兄弟a标签。所以我们可以用它来判断我们是否已经到了最后一页。代码显示如下:
# 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
三、从书单中找到详细页面的链接
点击书单中的书名或封面图进入详情,然后选择书名和封面图之一,在此处选择书名。
我们可以通过查找class="entry-title"来定位书名所在的h2标签,然后通过这个标签的a属性获取链接所在的a标签,再通过字符串获取链接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
四、从图书详情页面获取书名和 ISBN 码
通过查看图书详情页的HTML代码,我们可以通过查找class="single-title"获取书名,定位到书名所在的h1标签,然后定位到"Isbn:"所在的dt标签通过查找 text="Isbn:" 进行定位,该标签的下一个兄弟节点就是该书的 ISBN 码所在的标签,通过该标签的字符串属性可以获取 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)
运行结果
六、将结果写入文件以供进一步处理
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 爬虫:从刮书信息和刮价格 (1): Basics Beautiful Soup
我们正处于大数据时代,欢迎对数据处理感兴趣的朋友查看另一个系列随笔:Using Python for Data Analysis Basics 系列随笔小结
接下来的作文是网站根据得到的ISBN码得到每本书对应的价格,通过数据分析的知识对得到的数据进行处理,最后输出成csv文件。感兴趣的朋友欢迎关注本博客,也欢迎留言讨论。 查看全部
抓取网页生成电子书(从里抓取书籍列表的书籍信息和每本书对应的ISBN码)
本文首先抓取图书列表的图书信息和每本书对应的ISBN码。
一、分析需求和网站结构
这个网站的结构很简单,分页+书单+书详情页。
获取图书的详细信息和ISBN码,我们需要遍历所有页码,进入图书列表,然后从图书列表中进入每本书的详细信息页面,这样就可以抓取到详细信息和ISBN代码。
二、 从分页开始遍历书单的每一页

通过查看分页功能的HTML代码,可以通过class="current"定位到当前页码所在的span标签。这个span标签的下一个兄弟a标签是指向下一页的链接所在的标签。
通过比较最后一页的span可以发现,在最后一页中,class="current"找到的span标签没有下一个兄弟a标签。所以我们可以用它来判断我们是否已经到了最后一页。代码显示如下:
# 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
三、从书单中找到详细页面的链接
点击书单中的书名或封面图进入详情,然后选择书名和封面图之一,在此处选择书名。

我们可以通过查找class="entry-title"来定位书名所在的h2标签,然后通过这个标签的a属性获取链接所在的a标签,再通过字符串获取链接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
四、从图书详情页面获取书名和 ISBN 码

通过查看图书详情页的HTML代码,我们可以通过查找class="single-title"获取书名,定位到书名所在的h1标签,然后定位到"Isbn:"所在的dt标签通过查找 text="Isbn:" 进行定位,该标签的下一个兄弟节点就是该书的 ISBN 码所在的标签,通过该标签的字符串属性可以获取 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)
运行结果

六、将结果写入文件以供进一步处理
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 爬虫:从刮书信息和刮价格 (1): Basics Beautiful Soup
我们正处于大数据时代,欢迎对数据处理感兴趣的朋友查看另一个系列随笔:Using Python for Data Analysis Basics 系列随笔小结
接下来的作文是网站根据得到的ISBN码得到每本书对应的价格,通过数据分析的知识对得到的数据进行处理,最后输出成csv文件。感兴趣的朋友欢迎关注本博客,也欢迎留言讨论。
抓取网页生成电子书(如何将网页文章批量抓取、生成电子书、直接推送到Kindle)
网站优化 • 优采云 发表了文章 • 0 个评论 • 114 次浏览 • 2022-03-14 07:13
我一直在研究如何将我关心的网页或 文章 放入我的 Kindle 中进行认真阅读,但我已经很长时间没有取得任何真正的进展。手工排版制作电子书的方法虽然简单易行,但对于短小、更新频繁的网页文章来说效率低下。如果有一个工具可以文章批量抓取网页,生成电子书,然后直接推送到Kindle上就好了。Doocer 就是这样一种实用程序。
Doocer是@lepture开发的在线服务,允许用户在Pocket Read Later账号中提交URL、RSS提要地址和文章,然后逐一或批量制作成ePub和MOBI电子书. 您可以直接在 Doocer 中阅读所有文章,也可以将它们推送到 Kindle、Apple Books 中阅读。
真的很好的阅读体验
Doocer 生成的电子书在排版方面非常出色。应该有的内容很多,不应该有的内容不多。本书不仅封面图文并茂,还有文章目录、网站出处、文章原作者等信息。Doocer生成的MOBI电子书支持KF8标准,因此支持Kindle原生替换自定义字体。
由于网站文章通常有标准和通用的排版规范,Doocer生成的电子书文章中的大小标题和列表图例与原网页文章高度一致@>。原文章中的所有超链接也被保留,评论、广告等内容全部丢弃。整本书的阅读体验非常友好。(当然,如果原网页文章的布局没有规则,那么生成的电子书也可能面目全非。)
将网页 文章 制作成电子书
Doocer完成注册登录后,我们就可以开始将网页文章制作成电子书了。首先,我们点击“NEW BOOK”按钮新建电子书,输入电子书名称。接下来选择右上角的“添加”以添加 文章 URL 或 RSS 提要地址。
以小众网站的文章为例,我们选择“FEED”,在输入框中粘贴RSS地址,然后点击“PARSE”,那么小众最近文章的列表就会出现为我们显示添加到。我们可以根据需要选择,也可以点击“SELECT ALL”全选文章。最后,下拉到页面底部,选择“SAVE”,那么这些文章就会被添加到书里。
其实Doocer网页与RSS工具很相似,实现了从网站批量抓取文章并集中展示的功能。
要将这些 文章 转换为电子书并将它们推送到 Kindle,我们必须做一些简单的事情。
首先,根据Doocer个人设置页面中的提示,我们打开它,将Doocer电子书的发送地址添加到个人文档接收地址中。完成后,我们在输入框中填写Kindle的个人文档接收地址,点击保存。
最后,我们在 Doocer 中打开《少数派》这本书,在页面上找到“Publish”,选择 Send to Kindle。大约 10 到 30 分钟,Doocer 将完成图书制作并将图书推送到 Kindle。
仍有一些问题需要注意
Doocer目前处于beta测试阶段,还有一些bug,尤其是中文网站经常出现问题。好在Doocer官网有开发者对话频道,可以直接联系他帮忙解决。
自动化所有操作的过程是我认为 Doocer 最需要做的事情。Doocer可以像RSS工具一样抓取网页中更新的文章,但是要抓取新的文章并生成电子书并推送,仍然需要手动完成。如果整个过程可以自动化,RSS - MOBI - Kindle 一口气,相信它的用处会更好。
目前,Doocer 的所有功能都可以免费使用。 查看全部
抓取网页生成电子书(如何将网页文章批量抓取、生成电子书、直接推送到Kindle)
我一直在研究如何将我关心的网页或 文章 放入我的 Kindle 中进行认真阅读,但我已经很长时间没有取得任何真正的进展。手工排版制作电子书的方法虽然简单易行,但对于短小、更新频繁的网页文章来说效率低下。如果有一个工具可以文章批量抓取网页,生成电子书,然后直接推送到Kindle上就好了。Doocer 就是这样一种实用程序。
Doocer是@lepture开发的在线服务,允许用户在Pocket Read Later账号中提交URL、RSS提要地址和文章,然后逐一或批量制作成ePub和MOBI电子书. 您可以直接在 Doocer 中阅读所有文章,也可以将它们推送到 Kindle、Apple Books 中阅读。

真的很好的阅读体验
Doocer 生成的电子书在排版方面非常出色。应该有的内容很多,不应该有的内容不多。本书不仅封面图文并茂,还有文章目录、网站出处、文章原作者等信息。Doocer生成的MOBI电子书支持KF8标准,因此支持Kindle原生替换自定义字体。
由于网站文章通常有标准和通用的排版规范,Doocer生成的电子书文章中的大小标题和列表图例与原网页文章高度一致@>。原文章中的所有超链接也被保留,评论、广告等内容全部丢弃。整本书的阅读体验非常友好。(当然,如果原网页文章的布局没有规则,那么生成的电子书也可能面目全非。)

将网页 文章 制作成电子书
Doocer完成注册登录后,我们就可以开始将网页文章制作成电子书了。首先,我们点击“NEW BOOK”按钮新建电子书,输入电子书名称。接下来选择右上角的“添加”以添加 文章 URL 或 RSS 提要地址。

以小众网站的文章为例,我们选择“FEED”,在输入框中粘贴RSS地址,然后点击“PARSE”,那么小众最近文章的列表就会出现为我们显示添加到。我们可以根据需要选择,也可以点击“SELECT ALL”全选文章。最后,下拉到页面底部,选择“SAVE”,那么这些文章就会被添加到书里。

其实Doocer网页与RSS工具很相似,实现了从网站批量抓取文章并集中展示的功能。

要将这些 文章 转换为电子书并将它们推送到 Kindle,我们必须做一些简单的事情。
首先,根据Doocer个人设置页面中的提示,我们打开它,将Doocer电子书的发送地址添加到个人文档接收地址中。完成后,我们在输入框中填写Kindle的个人文档接收地址,点击保存。

最后,我们在 Doocer 中打开《少数派》这本书,在页面上找到“Publish”,选择 Send to Kindle。大约 10 到 30 分钟,Doocer 将完成图书制作并将图书推送到 Kindle。

仍有一些问题需要注意
Doocer目前处于beta测试阶段,还有一些bug,尤其是中文网站经常出现问题。好在Doocer官网有开发者对话频道,可以直接联系他帮忙解决。
自动化所有操作的过程是我认为 Doocer 最需要做的事情。Doocer可以像RSS工具一样抓取网页中更新的文章,但是要抓取新的文章并生成电子书并推送,仍然需要手动完成。如果整个过程可以自动化,RSS - MOBI - Kindle 一口气,相信它的用处会更好。
目前,Doocer 的所有功能都可以免费使用。
抓取网页生成电子书(如何将网页文章批量抓取、生成电子书、直接推送到Kindle)
网站优化 • 优采云 发表了文章 • 0 个评论 • 103 次浏览 • 2022-03-14 07:08
我一直在研究如何将我关心的网页或 文章 放入我的 Kindle 中进行认真阅读,但我已经很长时间没有取得任何真正的进展。手工排版制作电子书的方法虽然简单易行,但对于短小、更新频繁的网页文章来说效率低下。如果有一个工具可以文章批量抓取网页,生成电子书,然后直接推送到Kindle上就好了。Doocer 就是这样一种实用程序。
Doocer是@lepture开发的在线服务,允许用户在Pocket Read Later账号中提交URL、RSS提要地址和文章,然后逐一或批量制作成ePub和MOBI电子书. 您可以直接在 Doocer 中阅读所有文章,也可以将它们推送到 Kindle、Apple Books 中阅读。
真的很好的阅读体验
Doocer 生成的电子书在排版方面非常出色。应该有的内容很多,不应该有的内容不多。本书不仅封面图文并茂,还有文章目录、网站出处、文章原作者等信息。Doocer生成的MOBI电子书支持KF8标准,因此支持Kindle原生替换自定义字体。
由于网站文章通常有标准和通用的排版规范,Doocer生成的电子书文章中的大小标题和列表图例与原网页文章高度一致@>。原文章中的所有超链接也被保留,评论、广告等内容全部丢弃。整本书的阅读体验非常友好。(当然,如果原网页文章的布局没有规则,那么生成的电子书也可能面目全非。)
将网页 文章 制作成电子书
Doocer完成注册登录后,我们就可以开始将网页文章制作成电子书了。首先,我们点击“NEW BOOK”按钮新建电子书,输入电子书名称。接下来选择右上角的“添加”以添加 文章 URL 或 RSS 提要地址。
以小众网站的文章为例,我们选择“FEED”,在输入框中粘贴RSS地址,然后点击“PARSE”,那么小众最近文章的列表就会出现为我们显示添加到。我们可以根据需要选择,也可以点击“SELECT ALL”全选文章。最后,下拉到页面底部,选择“SAVE”,那么这些文章就会被添加到书里。
其实Doocer网页与RSS工具很相似,实现了从网站批量抓取文章并集中展示的功能。
要将这些 文章 转换为电子书并将它们推送到 Kindle,我们必须做一些简单的事情。
首先,根据Doocer个人设置页面中的提示,我们打开它,将Doocer电子书的发送地址添加到个人文档接收地址中。完成后,我们在输入框中填写Kindle的个人文档接收地址,点击保存。
最后,我们在 Doocer 中打开《少数派》这本书,在页面上找到“Publish”,选择 Send to Kindle。大约 10 到 30 分钟,Doocer 将完成图书制作并将图书推送到 Kindle。
仍有一些问题需要注意
Doocer目前处于beta测试阶段,还有一些bug,尤其是中文网站经常出现问题。好在Doocer官网有开发者对话频道,可以直接联系他帮忙解决。
自动化所有操作的过程是我认为 Doocer 最需要做的事情。Doocer可以像RSS工具一样抓取网页中更新的文章,但是要抓取新的文章并生成电子书并推送,仍然需要手动完成。如果整个过程可以自动化,RSS - MOBI - Kindle 一口气,相信它的用处会更好。
目前,Doocer 的所有功能都可以免费使用。 查看全部
抓取网页生成电子书(如何将网页文章批量抓取、生成电子书、直接推送到Kindle)
我一直在研究如何将我关心的网页或 文章 放入我的 Kindle 中进行认真阅读,但我已经很长时间没有取得任何真正的进展。手工排版制作电子书的方法虽然简单易行,但对于短小、更新频繁的网页文章来说效率低下。如果有一个工具可以文章批量抓取网页,生成电子书,然后直接推送到Kindle上就好了。Doocer 就是这样一种实用程序。
Doocer是@lepture开发的在线服务,允许用户在Pocket Read Later账号中提交URL、RSS提要地址和文章,然后逐一或批量制作成ePub和MOBI电子书. 您可以直接在 Doocer 中阅读所有文章,也可以将它们推送到 Kindle、Apple Books 中阅读。

真的很好的阅读体验
Doocer 生成的电子书在排版方面非常出色。应该有的内容很多,不应该有的内容不多。本书不仅封面图文并茂,还有文章目录、网站出处、文章原作者等信息。Doocer生成的MOBI电子书支持KF8标准,因此支持Kindle原生替换自定义字体。
由于网站文章通常有标准和通用的排版规范,Doocer生成的电子书文章中的大小标题和列表图例与原网页文章高度一致@>。原文章中的所有超链接也被保留,评论、广告等内容全部丢弃。整本书的阅读体验非常友好。(当然,如果原网页文章的布局没有规则,那么生成的电子书也可能面目全非。)

将网页 文章 制作成电子书
Doocer完成注册登录后,我们就可以开始将网页文章制作成电子书了。首先,我们点击“NEW BOOK”按钮新建电子书,输入电子书名称。接下来选择右上角的“添加”以添加 文章 URL 或 RSS 提要地址。

以小众网站的文章为例,我们选择“FEED”,在输入框中粘贴RSS地址,然后点击“PARSE”,那么小众最近文章的列表就会出现为我们显示添加到。我们可以根据需要选择,也可以点击“SELECT ALL”全选文章。最后,下拉到页面底部,选择“SAVE”,那么这些文章就会被添加到书里。

其实Doocer网页与RSS工具很相似,实现了从网站批量抓取文章并集中展示的功能。

要将这些 文章 转换为电子书并将它们推送到 Kindle,我们必须做一些简单的事情。
首先,根据Doocer个人设置页面中的提示,我们打开它,将Doocer电子书的发送地址添加到个人文档接收地址中。完成后,我们在输入框中填写Kindle的个人文档接收地址,点击保存。

最后,我们在 Doocer 中打开《少数派》这本书,在页面上找到“Publish”,选择 Send to Kindle。大约 10 到 30 分钟,Doocer 将完成图书制作并将图书推送到 Kindle。

仍有一些问题需要注意
Doocer目前处于beta测试阶段,还有一些bug,尤其是中文网站经常出现问题。好在Doocer官网有开发者对话频道,可以直接联系他帮忙解决。
自动化所有操作的过程是我认为 Doocer 最需要做的事情。Doocer可以像RSS工具一样抓取网页中更新的文章,但是要抓取新的文章并生成电子书并推送,仍然需要手动完成。如果整个过程可以自动化,RSS - MOBI - Kindle 一口气,相信它的用处会更好。
目前,Doocer 的所有功能都可以免费使用。
抓取网页生成电子书(一步步解析单个页面,得到该页书籍链接列表得到)
网站优化 • 优采云 发表了文章 • 0 个评论 • 118 次浏览 • 2022-03-14 07:08
2. 解析单个页面以获取该页面上的书籍链接列表
3. 转到书页
* 判断是否可以下载
* 如果可以下载,请下载所有格式的书籍
其次,为了获得爬虫的健壮性,我们需要保证每次网页加载成功,文件下载完成,我会在后面的内容中一步一步介绍。
实施过程
Selenium 可以模拟打开浏览器。在此之前,我们需要下载浏览器的驱动程序。在本文中,我们使用的是chrome浏览器,Firefox也是常用的浏览器。步骤类似,不再赘述。
硒的安装:
sudo pip install selenium
然后下载chrome的webdriver,直接保存到本地,比如/usr/bin,然后设置selenium的基本设置
import re#正则表达式
import random#随机选择
import subprocess# 执行bash命令
from multiprocessing import Pool#建立线程池,并行爬取加快速度
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设置代理,自动获得代理IP地址下面会解释,这里注释掉
#PROXY='1.82.216.134:80'
#chromeOptions.add_argument('--proxy-server=%s' % PROXY)
# url_start='http://www.kancloud.cn/explore/top'
#建立一个webdriver对象
driver = webdriver.Chrome(chrome_options=chromeOptions)
driver.get('http://www.kancloud.cn/digest/ ... %2339;)#用chrome打开这个网页
运行上面的代码,打开一个chrome标签,如下图:
点击下载按钮,我们看到有PDF、epub、mobi三个下载选项。为了模拟点击动作,我们需要获取元素的位置。这时候我们就可以使用chrome的inspect功能了,快捷键是 Ctrl+shift+I ,或者将鼠标悬停在下载上,右键选择inspect,效果如下:
选择右边高亮的代码,右键->复制->复制xpath,可以得到元素的xpath
//*[@id="manualDownload"]/span/b
然后使用webdriver本身的xpath搜索功能获取元素,并模拟点击操作
运行上面这句话,我们可以看到网站确实响应了,支持下载的电子书格式有3种。这一步点击下载按钮是必须的,否则直接点击epub会报 element not visible 的错误。接下来我们演示下载epub,鼠标悬停在epub上,右键查看,可以得到下载epub的xpath,同上
driver.find_element_by_xpath('//*[@id="manualDownload"]/div/div/ul/li[2]/a').click()
这样我们就可以把这本epub电子书下载到我们指定的路径了。
这是 Selenium 的基本应用。它还有一些其他的定位元素的方法和模拟操作的功能,比如把网页往下拉,因为有些网站会根据用户的下拉情况来渲染网页,越往下拉,显示的内容越多。详情请查看 selenium 的官方文档。
我们对每一页的每一本书执行上述过程,然后我们可以爬取整个站点的书籍,前提是你的网速够快,运气够好。这是因为在持续爬取过程中会出现一些异常,例如
1. webdriver 将无法打开网页
2. 下载完成前打开下一个网页,导致webdriver负担过重,无法加载网页
3. 网站可能是基于IP地址的反爬虫
下一篇我们将解决以上问题,使用多进程加速(webdriver太慢,无法打开网页)。 查看全部
抓取网页生成电子书(一步步解析单个页面,得到该页书籍链接列表得到)
2. 解析单个页面以获取该页面上的书籍链接列表
3. 转到书页
* 判断是否可以下载
* 如果可以下载,请下载所有格式的书籍
其次,为了获得爬虫的健壮性,我们需要保证每次网页加载成功,文件下载完成,我会在后面的内容中一步一步介绍。
实施过程
Selenium 可以模拟打开浏览器。在此之前,我们需要下载浏览器的驱动程序。在本文中,我们使用的是chrome浏览器,Firefox也是常用的浏览器。步骤类似,不再赘述。
硒的安装:
sudo pip install selenium
然后下载chrome的webdriver,直接保存到本地,比如/usr/bin,然后设置selenium的基本设置
import re#正则表达式
import random#随机选择
import subprocess# 执行bash命令
from multiprocessing import Pool#建立线程池,并行爬取加快速度
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设置代理,自动获得代理IP地址下面会解释,这里注释掉
#PROXY='1.82.216.134:80'
#chromeOptions.add_argument('--proxy-server=%s' % PROXY)
# url_start='http://www.kancloud.cn/explore/top'
#建立一个webdriver对象
driver = webdriver.Chrome(chrome_options=chromeOptions)
driver.get('http://www.kancloud.cn/digest/ ... %2339;)#用chrome打开这个网页
运行上面的代码,打开一个chrome标签,如下图:
点击下载按钮,我们看到有PDF、epub、mobi三个下载选项。为了模拟点击动作,我们需要获取元素的位置。这时候我们就可以使用chrome的inspect功能了,快捷键是 Ctrl+shift+I ,或者将鼠标悬停在下载上,右键选择inspect,效果如下:
选择右边高亮的代码,右键->复制->复制xpath,可以得到元素的xpath
//*[@id="manualDownload"]/span/b
然后使用webdriver本身的xpath搜索功能获取元素,并模拟点击操作
运行上面这句话,我们可以看到网站确实响应了,支持下载的电子书格式有3种。这一步点击下载按钮是必须的,否则直接点击epub会报 element not visible 的错误。接下来我们演示下载epub,鼠标悬停在epub上,右键查看,可以得到下载epub的xpath,同上
driver.find_element_by_xpath('//*[@id="manualDownload"]/div/div/ul/li[2]/a').click()
这样我们就可以把这本epub电子书下载到我们指定的路径了。
这是 Selenium 的基本应用。它还有一些其他的定位元素的方法和模拟操作的功能,比如把网页往下拉,因为有些网站会根据用户的下拉情况来渲染网页,越往下拉,显示的内容越多。详情请查看 selenium 的官方文档。
我们对每一页的每一本书执行上述过程,然后我们可以爬取整个站点的书籍,前提是你的网速够快,运气够好。这是因为在持续爬取过程中会出现一些异常,例如
1. webdriver 将无法打开网页
2. 下载完成前打开下一个网页,导致webdriver负担过重,无法加载网页
3. 网站可能是基于IP地址的反爬虫
下一篇我们将解决以上问题,使用多进程加速(webdriver太慢,无法打开网页)。
抓取网页生成电子书(如何将网页文章批量抓取、生成电子书、直接推送到Kindle)
网站优化 • 优采云 发表了文章 • 0 个评论 • 76 次浏览 • 2022-03-13 07:14
我一直在研究如何将我关心的网页或 文章 放入我的 Kindle 中进行认真阅读,但我已经很长时间没有取得任何真正的进展。手工排版制作电子书的方法虽然简单易行,但对于短小、更新频繁的网页文章来说效率低下。如果有一个工具可以文章批量抓取网页,生成电子书,然后直接推送到Kindle上就好了。Doocer 就是这样一种实用程序。
Doocer是@lepture开发的在线服务,允许用户在Pocket Read Later账户中提交URL、RSS提要地址和文章,然后逐一或批量制作成ePub和MOBI电子书. 您可以直接在 Doocer 中阅读所有文章,也可以将它们推送到 Kindle、Apple Books 中阅读。
真的很好的阅读体验
Doocer 生成的电子书在排版方面非常出色。应该有的内容很多,不应该有的内容不多。本书不仅封面图文并茂,还有文章目录、网站出处、文章原作者等信息。Doocer生成的MOBI电子书支持KF8标准,因此支持Kindle原生替换自定义字体。
由于网站文章通常有标准和通用的排版规范,Doocer生成的电子书文章中的大小标题和列表图例与原网页文章高度一致@>。原文章中的所有超链接也被保留,评论、广告等内容全部丢弃。整本书的阅读体验非常友好。(当然,如果原网页文章的布局没有规则,那么生成的电子书也可能面目全非。)
将网页 文章 制作成电子书
Doocer完成注册登录后,我们就可以开始将网页文章制作成电子书了。首先,我们点击“NEW BOOK”按钮新建电子书,输入电子书名称。接下来选择右上角的“添加”以添加 文章 URL 或 RSS 提要地址。
以小众网页的文章为例,我们选择“FEED”,在输入框中粘贴RSS地址,然后点击“PARSE”,那么小众最近的文章列表就会出现为我们显示添加到。我们可以根据需要选择,也可以点击“SELECT ALL”全选文章。最后,下拉到页面底部,选择“SAVE”,那么这些文章就会被添加到书里。
其实Doocer网页与RSS工具很相似,实现了从网站批量抓取文章并集中展示的功能。
要将这些 文章 转换为电子书并将它们推送到 Kindle,我们必须做一些简单的事情。
首先,根据Doocer个人设置页面的提示,打开Amazon Kindle的个人文档设置,将Doocer电子书的发送地址添加到个人文档接收地址中。完成后,我们在输入框中填写Kindle的个人文档接收地址,点击保存。
最后,我们在 Doocer 中打开《少数派》这本书,在页面上找到“Publish”,选择 Send to Kindle。大约 10 到 30 分钟,Doocer 将完成图书制作并将图书推送到 Kindle。
仍有一些问题需要注意
Doocer目前处于beta测试阶段,还有一些bug,尤其是中文网站经常出现问题。好在Doocer官网有开发者对话频道,可以直接联系他帮忙解决。
自动化所有操作的过程是我认为 Doocer 最需要做的事情。Doocer可以像RSS工具一样抓取网页中更新的文章,但是要抓取新的文章并生成电子书并推送,仍然需要手动完成。如果整个过程可以自动化,RSS - MOBI - Kindle 一口气,相信它的用处会更好。
目前,Doocer 的所有功能都可以免费使用。 查看全部
抓取网页生成电子书(如何将网页文章批量抓取、生成电子书、直接推送到Kindle)
我一直在研究如何将我关心的网页或 文章 放入我的 Kindle 中进行认真阅读,但我已经很长时间没有取得任何真正的进展。手工排版制作电子书的方法虽然简单易行,但对于短小、更新频繁的网页文章来说效率低下。如果有一个工具可以文章批量抓取网页,生成电子书,然后直接推送到Kindle上就好了。Doocer 就是这样一种实用程序。
Doocer是@lepture开发的在线服务,允许用户在Pocket Read Later账户中提交URL、RSS提要地址和文章,然后逐一或批量制作成ePub和MOBI电子书. 您可以直接在 Doocer 中阅读所有文章,也可以将它们推送到 Kindle、Apple Books 中阅读。

真的很好的阅读体验
Doocer 生成的电子书在排版方面非常出色。应该有的内容很多,不应该有的内容不多。本书不仅封面图文并茂,还有文章目录、网站出处、文章原作者等信息。Doocer生成的MOBI电子书支持KF8标准,因此支持Kindle原生替换自定义字体。
由于网站文章通常有标准和通用的排版规范,Doocer生成的电子书文章中的大小标题和列表图例与原网页文章高度一致@>。原文章中的所有超链接也被保留,评论、广告等内容全部丢弃。整本书的阅读体验非常友好。(当然,如果原网页文章的布局没有规则,那么生成的电子书也可能面目全非。)

将网页 文章 制作成电子书
Doocer完成注册登录后,我们就可以开始将网页文章制作成电子书了。首先,我们点击“NEW BOOK”按钮新建电子书,输入电子书名称。接下来选择右上角的“添加”以添加 文章 URL 或 RSS 提要地址。

以小众网页的文章为例,我们选择“FEED”,在输入框中粘贴RSS地址,然后点击“PARSE”,那么小众最近的文章列表就会出现为我们显示添加到。我们可以根据需要选择,也可以点击“SELECT ALL”全选文章。最后,下拉到页面底部,选择“SAVE”,那么这些文章就会被添加到书里。

其实Doocer网页与RSS工具很相似,实现了从网站批量抓取文章并集中展示的功能。

要将这些 文章 转换为电子书并将它们推送到 Kindle,我们必须做一些简单的事情。
首先,根据Doocer个人设置页面的提示,打开Amazon Kindle的个人文档设置,将Doocer电子书的发送地址添加到个人文档接收地址中。完成后,我们在输入框中填写Kindle的个人文档接收地址,点击保存。

最后,我们在 Doocer 中打开《少数派》这本书,在页面上找到“Publish”,选择 Send to Kindle。大约 10 到 30 分钟,Doocer 将完成图书制作并将图书推送到 Kindle。

仍有一些问题需要注意
Doocer目前处于beta测试阶段,还有一些bug,尤其是中文网站经常出现问题。好在Doocer官网有开发者对话频道,可以直接联系他帮忙解决。
自动化所有操作的过程是我认为 Doocer 最需要做的事情。Doocer可以像RSS工具一样抓取网页中更新的文章,但是要抓取新的文章并生成电子书并推送,仍然需要手动完成。如果整个过程可以自动化,RSS - MOBI - Kindle 一口气,相信它的用处会更好。
目前,Doocer 的所有功能都可以免费使用。
抓取网页生成电子书(Windows,OSX及Linux的在线资料epub或mobi格式)
网站优化 • 优采云 发表了文章 • 0 个评论 • 164 次浏览 • 2022-03-13 01:22
自从我买了kindle之后,我就一直在思考如何充分利用它。虽然可以从多多购买很多书籍,网上也有很多免费的电子书,但还是有很多网页形式的有趣内容。比如O'Reilly Atlas提供了很多电子书,但只提供免费在线阅读;此外,许多材料或文件只是网页形式。所以我希望通过某种方式把这些网上资料转换成epub或者mobi格式,这样就可以在kindle上阅读了。这篇 文章 文章描述了如何使用 calibre 和少量代码来做到这一点。
CalibreCalibre 简介
Calibre 是一款免费的电子书管理工具,兼容 Windows、OS X 和 Linux。幸运的是,除了 GUI 之外,calibre 还提供了很多命令行工具,其中 ebook-convert 命令可以根据用户编写的食谱进行。文件(其实是python代码)抓取指定页面的内容,生成mobi等格式的电子书。通过编写食谱,可以自定义爬取行为以适应不同的网页结构。
安装口径
Calibre的下载地址为download,您可以根据自己的操作系统下载相应的安装程序。
如果是 Linux 操作系统,也可以从软件仓库安装:
Archlinux:
pacman -S calibre
Debian/Ubuntu:
apt-get install calibre
红帽/Fedora/CentOS:
yum -y install calibre
请注意,如果您使用 OSX,则需要单独安装命令行工具。
抓取网页以生成电子书
下面以Git Pocket Guide为例,说明如何通过calibre从网页生成电子书。
找到索引页面
爬取整本书,首先要找到索引页,通常是Table of Contents,也就是目录,其中每个目录都链接到对应的内容页。索引页面将指导生成电子书时要抓取的页面以及内容的组织顺序。在本例中,索引页为 61/index.html。
写食谱
Recipes 是一个带有recipe 扩展名的脚本。内容其实是一段python代码,用来定义calibre爬取页面的范围和行为。以下是用于爬取 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
下面解释代码的不同部分。
整体结构
一般来说,recipe是一个python类,但是这个类必须继承calibre.web.feeds.recipes.BasicNewsRecipe。
解析索引
整个recipe的核心方法是parse_index,这也是recipe必须实现的唯一方法。该方法的目标是分析索引页的内容并返回一个稍微复杂的数据结构(稍后描述),该结构定义了整个电子书的内容以及内容的组织顺序。
整体属性设置
在类的开头,定义了一些全局属性:
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 返回值
下面通过分析索引页来描述parse_index需要返回的数据结构。
整体返回数据结构是一个列表,其中每个元素是一个元组,一个元组代表一个卷。在这个例子中只有一个卷,所以列表中只有一个元组。
每个元组有两个元素,第一个元素是卷名,第二个元素是一个列表,列表中的每个元素都是一个map,代表一个章节(chapter),map中有两个元素:title和url,title是章节标题,url是章节所在内容页面的url。
Calibre 会根据 parse_index 的返回结果对整本书进行爬取和整理,并会自行对内容中的外部链接的图片进行爬取和处理。
整个parse_index使用soup解析索引页,生成上述数据结构。
更多的
以上是最基本的食谱。如果想详细了解如何使用,可以参考 API 文档。
生成手机
菜谱写好后,可以在命令行通过以下命令生成电子书:
ebook-convert Git_Pocket_Guide.recipe Git_Pocket_Guide.mobi
您可以生成 mobi 格式的电子书。ebook-convert 将抓取相关内容并根据食谱代码组织结构。
最终效果
下面是在kindle上看到的效果。
内容
内容一
内容二
有图片的页面
实际效果
我的食谱库
我在github上建了一个kindle-open-books,里面放了一些菜谱,这些菜谱是我自己写的,其他同学贡献的。欢迎任何人提供食谱。 查看全部
抓取网页生成电子书(Windows,OSX及Linux的在线资料epub或mobi格式)
自从我买了kindle之后,我就一直在思考如何充分利用它。虽然可以从多多购买很多书籍,网上也有很多免费的电子书,但还是有很多网页形式的有趣内容。比如O'Reilly Atlas提供了很多电子书,但只提供免费在线阅读;此外,许多材料或文件只是网页形式。所以我希望通过某种方式把这些网上资料转换成epub或者mobi格式,这样就可以在kindle上阅读了。这篇 文章 文章描述了如何使用 calibre 和少量代码来做到这一点。
CalibreCalibre 简介
Calibre 是一款免费的电子书管理工具,兼容 Windows、OS X 和 Linux。幸运的是,除了 GUI 之外,calibre 还提供了很多命令行工具,其中 ebook-convert 命令可以根据用户编写的食谱进行。文件(其实是python代码)抓取指定页面的内容,生成mobi等格式的电子书。通过编写食谱,可以自定义爬取行为以适应不同的网页结构。
安装口径
Calibre的下载地址为download,您可以根据自己的操作系统下载相应的安装程序。
如果是 Linux 操作系统,也可以从软件仓库安装:
Archlinux:
pacman -S calibre
Debian/Ubuntu:
apt-get install calibre
红帽/Fedora/CentOS:
yum -y install calibre
请注意,如果您使用 OSX,则需要单独安装命令行工具。
抓取网页以生成电子书
下面以Git Pocket Guide为例,说明如何通过calibre从网页生成电子书。
找到索引页面
爬取整本书,首先要找到索引页,通常是Table of Contents,也就是目录,其中每个目录都链接到对应的内容页。索引页面将指导生成电子书时要抓取的页面以及内容的组织顺序。在本例中,索引页为 61/index.html。
写食谱
Recipes 是一个带有recipe 扩展名的脚本。内容其实是一段python代码,用来定义calibre爬取页面的范围和行为。以下是用于爬取 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
下面解释代码的不同部分。
整体结构
一般来说,recipe是一个python类,但是这个类必须继承calibre.web.feeds.recipes.BasicNewsRecipe。
解析索引
整个recipe的核心方法是parse_index,这也是recipe必须实现的唯一方法。该方法的目标是分析索引页的内容并返回一个稍微复杂的数据结构(稍后描述),该结构定义了整个电子书的内容以及内容的组织顺序。
整体属性设置
在类的开头,定义了一些全局属性:
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 返回值
下面通过分析索引页来描述parse_index需要返回的数据结构。

整体返回数据结构是一个列表,其中每个元素是一个元组,一个元组代表一个卷。在这个例子中只有一个卷,所以列表中只有一个元组。
每个元组有两个元素,第一个元素是卷名,第二个元素是一个列表,列表中的每个元素都是一个map,代表一个章节(chapter),map中有两个元素:title和url,title是章节标题,url是章节所在内容页面的url。
Calibre 会根据 parse_index 的返回结果对整本书进行爬取和整理,并会自行对内容中的外部链接的图片进行爬取和处理。
整个parse_index使用soup解析索引页,生成上述数据结构。
更多的
以上是最基本的食谱。如果想详细了解如何使用,可以参考 API 文档。
生成手机
菜谱写好后,可以在命令行通过以下命令生成电子书:
ebook-convert Git_Pocket_Guide.recipe Git_Pocket_Guide.mobi
您可以生成 mobi 格式的电子书。ebook-convert 将抓取相关内容并根据食谱代码组织结构。
最终效果
下面是在kindle上看到的效果。
内容

内容一

内容二

有图片的页面

实际效果

我的食谱库
我在github上建了一个kindle-open-books,里面放了一些菜谱,这些菜谱是我自己写的,其他同学贡献的。欢迎任何人提供食谱。
抓取网页生成电子书(如何将网页文章批量抓取、生成电子书、直接推送到Kindle)
网站优化 • 优采云 发表了文章 • 0 个评论 • 306 次浏览 • 2022-03-13 00:12
我一直在研究如何将我关心的网页或 文章 放入我的 Kindle 中进行认真阅读,但我已经很长时间没有取得任何真正的进展。手工排版制作电子书的方法虽然简单易行,但对于短小、更新频繁的网页文章来说效率低下。如果有一个工具可以文章批量抓取网页,生成电子书,然后直接推送到Kindle上就好了。Doocer 就是这样一种实用程序。
Doocer是@lepture开发的在线服务,允许用户在Pocket Read Later账户中提交URL、RSS提要地址和文章,然后逐一或批量制作成ePub和MOBI电子书. 您可以直接在 Doocer 中阅读所有文章,也可以将它们推送到 Kindle、Apple Books 中阅读。
真的很好的阅读体验
Doocer 生成的电子书在排版方面非常出色。应该有的内容很多,不应该有的内容不多。本书不仅封面图文并茂,还有文章目录、网站出处、文章原作者等信息。Doocer生成的MOBI电子书支持KF8标准,因此支持Kindle原生替换自定义字体。
由于网站文章通常有标准和通用的排版规范,Doocer生成的电子书文章中的大小标题和列表图例与原网页文章高度一致@>。原文章中的所有超链接也被保留,评论、广告等内容全部丢弃。整本书的阅读体验非常友好。(当然,如果原网页文章的布局没有规则,那么生成的电子书也可能面目全非。)
将网页 文章 制作成电子书
Doocer完成注册登录后,我们就可以开始将网页文章制作成电子书了。首先,我们点击“NEW BOOK”按钮新建电子书,输入电子书名称。接下来选择右上角的“添加”以添加 文章 URL 或 RSS 提要地址。
以小众网页的文章为例,我们选择“FEED”,在输入框中粘贴RSS地址,然后点击“PARSE”,那么小众最近的文章列表就会出现为我们显示添加到。我们可以根据需要选择,也可以点击“SELECT ALL”全选文章。最后,下拉到页面底部,选择“SAVE”,那么这些文章就会被添加到书里。
其实Doocer网页与RSS工具很相似,实现了从网站批量抓取文章并集中展示的功能。
要将这些 文章 转换为电子书并将它们推送到 Kindle,我们必须做一些简单的事情。
首先,根据Doocer个人设置页面中的提示,我们打开它,将Doocer电子书的发送地址添加到个人文档接收地址中。完成后,我们在输入框中填写Kindle的个人文档接收地址,点击保存。
最后,我们在 Doocer 中打开《少数派》这本书,在页面上找到“Publish”,选择 Send to Kindle。大约 10 到 30 分钟,Doocer 将完成图书制作并将图书推送到 Kindle。
仍有一些问题需要注意
Doocer目前处于beta测试阶段,还有一些bug,尤其是中文网站经常出现问题。好在Doocer官网有开发者对话频道,可以直接联系他帮忙解决。
自动化所有操作的过程是我认为 Doocer 最需要做的事情。Doocer可以像RSS工具一样抓取网页中更新的文章,但是要抓取新的文章并生成电子书并推送,仍然需要手动完成。如果整个过程可以自动化,RSS - MOBI - Kindle 一口气,相信它的用处会更好。
目前,Doocer 的所有功能都可以免费使用。 查看全部
抓取网页生成电子书(如何将网页文章批量抓取、生成电子书、直接推送到Kindle)
我一直在研究如何将我关心的网页或 文章 放入我的 Kindle 中进行认真阅读,但我已经很长时间没有取得任何真正的进展。手工排版制作电子书的方法虽然简单易行,但对于短小、更新频繁的网页文章来说效率低下。如果有一个工具可以文章批量抓取网页,生成电子书,然后直接推送到Kindle上就好了。Doocer 就是这样一种实用程序。
Doocer是@lepture开发的在线服务,允许用户在Pocket Read Later账户中提交URL、RSS提要地址和文章,然后逐一或批量制作成ePub和MOBI电子书. 您可以直接在 Doocer 中阅读所有文章,也可以将它们推送到 Kindle、Apple Books 中阅读。

真的很好的阅读体验
Doocer 生成的电子书在排版方面非常出色。应该有的内容很多,不应该有的内容不多。本书不仅封面图文并茂,还有文章目录、网站出处、文章原作者等信息。Doocer生成的MOBI电子书支持KF8标准,因此支持Kindle原生替换自定义字体。
由于网站文章通常有标准和通用的排版规范,Doocer生成的电子书文章中的大小标题和列表图例与原网页文章高度一致@>。原文章中的所有超链接也被保留,评论、广告等内容全部丢弃。整本书的阅读体验非常友好。(当然,如果原网页文章的布局没有规则,那么生成的电子书也可能面目全非。)

将网页 文章 制作成电子书
Doocer完成注册登录后,我们就可以开始将网页文章制作成电子书了。首先,我们点击“NEW BOOK”按钮新建电子书,输入电子书名称。接下来选择右上角的“添加”以添加 文章 URL 或 RSS 提要地址。

以小众网页的文章为例,我们选择“FEED”,在输入框中粘贴RSS地址,然后点击“PARSE”,那么小众最近的文章列表就会出现为我们显示添加到。我们可以根据需要选择,也可以点击“SELECT ALL”全选文章。最后,下拉到页面底部,选择“SAVE”,那么这些文章就会被添加到书里。

其实Doocer网页与RSS工具很相似,实现了从网站批量抓取文章并集中展示的功能。

要将这些 文章 转换为电子书并将它们推送到 Kindle,我们必须做一些简单的事情。
首先,根据Doocer个人设置页面中的提示,我们打开它,将Doocer电子书的发送地址添加到个人文档接收地址中。完成后,我们在输入框中填写Kindle的个人文档接收地址,点击保存。

最后,我们在 Doocer 中打开《少数派》这本书,在页面上找到“Publish”,选择 Send to Kindle。大约 10 到 30 分钟,Doocer 将完成图书制作并将图书推送到 Kindle。

仍有一些问题需要注意
Doocer目前处于beta测试阶段,还有一些bug,尤其是中文网站经常出现问题。好在Doocer官网有开发者对话频道,可以直接联系他帮忙解决。
自动化所有操作的过程是我认为 Doocer 最需要做的事情。Doocer可以像RSS工具一样抓取网页中更新的文章,但是要抓取新的文章并生成电子书并推送,仍然需要手动完成。如果整个过程可以自动化,RSS - MOBI - Kindle 一口气,相信它的用处会更好。
目前,Doocer 的所有功能都可以免费使用。
抓取网页生成电子书(一步步解析单个页面,得到该页书籍链接列表得到)
网站优化 • 优采云 发表了文章 • 0 个评论 • 98 次浏览 • 2022-03-13 00:12
2. 解析单个页面以获取该页面上的书籍链接列表
3. 转到书页
* 判断是否可以下载
* 如果可以下载,请下载所有格式的书籍
其次,为了获得爬虫的健壮性,我们需要保证每次网页加载成功,文件下载完成,我会在后面的内容中一步一步介绍。
实施过程
Selenium 可以模拟打开浏览器。在此之前,我们需要下载浏览器的驱动程序。在本文中,我们使用的是chrome浏览器,Firefox也是常用的浏览器。步骤类似,不再赘述。
硒的安装:
sudo pip install selenium
然后下载chrome的webdriver,直接保存到本地,比如/usr/bin,然后设置selenium的基本设置
import re#正则表达式
import random#随机选择
import subprocess# 执行bash命令
from multiprocessing import Pool#建立线程池,并行爬取加快速度
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设置代理,自动获得代理IP地址下面会解释,这里注释掉
#PROXY='1.82.216.134:80'
#chromeOptions.add_argument('--proxy-server=%s' % PROXY)
# url_start='http://www.kancloud.cn/explore/top'
#建立一个webdriver对象
driver = webdriver.Chrome(chrome_options=chromeOptions)
driver.get('http://www.kancloud.cn/digest/ ... %2339;)#用chrome打开这个网页
运行上面的代码,打开一个chrome标签,如下图:
点击下载按钮,我们看到有PDF、epub、mobi三个下载选项。为了模拟点击动作,我们需要获取元素的位置。这时候我们就可以使用chrome的inspect功能了,快捷键是 Ctrl+shift+I ,或者将鼠标悬停在下载上,右键选择inspect,效果如下:
选择右边高亮的代码,右键->复制->复制xpath,可以得到元素的xpath
//*[@id="manualDownload"]/span/b
然后使用webdriver本身的xpath搜索功能获取元素,并模拟点击操作
运行上面这句话,我们可以看到网站确实响应了,支持下载的电子书格式有3种。这一步点击下载按钮是必须的,否则直接点击epub会报 element not visible 的错误。接下来我们演示下载epub,鼠标悬停在epub上,右键查看,可以得到下载epub的xpath,同上
driver.find_element_by_xpath('//*[@id="manualDownload"]/div/div/ul/li[2]/a').click()
这样我们就可以把这本epub电子书下载到我们指定的路径了。
这是 Selenium 的基本应用。它还有一些其他定位元素的方法和模拟操作的功能,比如把网页往下拉,因为有些网站会根据用户的下拉情况来渲染网页,越往下拉,显示的内容越多。详情请查看 selenium 的官方文档。
我们对每一页的每一本书执行上述过程,然后我们可以爬取整个站点的书籍,前提是你的网速够快,运气够好。这是因为在持续爬取过程中会出现一些异常,例如
1. webdriver 将无法打开网页
2. 下载完成前打开下一个网页,导致webdriver负担过重,无法加载网页
3. 网站可能是基于IP地址的反爬虫
下一篇我们将解决以上问题,使用多进程加速(webdriver太慢,无法打开网页)。 查看全部
抓取网页生成电子书(一步步解析单个页面,得到该页书籍链接列表得到)
2. 解析单个页面以获取该页面上的书籍链接列表
3. 转到书页
* 判断是否可以下载
* 如果可以下载,请下载所有格式的书籍
其次,为了获得爬虫的健壮性,我们需要保证每次网页加载成功,文件下载完成,我会在后面的内容中一步一步介绍。
实施过程
Selenium 可以模拟打开浏览器。在此之前,我们需要下载浏览器的驱动程序。在本文中,我们使用的是chrome浏览器,Firefox也是常用的浏览器。步骤类似,不再赘述。
硒的安装:
sudo pip install selenium
然后下载chrome的webdriver,直接保存到本地,比如/usr/bin,然后设置selenium的基本设置
import re#正则表达式
import random#随机选择
import subprocess# 执行bash命令
from multiprocessing import Pool#建立线程池,并行爬取加快速度
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设置代理,自动获得代理IP地址下面会解释,这里注释掉
#PROXY='1.82.216.134:80'
#chromeOptions.add_argument('--proxy-server=%s' % PROXY)
# url_start='http://www.kancloud.cn/explore/top'
#建立一个webdriver对象
driver = webdriver.Chrome(chrome_options=chromeOptions)
driver.get('http://www.kancloud.cn/digest/ ... %2339;)#用chrome打开这个网页
运行上面的代码,打开一个chrome标签,如下图:
点击下载按钮,我们看到有PDF、epub、mobi三个下载选项。为了模拟点击动作,我们需要获取元素的位置。这时候我们就可以使用chrome的inspect功能了,快捷键是 Ctrl+shift+I ,或者将鼠标悬停在下载上,右键选择inspect,效果如下:
选择右边高亮的代码,右键->复制->复制xpath,可以得到元素的xpath
//*[@id="manualDownload"]/span/b
然后使用webdriver本身的xpath搜索功能获取元素,并模拟点击操作
运行上面这句话,我们可以看到网站确实响应了,支持下载的电子书格式有3种。这一步点击下载按钮是必须的,否则直接点击epub会报 element not visible 的错误。接下来我们演示下载epub,鼠标悬停在epub上,右键查看,可以得到下载epub的xpath,同上
driver.find_element_by_xpath('//*[@id="manualDownload"]/div/div/ul/li[2]/a').click()
这样我们就可以把这本epub电子书下载到我们指定的路径了。
这是 Selenium 的基本应用。它还有一些其他定位元素的方法和模拟操作的功能,比如把网页往下拉,因为有些网站会根据用户的下拉情况来渲染网页,越往下拉,显示的内容越多。详情请查看 selenium 的官方文档。
我们对每一页的每一本书执行上述过程,然后我们可以爬取整个站点的书籍,前提是你的网速够快,运气够好。这是因为在持续爬取过程中会出现一些异常,例如
1. webdriver 将无法打开网页
2. 下载完成前打开下一个网页,导致webdriver负担过重,无法加载网页
3. 网站可能是基于IP地址的反爬虫
下一篇我们将解决以上问题,使用多进程加速(webdriver太慢,无法打开网页)。
抓取网页生成电子书(问题的话()设置网站RSS输出方式)
网站优化 • 优采云 发表了文章 • 0 个评论 • 93 次浏览 • 2022-03-10 07:18
准备好 RSS 提要后,您可以在 Calibre 中添加它们。打开Calibre,在Calibre主界面顶部的功能图标中找到“抓取新闻”,点击右侧的向下箭头,在弹出的菜单中点击“添加自定义新闻源”。
在弹出的对话框中,点击【新建配方】按钮,切换到“添加自定义新闻源”对话框。在“订阅列表标题”中输入一个名称,例如“我的订阅”(此名称是一个类别名称,将收录一组 RSS 提要地址)。
“最老的文章”可以设置抓取文章的及时性。默认情况下,Calibre 只会在过去 7 天内抓取 文章。如果你想抢更多,你可以自定义更改天数。“每个源的最大 文章 秒数”设置要抓取的最大 文章 秒数。不过需要注意的是,这两个设置受限于网站 RSS的输出方式。比如有些网站的RSS只输出有限数量的最新的文章,所以无论在Caliber中如何设置都会受到这个限制,可能无法获取到指定的数量文章;
接下来,我们需要在“将新闻添加到订阅”中添加我们想要保留的 RSS 地址。在“Source Name”中输入RSS订阅的名称,如“Kindle Companion”;然后在“Source URL”中输入RSS地址,如“”;最后点击【添加来源】按钮,在“订阅列表中的新闻”中添加一个RSS订阅。在一个订阅列表中可以抓取多个RSS订阅,因此可以重复输入多个RSS订阅名称和来源网址并添加多次。
添加RSS提要地址后。点击右下角的【保存】按钮保存并返回“添加自定义动态消息”界面。如需修改,可在左侧列表中选择一项,然后点击【编辑此配方】按钮进行修改。如果要修改它,请单击[删除此配方]按钮将其删除。如果没有问题,可以点击【关闭】按钮返回Calibre主界面。
三、获取和推送
设置好 Feed 后,您就可以抓取新闻了。同样,在Calibre主界面上方的功能图标中找到“抓取新闻”,点击,弹出“定期新闻下载”对话框。在左侧列表中找到“自定义”类别,点击展开,可以找到刚刚添加的订阅列表。选择好之后,点击界面下方的【立即下载】按钮,Calibre就会开始爬取RSS内容。
抓取成功后,Calibre 会生成一本期刊格式的电子书,并自动存入图书馆。如果您设置了电子邮件推送,Calibre 还会自动将生成的电子书推送到云端,以便自动同步到您的 Kindle。
当然,除了这种手动爬取方式,你还可以通过“定时下载”来定时爬取,比如每周、每月或者每隔指定天数爬取RSS内容,但前提是你要保持电脑开机,让您的计算机保持在线状态。
另外需要注意的是,有些网站的RSS只输出摘要,所以Calibre只能抓取摘要内容;如果您订阅的 RSS 被屏蔽并且您的网络没有使用代理,则 Failed to crawl 成功。
如果你需要抓取的网站没有提供RSS feed,可以参考《Calibre使用教程:抓取网站页面制作电子书》中文章提供的方法编写脚本直接抓取网站的页面内容,制作电子书。 查看全部
抓取网页生成电子书(问题的话()设置网站RSS输出方式)
准备好 RSS 提要后,您可以在 Calibre 中添加它们。打开Calibre,在Calibre主界面顶部的功能图标中找到“抓取新闻”,点击右侧的向下箭头,在弹出的菜单中点击“添加自定义新闻源”。

在弹出的对话框中,点击【新建配方】按钮,切换到“添加自定义新闻源”对话框。在“订阅列表标题”中输入一个名称,例如“我的订阅”(此名称是一个类别名称,将收录一组 RSS 提要地址)。
“最老的文章”可以设置抓取文章的及时性。默认情况下,Calibre 只会在过去 7 天内抓取 文章。如果你想抢更多,你可以自定义更改天数。“每个源的最大 文章 秒数”设置要抓取的最大 文章 秒数。不过需要注意的是,这两个设置受限于网站 RSS的输出方式。比如有些网站的RSS只输出有限数量的最新的文章,所以无论在Caliber中如何设置都会受到这个限制,可能无法获取到指定的数量文章;
接下来,我们需要在“将新闻添加到订阅”中添加我们想要保留的 RSS 地址。在“Source Name”中输入RSS订阅的名称,如“Kindle Companion”;然后在“Source URL”中输入RSS地址,如“”;最后点击【添加来源】按钮,在“订阅列表中的新闻”中添加一个RSS订阅。在一个订阅列表中可以抓取多个RSS订阅,因此可以重复输入多个RSS订阅名称和来源网址并添加多次。

添加RSS提要地址后。点击右下角的【保存】按钮保存并返回“添加自定义动态消息”界面。如需修改,可在左侧列表中选择一项,然后点击【编辑此配方】按钮进行修改。如果要修改它,请单击[删除此配方]按钮将其删除。如果没有问题,可以点击【关闭】按钮返回Calibre主界面。
三、获取和推送
设置好 Feed 后,您就可以抓取新闻了。同样,在Calibre主界面上方的功能图标中找到“抓取新闻”,点击,弹出“定期新闻下载”对话框。在左侧列表中找到“自定义”类别,点击展开,可以找到刚刚添加的订阅列表。选择好之后,点击界面下方的【立即下载】按钮,Calibre就会开始爬取RSS内容。

抓取成功后,Calibre 会生成一本期刊格式的电子书,并自动存入图书馆。如果您设置了电子邮件推送,Calibre 还会自动将生成的电子书推送到云端,以便自动同步到您的 Kindle。

当然,除了这种手动爬取方式,你还可以通过“定时下载”来定时爬取,比如每周、每月或者每隔指定天数爬取RSS内容,但前提是你要保持电脑开机,让您的计算机保持在线状态。
另外需要注意的是,有些网站的RSS只输出摘要,所以Calibre只能抓取摘要内容;如果您订阅的 RSS 被屏蔽并且您的网络没有使用代理,则 Failed to crawl 成功。
如果你需要抓取的网站没有提供RSS feed,可以参考《Calibre使用教程:抓取网站页面制作电子书》中文章提供的方法编写脚本直接抓取网站的页面内容,制作电子书。
抓取网页生成电子书(网上无法下载的“小说在线阅读”内容?有种Python2.7基础知识)
网站优化 • 优采云 发表了文章 • 0 个评论 • 73 次浏览 • 2022-03-08 15:08
你还在为无法在线下载的“小说在线阅读”内容而烦恼吗?或者是一些文章的内容让你有采集的冲动,却找不到下载链接?你有没有想自己写一个程序来完成这一切的冲动?你是不是学了python,想找点东西炫耀一下自己,告诉别人“兄弟真棒!”?所以让我们开始吧!哈哈~
嗯,最近刚写了很多关于Yii的东西,想找点东西调整一下.... = =
本项目以研究为目的。在所有版权问题上,我们都站在作者一边。想看盗版小说的读者,要自己面对墙!
说了这么多,我们要做的就是从网页上爬下小说正文的内容。我们的研究对象是全本小说网....再次声明,我们不对任何版权负责....
一开始,做最基础的内容,即抓取某一章的内容。
环境:Ubuntu,Python 2.7
基础知识
本程序涉及到的知识点有几个,这里罗列一下,不赘述,会有一堆直接百度的疑惑。
1. urllib2 模块的请求对象,用于设置 HTTP 请求,包括获取的 url,以及伪装成浏览器代理。然后就是urlopen和read方法,很好理解。
2.chardet 模块,用于检测网页的编码。网页抓取数据时容易遇到乱码问题。为了判断网页是gtk编码还是utf-8,使用chardet的detect函数进行检测。使用Windows的同学可以在这里下载,解压到python的lib目录下。
3. decode函数将字符串从某种编码转换为unicode字符,encode将unicode字符转换为指定编码格式的字符串。
4. re 模块正则表达式的应用。搜索功能可以找到匹配正则表达式的项目,replace是替换匹配的字符串。
思路分析:
我们选择的网址是斗罗大陆第一章。可以查看网页的源码,会发现只有一个内容标签收录了所有章节的内容,所以可以使用正则表达式匹配内容标签并抓取。试着把这部分打印出来,你会发现很多
和 ,
换行,就是网页中的占位符,也就是空格,换成空格就行了。这一章的内容非常漂亮。为了完整起见,也使用正则来爬下标题。
程序
<p>
# -*- coding: utf-8 -*-
import urllib2
import re
import chardet
class Book_Spider:
def __init__(self):
self.pages = []
# 抓取一个章节
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()
#先检测网页的字符编码,最后统一转为 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('(.*?) 查看全部
抓取网页生成电子书(网上无法下载的“小说在线阅读”内容?有种Python2.7基础知识)
你还在为无法在线下载的“小说在线阅读”内容而烦恼吗?或者是一些文章的内容让你有采集的冲动,却找不到下载链接?你有没有想自己写一个程序来完成这一切的冲动?你是不是学了python,想找点东西炫耀一下自己,告诉别人“兄弟真棒!”?所以让我们开始吧!哈哈~
嗯,最近刚写了很多关于Yii的东西,想找点东西调整一下.... = =
本项目以研究为目的。在所有版权问题上,我们都站在作者一边。想看盗版小说的读者,要自己面对墙!
说了这么多,我们要做的就是从网页上爬下小说正文的内容。我们的研究对象是全本小说网....再次声明,我们不对任何版权负责....
一开始,做最基础的内容,即抓取某一章的内容。
环境:Ubuntu,Python 2.7
基础知识
本程序涉及到的知识点有几个,这里罗列一下,不赘述,会有一堆直接百度的疑惑。
1. urllib2 模块的请求对象,用于设置 HTTP 请求,包括获取的 url,以及伪装成浏览器代理。然后就是urlopen和read方法,很好理解。
2.chardet 模块,用于检测网页的编码。网页抓取数据时容易遇到乱码问题。为了判断网页是gtk编码还是utf-8,使用chardet的detect函数进行检测。使用Windows的同学可以在这里下载,解压到python的lib目录下。
3. decode函数将字符串从某种编码转换为unicode字符,encode将unicode字符转换为指定编码格式的字符串。
4. re 模块正则表达式的应用。搜索功能可以找到匹配正则表达式的项目,replace是替换匹配的字符串。
思路分析:
我们选择的网址是斗罗大陆第一章。可以查看网页的源码,会发现只有一个内容标签收录了所有章节的内容,所以可以使用正则表达式匹配内容标签并抓取。试着把这部分打印出来,你会发现很多
和 ,
换行,就是网页中的占位符,也就是空格,换成空格就行了。这一章的内容非常漂亮。为了完整起见,也使用正则来爬下标题。
程序
<p>
# -*- coding: utf-8 -*-
import urllib2
import re
import chardet
class Book_Spider:
def __init__(self):
self.pages = []
# 抓取一个章节
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()
#先检测网页的字符编码,最后统一转为 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('(.*?)
抓取网页生成电子书(如何用Python写成的电子书提取工具?软件帮你)
网站优化 • 优采云 发表了文章 • 0 个评论 • 80 次浏览 • 2022-03-08 07:10
KindleUnpack 是 Kindle 用户的电子书提取工具。该软件可以帮助您将kindle中的电子书提取到本地。该软件可用于提取Kindle电子书如mobi、azw3等格式文件中的HTML内容。、图像和元数据文件,并且可以按照 KindleGen 生成的电子书的标准和格式放置这些文件。
格式介绍:
KindleUnpack(原名mobiunpack)是一个用Python编写的小程序,起源于专业电子书论坛mobileread。可用于提取Kindle电子书如mobi、azw3等格式文件中的HTML内容、图片和元数据文件,并可以按照KindleGen生成的电子书的标准和形式放置这些文件。
对于 KF8 文件和混合 Mobi 和 KF8 文件,它可以生成单独的 Mobi 和 KF8 文件,以及收录在电子书中的原创源文件。另外,对于 KF8 文件,它也会生成一个 ePub 文件,但是如果生成的 HTML 文件不符合 EPUB 标准,那么生成的 ePub 文件也不会符合 EPUB 标准。对于亚马逊 .azw4 格式的电子书,它可以提取格式文件中收录的 PDF 文档。
KindleUnpack 对于普通人来说用处不大,但是对于喜欢制作电子书的小伙伴来说却非常有用。例如,如果你看到一本电子书漂亮的布局或样式,你可以用它来拆解电子书,分析它的源文件,并将你喜欢的功能移植到你的电子书项目中。这是一个非常有用的学习工具。
指示:
运行名为 KindleUnpack.pyw 的 Python 脚本,打开工作界面;
点击“未加密的Kindle电子书输入文件”后的【浏览...】按钮,选择电子书;
点击“输出目录”后的【浏览...】按钮,选择生成文件的输出目录;
其他选项一般可以默认保留,点击【开始】按钮,稍等片刻即可完成反汇编。 查看全部
抓取网页生成电子书(如何用Python写成的电子书提取工具?软件帮你)
KindleUnpack 是 Kindle 用户的电子书提取工具。该软件可以帮助您将kindle中的电子书提取到本地。该软件可用于提取Kindle电子书如mobi、azw3等格式文件中的HTML内容。、图像和元数据文件,并且可以按照 KindleGen 生成的电子书的标准和格式放置这些文件。
格式介绍:
KindleUnpack(原名mobiunpack)是一个用Python编写的小程序,起源于专业电子书论坛mobileread。可用于提取Kindle电子书如mobi、azw3等格式文件中的HTML内容、图片和元数据文件,并可以按照KindleGen生成的电子书的标准和形式放置这些文件。
对于 KF8 文件和混合 Mobi 和 KF8 文件,它可以生成单独的 Mobi 和 KF8 文件,以及收录在电子书中的原创源文件。另外,对于 KF8 文件,它也会生成一个 ePub 文件,但是如果生成的 HTML 文件不符合 EPUB 标准,那么生成的 ePub 文件也不会符合 EPUB 标准。对于亚马逊 .azw4 格式的电子书,它可以提取格式文件中收录的 PDF 文档。
KindleUnpack 对于普通人来说用处不大,但是对于喜欢制作电子书的小伙伴来说却非常有用。例如,如果你看到一本电子书漂亮的布局或样式,你可以用它来拆解电子书,分析它的源文件,并将你喜欢的功能移植到你的电子书项目中。这是一个非常有用的学习工具。
指示:
运行名为 KindleUnpack.pyw 的 Python 脚本,打开工作界面;
点击“未加密的Kindle电子书输入文件”后的【浏览...】按钮,选择电子书;
点击“输出目录”后的【浏览...】按钮,选择生成文件的输出目录;
其他选项一般可以默认保留,点击【开始】按钮,稍等片刻即可完成反汇编。
抓取网页生成电子书(如何使用网络爬虫?代理IP的优势是什么?)
网站优化 • 优采云 发表了文章 • 0 个评论 • 76 次浏览 • 2022-03-08 06:20
在大数据时代,信息采集是一项重要任务。如果信息采集单纯依靠人力,不仅效率低、麻烦,而且采集成本也会增加。网络爬虫可以代替人自动采集整理互联网上的数据信息,因其效率和速度而广受青睐。
现在很多网站都设置了反爬机制来拒绝网络爬虫,以保护自己的安全。如果要继续访问网站,需要使用爬虫IP。如果当前IP地址被屏蔽,您可以将其更改为新的IP地址,以保证爬虫的顺利运行。
与普通IP相比,爬虫代理IP的优势:
一、高效率、高质量的代理多为机房拨号VPS搭建,效率一般在90%以上,也就是提取的IP基本可以连上。
二是速度快。优质代理IP多为机房宽带。机房的宽带比较快。与普通代理相比,用户数量相对较少,因此速度更快。
三、高安全性,优质代理IP一般需要授权才能使用,要么绑定终端IP授权,要么使用账号密码验证,均支持代理IP,后台自动切换。
在爬取相关信息的过程中,如果之前的频率过高,会被网站的反爬机制检测到,反爬机制会通过你的IP识别网络爬虫。那么我们如何使用代理IP呢?
1、进入软件-提取代理ip
2、生成 API 链接 - 打开链接
3、查看IP地址-使用 查看全部
抓取网页生成电子书(如何使用网络爬虫?代理IP的优势是什么?)
在大数据时代,信息采集是一项重要任务。如果信息采集单纯依靠人力,不仅效率低、麻烦,而且采集成本也会增加。网络爬虫可以代替人自动采集整理互联网上的数据信息,因其效率和速度而广受青睐。
现在很多网站都设置了反爬机制来拒绝网络爬虫,以保护自己的安全。如果要继续访问网站,需要使用爬虫IP。如果当前IP地址被屏蔽,您可以将其更改为新的IP地址,以保证爬虫的顺利运行。
与普通IP相比,爬虫代理IP的优势:
一、高效率、高质量的代理多为机房拨号VPS搭建,效率一般在90%以上,也就是提取的IP基本可以连上。
二是速度快。优质代理IP多为机房宽带。机房的宽带比较快。与普通代理相比,用户数量相对较少,因此速度更快。
三、高安全性,优质代理IP一般需要授权才能使用,要么绑定终端IP授权,要么使用账号密码验证,均支持代理IP,后台自动切换。
在爬取相关信息的过程中,如果之前的频率过高,会被网站的反爬机制检测到,反爬机制会通过你的IP识别网络爬虫。那么我们如何使用代理IP呢?
1、进入软件-提取代理ip
2、生成 API 链接 - 打开链接
3、查看IP地址-使用
抓取网页生成电子书(.js的命令行工具/Git来制作精美的电子书工具)
网站优化 • 优采云 发表了文章 • 0 个评论 • 77 次浏览 • 2022-03-05 15:22
####GitBook 是一个基于 Node.js 的命令行工具,它使用 Github/Git 和 Markdown 创建精美的电子书,用于同步、共享和录制
####包格式:html、pdf(需要安装gitbook-pdf,效果不是很好)、epub、MOBI
现在只介绍html格式:
完整效果:
基本步骤:
以管理员身份安装
$ npm install gitbook-cli -g 或
$ cnpm install gitbook-cli -g
新建一个文件夹来存放这样的目录
README.md:简介
###Welcome
[外链图片转存失败(img-Fpt1DMpr-1563846800927)(/img/huge.jpeg)]
SUMMARY.md:生成目录组织
* [简介](README.md)
* [第一章](chapter1/README.md)
* [第一节](chapter1/node1/README.md)
* [第二章](chapter2/README.md)
* [结束](end/README.md)
在目录下运行$ gitbook init
如果运行下载依赖包,会报如下错误:
解决方法:你可以用管理员权限运行 $ gitbook -V
注意:这只是一种解决方案,可能还有其他方法
全部安装完成后,可以再次执行文件下的$ gitbook init
$tree:查看目录
$ gitbook serve: 监听页面,localhost:4000 或 $ gitbook serve -p 8080
$ gitbook build: 构建文件夹_book
注意:生成的html不能直接访问跳转,因为有json数据请求。可以被编译器读取,也可以通过搭建本地服务器来访问
构建到 github:
注意:构建到github,可以参考这个文章 查看全部
抓取网页生成电子书(.js的命令行工具/Git来制作精美的电子书工具)
####GitBook 是一个基于 Node.js 的命令行工具,它使用 Github/Git 和 Markdown 创建精美的电子书,用于同步、共享和录制
####包格式:html、pdf(需要安装gitbook-pdf,效果不是很好)、epub、MOBI
现在只介绍html格式:
完整效果:
基本步骤:
以管理员身份安装
$ npm install gitbook-cli -g 或
$ cnpm install gitbook-cli -g
新建一个文件夹来存放这样的目录
README.md:简介
###Welcome
[外链图片转存失败(img-Fpt1DMpr-1563846800927)(/img/huge.jpeg)]
SUMMARY.md:生成目录组织
* [简介](README.md)
* [第一章](chapter1/README.md)
* [第一节](chapter1/node1/README.md)
* [第二章](chapter2/README.md)
* [结束](end/README.md)
在目录下运行$ gitbook init
如果运行下载依赖包,会报如下错误:
解决方法:你可以用管理员权限运行 $ gitbook -V
注意:这只是一种解决方案,可能还有其他方法
全部安装完成后,可以再次执行文件下的$ gitbook init
$tree:查看目录
$ gitbook serve: 监听页面,localhost:4000 或 $ gitbook serve -p 8080
$ gitbook build: 构建文件夹_book
注意:生成的html不能直接访问跳转,因为有json数据请求。可以被编译器读取,也可以通过搭建本地服务器来访问
构建到 github:
注意:构建到github,可以参考这个文章
抓取网页生成电子书(国外网站➤5.超星网址)
网站优化 • 优采云 发表了文章 • 0 个评论 • 62 次浏览 • 2022-03-04 10:11
网址:
以“光催化”为例进行搜索,出现以下资源,包括书籍和专利,按更新时间排序。注册会员即可下载标准共享网络资源或微信。一般会员每天可以免费下载两次。VIP会员似乎可以无限下载。您可以根据情况决定是否花钱开通VIP。
➤5. 超级巨星
网址:
最常见的资源最容易被每个人忽视。大学一般都和超星合作,学术资源还是很多的。部分图书提供目录试读功能。很多时候,看目录就知道要不要继续看下去了。同时,您还可以使用馆际互借或文献传递功能,以及独秀和中国国家数字图书馆。
➤6. 上千个采集站
网址:
个人感觉本科生的教材比较多,研究生的书资源比较少。你可以试试看。无论如何,它是免费的。
➤7.电子书联盟
网址:
其他学科不清楚,但是化学材料的资源比较少,资源比较老,好在是免费的,可以无限下载。
国外网站
➤8. 图书馆创世纪
网址:
我觉得Library Genesis 是英文书籍的Sci-Hub。页面也很简单。找到资源后,点击资源栏最右侧镜像下的任意数字,会弹出一个新页面。单击顶部的“获取”以获取所需的资源。.
➤9. BookSC
网址:
在Bug Tribe点击英文电子书弹出BookSC页面,简洁干净,无广告污染。
➤10. HathiTrust 数字图书馆
网址:
HathiTrust 是一个学术和研究机构的合作计划,它汇集了来自世界各地的数字图书馆。找到资源后,直接点击,可以在线阅读,有的可以直接下载,点击左侧“下载整本书(PDF)”,会自行生成PDF文档;.
最后,我想强调的是,尽管近年来全球范围内关于出版物数字化和免费共享的呼声越来越高,但书籍的作者和编辑们在书籍上付出了很多努力。如果您有条件,请购买正版书籍并在线下载。资源仅供个人学习使用,不得用于商业用途! 查看全部
抓取网页生成电子书(国外网站➤5.超星网址)
网址:
以“光催化”为例进行搜索,出现以下资源,包括书籍和专利,按更新时间排序。注册会员即可下载标准共享网络资源或微信。一般会员每天可以免费下载两次。VIP会员似乎可以无限下载。您可以根据情况决定是否花钱开通VIP。
➤5. 超级巨星
网址:
最常见的资源最容易被每个人忽视。大学一般都和超星合作,学术资源还是很多的。部分图书提供目录试读功能。很多时候,看目录就知道要不要继续看下去了。同时,您还可以使用馆际互借或文献传递功能,以及独秀和中国国家数字图书馆。
➤6. 上千个采集站
网址:
个人感觉本科生的教材比较多,研究生的书资源比较少。你可以试试看。无论如何,它是免费的。
➤7.电子书联盟
网址:
其他学科不清楚,但是化学材料的资源比较少,资源比较老,好在是免费的,可以无限下载。
国外网站
➤8. 图书馆创世纪
网址:
我觉得Library Genesis 是英文书籍的Sci-Hub。页面也很简单。找到资源后,点击资源栏最右侧镜像下的任意数字,会弹出一个新页面。单击顶部的“获取”以获取所需的资源。.
➤9. BookSC
网址:
在Bug Tribe点击英文电子书弹出BookSC页面,简洁干净,无广告污染。
➤10. HathiTrust 数字图书馆
网址:
HathiTrust 是一个学术和研究机构的合作计划,它汇集了来自世界各地的数字图书馆。找到资源后,直接点击,可以在线阅读,有的可以直接下载,点击左侧“下载整本书(PDF)”,会自行生成PDF文档;.
最后,我想强调的是,尽管近年来全球范围内关于出版物数字化和免费共享的呼声越来越高,但书籍的作者和编辑们在书籍上付出了很多努力。如果您有条件,请购买正版书籍并在线下载。资源仅供个人学习使用,不得用于商业用途!
抓取网页生成电子书(calibre网站的在线帮助文档无疑是最基本的学习资源)
网站优化 • 优采云 发表了文章 • 0 个评论 • 82 次浏览 • 2022-03-01 12:00
calibre 可以抓取网页并生成各种格式的电子书。您可以通过输入一些数据使用GUI来实现简单的自动页面爬取。主要用于RSS。您还可以使用高级功能来实现更复杂的网页抓取。但是要爬取一些比较复杂的网页内容,还是需要自动写一个PYTHON程序,也就是写一个recipe。calibre网站的在线帮助文档无疑是最基本的学习资源。
学习资料主要有三本,分别是添加你喜欢的新闻网站介绍爬取网页的基本方法。食谱的 API 文档介绍了基本的食谱编写接口 (API),包括参数设置和方法调用。其实就是研究子类的接口,再研究一些菜谱例子。学完这些内容,应该就可以完成菜谱的编写了。当然,因为菜谱是用python写的,所以学习python是必不可少的。这里只想介绍一下我学习界面的心得:
写菜谱,学习设置界面参数是第一步。其实通过设置参数,可以爬取一些简单的网页,生成一定质量的电子书。
API中列出了所有的接口参数,一共48个,并给出了一些解释。更多细节可以看源码,源码前面部分,定义了这48个参数,有更详细的解释。这些参数有些是独立可设置的,有些是互斥的,设置一个,另一个不起作用。有些,如果设置为 true,需要实现一个方法。大致如下:
1、title =_('未知新闻来源')
对于生成的电子书的标题,通常是设置的。
2、描述=你''
使用几行文字来描述这个食谱爬取的内容。原本是对GUI界面下一系列菜谱作用的描述。
3、__author__= __appname__
这个食谱的作者
4、requires_version= (0,6,0)
执行此配方所需的最低版本 calibre,默认为 0.6.0
5、语言='und'
网页内容中使用的语言必须符合 ISO-639 编码,并且长度必须为 2-3 个字符。
6、max_articles_per_feed= 100
每个供稿的最大 文章 下载次数,在没有 文章 日期的情况下使用。默认为 100。文章oldest_article 参数通常在有日期时使用。
7、最旧的文章= 7.0
最早下载的 文章 是几天前。默认为 7 天,单位为天。如果 文章 有日期,则此参数有效。
8、递归= 0
网页中链接的递归级别数。默认情况下,不执行递归下载。
9、延迟=0
连续下载时,两次下载之间的时间间隔,以浮点数表示,单位为秒。
10、publication_type='未知'
发布类型,要爬取的内容类型,如报纸(newspaper)、杂志(magazine)、博客(blog)等。如果设置为None,则没有类型,该参数将作为元数据数据并写入 opf 文件。
11、simultaneous_downloads=5
同时下载的数量,如果服务器有限制,则设置为 1。delay`>0时,自动减为1,默认为5
12、超时= 120.0
从服务器下载的最大时间限制,超过这个时间就是超时。单位为秒,默认为 120 秒。
13、timefmt= ' [%a, %d %b%Y]
首页显示的日期格式,默认格式为日、月、年
14、feeds=无
用于下载的 feed,可以是 ``[url1,url2, ...]`` 或 ``[('title1', url1), ('title2', url2),. ..]`` 两种形式。
15、summary_length= 500
简短描述的最大字符数,默认为 500 个字符。
16、no_stylesheets=False
指示是否下载和使用原创网页的样式表。默认是下载使用。当设置为 True 时,原创样式表将不会被下载和使用。
17、remove_javascript=真
是否删除下载网页中的 javascript 脚本。默认是删除脚本。
18、needs_subscription=False
下载时是否登录,如果为True,GUI界面会询问登录用户名和密码。如果设置为“可选”,则登录名和密码是可选的。
19、center_navbar=真
生成的电子书的目录是否居中对齐。默认为居中对齐,False 为左对齐。
20、编码=无
网页的字符集编码不正确时要设置的字符集编码,通常是“latin1”和“cp1252”。如果设置为无,将自动检测编码。如果它是可调用的,则使用两个参数调用它,即配方对象和解码的源文件,并返回解码的源文件。
21、use_embedded_content=无
通常,我们会根据嵌入内容的长度猜测提要将嵌入所有 文章 内容。该参数具有三个值。当设置为 None 时,将进行猜测;当设置为 True 时,假定提要收录所有嵌入的 文章 内容;当设置为 False 时,提要不收录嵌入的 文章 内容。
22、articles_are_obfuscated=False
默认为False,文章更方便抓取。如果设置为True,则表示文章不易爬取,而较难爬取的文章页面将通过实现get_obfuscated_article方法进行处理。
23、reverse_article_order=False
当设置为 True 时,将反转提要中 文章 的排序。 查看全部
抓取网页生成电子书(calibre网站的在线帮助文档无疑是最基本的学习资源)
calibre 可以抓取网页并生成各种格式的电子书。您可以通过输入一些数据使用GUI来实现简单的自动页面爬取。主要用于RSS。您还可以使用高级功能来实现更复杂的网页抓取。但是要爬取一些比较复杂的网页内容,还是需要自动写一个PYTHON程序,也就是写一个recipe。calibre网站的在线帮助文档无疑是最基本的学习资源。
学习资料主要有三本,分别是添加你喜欢的新闻网站介绍爬取网页的基本方法。食谱的 API 文档介绍了基本的食谱编写接口 (API),包括参数设置和方法调用。其实就是研究子类的接口,再研究一些菜谱例子。学完这些内容,应该就可以完成菜谱的编写了。当然,因为菜谱是用python写的,所以学习python是必不可少的。这里只想介绍一下我学习界面的心得:
写菜谱,学习设置界面参数是第一步。其实通过设置参数,可以爬取一些简单的网页,生成一定质量的电子书。
API中列出了所有的接口参数,一共48个,并给出了一些解释。更多细节可以看源码,源码前面部分,定义了这48个参数,有更详细的解释。这些参数有些是独立可设置的,有些是互斥的,设置一个,另一个不起作用。有些,如果设置为 true,需要实现一个方法。大致如下:
1、title =_('未知新闻来源')
对于生成的电子书的标题,通常是设置的。
2、描述=你''
使用几行文字来描述这个食谱爬取的内容。原本是对GUI界面下一系列菜谱作用的描述。
3、__author__= __appname__
这个食谱的作者
4、requires_version= (0,6,0)
执行此配方所需的最低版本 calibre,默认为 0.6.0
5、语言='und'
网页内容中使用的语言必须符合 ISO-639 编码,并且长度必须为 2-3 个字符。
6、max_articles_per_feed= 100
每个供稿的最大 文章 下载次数,在没有 文章 日期的情况下使用。默认为 100。文章oldest_article 参数通常在有日期时使用。
7、最旧的文章= 7.0
最早下载的 文章 是几天前。默认为 7 天,单位为天。如果 文章 有日期,则此参数有效。
8、递归= 0
网页中链接的递归级别数。默认情况下,不执行递归下载。
9、延迟=0
连续下载时,两次下载之间的时间间隔,以浮点数表示,单位为秒。
10、publication_type='未知'
发布类型,要爬取的内容类型,如报纸(newspaper)、杂志(magazine)、博客(blog)等。如果设置为None,则没有类型,该参数将作为元数据数据并写入 opf 文件。
11、simultaneous_downloads=5
同时下载的数量,如果服务器有限制,则设置为 1。delay`>0时,自动减为1,默认为5
12、超时= 120.0
从服务器下载的最大时间限制,超过这个时间就是超时。单位为秒,默认为 120 秒。
13、timefmt= ' [%a, %d %b%Y]
首页显示的日期格式,默认格式为日、月、年
14、feeds=无
用于下载的 feed,可以是 ``[url1,url2, ...]`` 或 ``[('title1', url1), ('title2', url2),. ..]`` 两种形式。
15、summary_length= 500
简短描述的最大字符数,默认为 500 个字符。
16、no_stylesheets=False
指示是否下载和使用原创网页的样式表。默认是下载使用。当设置为 True 时,原创样式表将不会被下载和使用。
17、remove_javascript=真
是否删除下载网页中的 javascript 脚本。默认是删除脚本。
18、needs_subscription=False
下载时是否登录,如果为True,GUI界面会询问登录用户名和密码。如果设置为“可选”,则登录名和密码是可选的。
19、center_navbar=真
生成的电子书的目录是否居中对齐。默认为居中对齐,False 为左对齐。
20、编码=无
网页的字符集编码不正确时要设置的字符集编码,通常是“latin1”和“cp1252”。如果设置为无,将自动检测编码。如果它是可调用的,则使用两个参数调用它,即配方对象和解码的源文件,并返回解码的源文件。
21、use_embedded_content=无
通常,我们会根据嵌入内容的长度猜测提要将嵌入所有 文章 内容。该参数具有三个值。当设置为 None 时,将进行猜测;当设置为 True 时,假定提要收录所有嵌入的 文章 内容;当设置为 False 时,提要不收录嵌入的 文章 内容。
22、articles_are_obfuscated=False
默认为False,文章更方便抓取。如果设置为True,则表示文章不易爬取,而较难爬取的文章页面将通过实现get_obfuscated_article方法进行处理。
23、reverse_article_order=False
当设置为 True 时,将反转提要中 文章 的排序。
抓取网页生成电子书(微信公众号【出书啦】效果纸质书效果代码思路获取)
网站优化 • 优采云 发表了文章 • 0 个评论 • 432 次浏览 • 2022-03-01 11:23
[目录]
为您的个人微信朋友圈数据生成电子书!介绍
朋友圈留着你的数据,留着美好的回忆,记录着我们的每一点成长。从某种意义上说,发朋友圈就是记录生活,感受生活,见证每个人每一步的成长。
如此珍贵的记忆,何不保存呢?只需一杯咖啡时间,即可一键打印朋友圈。可以是纸质书也可以是电子书,可以长期保存,比拍照好,有时间足迹记忆。
现在,您可以选择打印电子书或纸质书。如果印刷纸质书,可以找第三方机构购买;如果你打印一本电子书,我们可以自己生成,这样可以节省很多钱。
部分截图
在开始编写代码思路之前,我们先来看看最终生成的效果。
电子书效果
纸书效果
获取微信书籍链接的代码思路
看完效果图,开始进入代码编写部分。首先,由于朋友圈数据的隐私性较高,如果手动获取,需要使用root安卓手机解密或解密PC机备份的聊天记录数据库,很难大多数人。所以我们的想法是根据现有数据打印电子书。
目前已经有第三方服务支持导出朋友圈数据,微信公众号【出版图书】提供了这样的服务。这种服务很有可能是基于安卓模拟器自动化的,我就不赘述了。
先关注公众号,然后开始制作微信书籍。这个过程将你添加为编辑的朋友,然后你向他打开朋友圈。过一会采集,小编会给你发一个专属链接,这个链接里的内容就是你的Personal Moments。
生成电子书
有了这个链接,我们开始打印页面的内容。
整个过程基于 selenium 自动化。如果你知道 selenium,那么这个过程其实很简单。
首先,为了引导用户输入微信图书链接,我们采用在浏览器中弹出输入文本框的形式,让用户输入数据。
首先在selenium中执行js代码,完成js代码中弹出输入文本框的功能。
进入微信图书链接
# 以网页输入文本框形式提示用户输入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 = """
// 弹出文本输入框,输入微信书的完整链接地址
target_url = prompt("请输入微信书的完整链接地址","https://");
// 动态创建一个input元素
input_target_url = document.createElement("input");
// 为其设置id,以便在程序中能够获取到它的值
input_target_url.id = "id_input_target_url";
// 插入到当前网页中
document.getElementsByTagName("body")[0].appendChild(input_target_url);
// 设置不可见
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代码的具体步骤为:弹出一个输入文本框,创建一个动态元素,随机命名元素的id,将动态元素插入到当前页面,这样就可以通过python 内容中的硒。
接下来,检测弹框是否存在于 selenium 中。如果不存在,则获取弹框的内容并执行下一步。流程代码如下:
# 执行以上js脚本
driver.execute_script(js)
# 判断弹出框是否存在
while(True):
try:
# 检测是否存在弹出框
alert = driver.switch_to.alert
time.sleep(0.5)
except:
# 如果抛异常,说明当前页面不存在弹出框,即用户点击了取消或者确定
break
# 获取用户输入的链接地址
target_url = WebDriverWait(driver, 20).until(EC.presence_of_element_located((By.ID, random_id)))
value = target_url.get_attribute('value')
# 删除空格
value = value.strip()
此时value的值就是弹出框返回的内容。(你可能会问,直接加value=微信书链接可以吗?其实>_header确实是可以的,通过selenium隐藏这个元素的代码如下:
# 隐藏导航栏,防止影响截图效果
js = 'document.querySelector("body > header").style.display="none";'
driver.execute_script(js)
我们也发现当前页面显示的数据只收录某月的朋友圈数据,而不是所有的朋友圈数据,那么如何显示所有的朋友圈数据呢?通过分析可以看出,当点击“下个月”按钮时,会显示一个新的元素,而原来的元素会被隐藏,隐藏的元素就是上个月的数据。所以我们只需要遍历到上个月,显示之前的所有元素,然后打印出来。那么,如何判断是上个月呢?我们也可以通过分析得知,当不是上个月时,“下个月”的类名是下个月,当是上个月时,“下个月”的类名是下个月禁用,所以我们可以检测它的类名,就知道是不是在上个月了。
# 判断当下一月控件的class name 是否为next-month disable,如果是,则说明翻到最后一月了
page_source = driver.page_source
# 每一个element代表每一页,将每一页中style的display属性改成block,即可见状态
for index, element in enumerate(element_left_list):
# ..在xpath中表示上一级的元素,也就是父元素
parent_element = element.find_element_by_xpath('..')
# 获取这个父元素的完整id
parent_element_id = parent_element.get_attribute('id')
# 将该父元素更改为可见状态
js = 'document.getElementById("{}").style.display="block";'.format(parent_element_id)
driver.execute_script(js)
但是,这种方式会出现问题。即使我们打印成功,我们也不难保证页面上的所有元素都加载完毕,所以有些元素打印后可能无法显示,导致不太好看。因此,需要判断加载何时结束。
通过分析我们知道,网页元素未加载时,会出现“加载中”的提示,而网页元素加载时,该元素是隐藏的。因此,我们可以通过判断元素是否隐藏来知道当前页面元素是否被加载。这部分代码如下:
# 等待当前页面所有数据加载完毕,正常情况下数据加载完毕后,这个‘加载中’元素会隐藏起来
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
但是我们也发现,在等待页面元素及时加载后,还是有一些图片没有显示出来。
这很令人困惑,为什么?通过分析我们还了解到,当这些图片处于加载状态时,类名是lazy-img。从字面意思上,我们大概可以猜到它的意思是延迟加载,也就是用户在那里滑动页面,直到加载完毕。,以节省服务器压力。
所以我们可以通过一个名为lazy-img的类滑动到每个元素来加载它。所以?一个合适的方法是通过js定位元素,直到所有类名为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,所以退出循环
break
其中document.getElementsByClassName("lazy-img")[0]是指document.getElementsByClassName("lazy-img")的第一个元素,scrollIntoView()是指滚动到该元素的位置
打印电子书
通过以上步骤,我们成功隐藏了一些可能影响外观的元素,同时也显示了所有需要的元素。接下来,是时候打印零件了。浏览器打印功能可以直接通过js代码调用,而且我们之前已经设置为自动打印pdf格式,所以会自动打印为pdf。但它打印到哪里?这里需要设置浏览器的默认存储位置,保存位置为当前目录。此步骤的代码如下:
# 默认下载、打印保存路径
'savefile.default_directory': os.getcwd()
# 调用chrome打印功能
driver.execute_script('window.print();')
打印后设置退出浏览器 driver.quit()
经测试,电子书为超清版,大小约为16MB,质量还不错。
如何运行
# 跳转到当前目录
cd 目录名
# 先卸载依赖库
pip uninstall -y -r requirement.txt
# 再重新安装依赖库
pip install -r requirement.txt
# 开始运行
python main.py
补充
完整版源码存放在github上,需要的可以下载
项目持续更新中,欢迎您star此项目 查看全部
抓取网页生成电子书(微信公众号【出书啦】效果纸质书效果代码思路获取)
[目录]
为您的个人微信朋友圈数据生成电子书!介绍
朋友圈留着你的数据,留着美好的回忆,记录着我们的每一点成长。从某种意义上说,发朋友圈就是记录生活,感受生活,见证每个人每一步的成长。
如此珍贵的记忆,何不保存呢?只需一杯咖啡时间,即可一键打印朋友圈。可以是纸质书也可以是电子书,可以长期保存,比拍照好,有时间足迹记忆。
现在,您可以选择打印电子书或纸质书。如果印刷纸质书,可以找第三方机构购买;如果你打印一本电子书,我们可以自己生成,这样可以节省很多钱。
部分截图
在开始编写代码思路之前,我们先来看看最终生成的效果。
电子书效果
纸书效果
获取微信书籍链接的代码思路
看完效果图,开始进入代码编写部分。首先,由于朋友圈数据的隐私性较高,如果手动获取,需要使用root安卓手机解密或解密PC机备份的聊天记录数据库,很难大多数人。所以我们的想法是根据现有数据打印电子书。
目前已经有第三方服务支持导出朋友圈数据,微信公众号【出版图书】提供了这样的服务。这种服务很有可能是基于安卓模拟器自动化的,我就不赘述了。
先关注公众号,然后开始制作微信书籍。这个过程将你添加为编辑的朋友,然后你向他打开朋友圈。过一会采集,小编会给你发一个专属链接,这个链接里的内容就是你的Personal Moments。
生成电子书
有了这个链接,我们开始打印页面的内容。
整个过程基于 selenium 自动化。如果你知道 selenium,那么这个过程其实很简单。
首先,为了引导用户输入微信图书链接,我们采用在浏览器中弹出输入文本框的形式,让用户输入数据。
首先在selenium中执行js代码,完成js代码中弹出输入文本框的功能。
进入微信图书链接
# 以网页输入文本框形式提示用户输入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 = """
// 弹出文本输入框,输入微信书的完整链接地址
target_url = prompt("请输入微信书的完整链接地址","https://");
// 动态创建一个input元素
input_target_url = document.createElement("input");
// 为其设置id,以便在程序中能够获取到它的值
input_target_url.id = "id_input_target_url";
// 插入到当前网页中
document.getElementsByTagName("body")[0].appendChild(input_target_url);
// 设置不可见
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代码的具体步骤为:弹出一个输入文本框,创建一个动态元素,随机命名元素的id,将动态元素插入到当前页面,这样就可以通过python 内容中的硒。
接下来,检测弹框是否存在于 selenium 中。如果不存在,则获取弹框的内容并执行下一步。流程代码如下:
# 执行以上js脚本
driver.execute_script(js)
# 判断弹出框是否存在
while(True):
try:
# 检测是否存在弹出框
alert = driver.switch_to.alert
time.sleep(0.5)
except:
# 如果抛异常,说明当前页面不存在弹出框,即用户点击了取消或者确定
break
# 获取用户输入的链接地址
target_url = WebDriverWait(driver, 20).until(EC.presence_of_element_located((By.ID, random_id)))
value = target_url.get_attribute('value')
# 删除空格
value = value.strip()
此时value的值就是弹出框返回的内容。(你可能会问,直接加value=微信书链接可以吗?其实>_header确实是可以的,通过selenium隐藏这个元素的代码如下:
# 隐藏导航栏,防止影响截图效果
js = 'document.querySelector("body > header").style.display="none";'
driver.execute_script(js)
我们也发现当前页面显示的数据只收录某月的朋友圈数据,而不是所有的朋友圈数据,那么如何显示所有的朋友圈数据呢?通过分析可以看出,当点击“下个月”按钮时,会显示一个新的元素,而原来的元素会被隐藏,隐藏的元素就是上个月的数据。所以我们只需要遍历到上个月,显示之前的所有元素,然后打印出来。那么,如何判断是上个月呢?我们也可以通过分析得知,当不是上个月时,“下个月”的类名是下个月,当是上个月时,“下个月”的类名是下个月禁用,所以我们可以检测它的类名,就知道是不是在上个月了。
# 判断当下一月控件的class name 是否为next-month disable,如果是,则说明翻到最后一月了
page_source = driver.page_source
# 每一个element代表每一页,将每一页中style的display属性改成block,即可见状态
for index, element in enumerate(element_left_list):
# ..在xpath中表示上一级的元素,也就是父元素
parent_element = element.find_element_by_xpath('..')
# 获取这个父元素的完整id
parent_element_id = parent_element.get_attribute('id')
# 将该父元素更改为可见状态
js = 'document.getElementById("{}").style.display="block";'.format(parent_element_id)
driver.execute_script(js)
但是,这种方式会出现问题。即使我们打印成功,我们也不难保证页面上的所有元素都加载完毕,所以有些元素打印后可能无法显示,导致不太好看。因此,需要判断加载何时结束。
通过分析我们知道,网页元素未加载时,会出现“加载中”的提示,而网页元素加载时,该元素是隐藏的。因此,我们可以通过判断元素是否隐藏来知道当前页面元素是否被加载。这部分代码如下:
# 等待当前页面所有数据加载完毕,正常情况下数据加载完毕后,这个‘加载中’元素会隐藏起来
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
但是我们也发现,在等待页面元素及时加载后,还是有一些图片没有显示出来。
这很令人困惑,为什么?通过分析我们还了解到,当这些图片处于加载状态时,类名是lazy-img。从字面意思上,我们大概可以猜到它的意思是延迟加载,也就是用户在那里滑动页面,直到加载完毕。,以节省服务器压力。
所以我们可以通过一个名为lazy-img的类滑动到每个元素来加载它。所以?一个合适的方法是通过js定位元素,直到所有类名为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,所以退出循环
break
其中document.getElementsByClassName("lazy-img")[0]是指document.getElementsByClassName("lazy-img")的第一个元素,scrollIntoView()是指滚动到该元素的位置
打印电子书
通过以上步骤,我们成功隐藏了一些可能影响外观的元素,同时也显示了所有需要的元素。接下来,是时候打印零件了。浏览器打印功能可以直接通过js代码调用,而且我们之前已经设置为自动打印pdf格式,所以会自动打印为pdf。但它打印到哪里?这里需要设置浏览器的默认存储位置,保存位置为当前目录。此步骤的代码如下:
# 默认下载、打印保存路径
'savefile.default_directory': os.getcwd()
# 调用chrome打印功能
driver.execute_script('window.print();')
打印后设置退出浏览器 driver.quit()
经测试,电子书为超清版,大小约为16MB,质量还不错。
如何运行
# 跳转到当前目录
cd 目录名
# 先卸载依赖库
pip uninstall -y -r requirement.txt
# 再重新安装依赖库
pip install -r requirement.txt
# 开始运行
python main.py
补充
完整版源码存放在github上,需要的可以下载
项目持续更新中,欢迎您star此项目
抓取网页生成电子书( Requests-html快速指南发送一个GET请求:Requests(图) )
网站优化 • 优采云 发表了文章 • 0 个评论 • 74 次浏览 • 2022-02-27 15:10
Requests-html快速指南发送一个GET请求:Requests(图)
)
前两天无意中发现了一个可以免费下载电子书的网站,引起了我的采集瘾,迫不及待地想下载这些书。碰巧不久前 requests 的作者 kennethreitz 有一个新的库 requests-html,它不仅可以请求网页,还可以解析 HTML 文档。事不宜迟,让我们开始吧。
安装
安装很简单,只需执行:
pip install requests-html
而已。
分析页面结构
通过查看浏览器中的元素,可以发现这本电子书网站是用WordPress构建的。主页列表元素非常简单和规则。
所以我们可以通过查找 .entry-title > a 得到所有图书详情页的链接,然后我们到详情页找到下载链接,如下图
可以发现.download-links > a中的链接就是该书的下载链接。回到列表页面,可以发现站点有700多个页面,所以我们可以循环列表获取所有的下载链接。
Requests-html 快速指南
发送 GET 请求:
from requests_html import HTMLSession
session = HTMLSession()
r = session.get('https://python.org/')
Requests-html 的方便之处在于它解析 html 就像使用 jQuery 一样容易,例如:
# 获取页面的所有链接可以这样写:
r.html.links
# 会返回 {'//docs.python.org/3/tutorial/', '/about/apps/'}
# 获取页面的所有的绝对链接:
r.html.absolute_links
# 会返回 {'https://github.com/python/pyth ... 39%3B, 'https://docs.python.org/3/tutorial/'}
# 通过 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学习资料可以加群: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"
]
# 获取当前列表页所有图书链接
def get_list(url):
response = session.get(url)
all_link = response.html.find('.entry-title a') # 获取页面所有图书详情链接
for link in all_link:
getBookUrl(link.attrs['href'])
# 获取图书下载链接
def getBookUrl(url):
response = session.get(url)
l = response.html.find('.download-links a', first=True)
if l is not None: # 运行后发现有的个别页面没有下载链接,这里加个判断
link = l.attrs['href'];
download(link)
#下载图书
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 # 文件路径写死了,运行时当前目录必须有名 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')
# 如果文件大小不存在,则直接写入返回的文本
if total_length is None:
f.write(response.content)
else:
# 下载进度条
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)) ) # 打印进度条
sys.stdout.flush()
print(filename + '下载完成!')
if __name__ == '__main__':
#从这运行,应为知道列表总数,所以偷个懒直接开始循环
for x in range(1,756):
print('当前页面: '+ str(x))
get_list(list_url+str(x))
运行结果:
查看全部
抓取网页生成电子书(
Requests-html快速指南发送一个GET请求:Requests(图)
)
前两天无意中发现了一个可以免费下载电子书的网站,引起了我的采集瘾,迫不及待地想下载这些书。碰巧不久前 requests 的作者 kennethreitz 有一个新的库 requests-html,它不仅可以请求网页,还可以解析 HTML 文档。事不宜迟,让我们开始吧。
安装
安装很简单,只需执行:
pip install requests-html
而已。
分析页面结构
通过查看浏览器中的元素,可以发现这本电子书网站是用WordPress构建的。主页列表元素非常简单和规则。
所以我们可以通过查找 .entry-title > a 得到所有图书详情页的链接,然后我们到详情页找到下载链接,如下图
可以发现.download-links > a中的链接就是该书的下载链接。回到列表页面,可以发现站点有700多个页面,所以我们可以循环列表获取所有的下载链接。
Requests-html 快速指南
发送 GET 请求:
from requests_html import HTMLSession
session = HTMLSession()
r = session.get('https://python.org/')
Requests-html 的方便之处在于它解析 html 就像使用 jQuery 一样容易,例如:
# 获取页面的所有链接可以这样写:
r.html.links
# 会返回 {'//docs.python.org/3/tutorial/', '/about/apps/'}
# 获取页面的所有的绝对链接:
r.html.absolute_links
# 会返回 {'https://github.com/python/pyth ... 39%3B, 'https://docs.python.org/3/tutorial/'}
# 通过 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学习资料可以加群: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"
]
# 获取当前列表页所有图书链接
def get_list(url):
response = session.get(url)
all_link = response.html.find('.entry-title a') # 获取页面所有图书详情链接
for link in all_link:
getBookUrl(link.attrs['href'])
# 获取图书下载链接
def getBookUrl(url):
response = session.get(url)
l = response.html.find('.download-links a', first=True)
if l is not None: # 运行后发现有的个别页面没有下载链接,这里加个判断
link = l.attrs['href'];
download(link)
#下载图书
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 # 文件路径写死了,运行时当前目录必须有名 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')
# 如果文件大小不存在,则直接写入返回的文本
if total_length is None:
f.write(response.content)
else:
# 下载进度条
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)) ) # 打印进度条
sys.stdout.flush()
print(filename + '下载完成!')
if __name__ == '__main__':
#从这运行,应为知道列表总数,所以偷个懒直接开始循环
for x in range(1,756):
print('当前页面: '+ str(x))
get_list(list_url+str(x))
运行结果:
抓取网页生成电子书(软件介绍王子网页转换小精灵(图)的软件特色)
网站优化 • 优采云 发表了文章 • 0 个评论 • 89 次浏览 • 2022-02-27 07:16
软件介绍
王子网页转换精灵是一款简单易用的网页转换小程序,支持网页制作、网页批量转换、电子书制作、简繁体转换、文件格式转换、文件分割合并、文件加密和解密等功能。将网页内容转换为文本或快速将文本转换为网页可以快速完成。
软件功能
1、 将文本文件批量转换为web文件(txt等转htm)
2、网页文件批量转成文本文件(htm等转成txt)
3、Word、EXCEL、POWERPOINT文档批量转换成web文件(doc xls ppt等转换成htm)
4、图片文件、FLASH、mp3、wmv文件批量转换为网页(jpg gif swf mp3 wmv等--> htm)
5、支持WORD(doc文件)一步生成电子书(梦寐以求的功能吧?哈哈……)
6、可以作为文本文件使用的电子书创作工具软件。(并选择 Web 模板或 CSS)
7、支持一步将图片文件编译成电子相册。(并且可以选择电子相册模板或CSS)
8、支持mht文件一键生成电子书
9、网页颜色选择功能。可以捕获屏幕任何可见部分的颜色代码;目前以三种格式捕获颜色
10、网页批量压缩功能。选择性或批量压缩网页文件
11、批量加密文件,也可以解密文件。
12、批量拆分文件,也可以合并文件。
13、文档合并功能。支持多种文件格式合并为五种格式之一,HTML、TXT、RTF、DOC、XML
14、支持HTML网页文件一键生成电子书。
15、支持简繁体中文转换(GB2312->BIG5 BIG5->GB2312)
16、网页特效采集与管理功能。并且可以方便的批量插入网页
17、反编译 CHM 电子书。
18、在线搜索功能。集成强大的中文搜索引擎---百度搜索
19、已经提供了几个 CSS 和模板。你也可以自己写。让过渡更随意
20、提供从html文件生成电子书的两个选项
21、支持ppt(powerpoint)文件一步生成电子书
22、支持xls(excel)文件一键生成电子书
23、文字和网页文字的批量替换
24、HTML TXT RTF DOC XML等格式可以任意相互转换
25、除了转换上面列出的文件类型,还可以自己添加转换类型
安装方式
1、先等待王子网页转换精灵下载完成
2、使用压缩软件解压文件
3、双击运行“PrinceSetup_nh.exe”开始安装
4、安装完成后可以使用自定义安装目录 查看全部
抓取网页生成电子书(软件介绍王子网页转换小精灵(图)的软件特色)
软件介绍
王子网页转换精灵是一款简单易用的网页转换小程序,支持网页制作、网页批量转换、电子书制作、简繁体转换、文件格式转换、文件分割合并、文件加密和解密等功能。将网页内容转换为文本或快速将文本转换为网页可以快速完成。

软件功能
1、 将文本文件批量转换为web文件(txt等转htm)
2、网页文件批量转成文本文件(htm等转成txt)
3、Word、EXCEL、POWERPOINT文档批量转换成web文件(doc xls ppt等转换成htm)
4、图片文件、FLASH、mp3、wmv文件批量转换为网页(jpg gif swf mp3 wmv等--> htm)
5、支持WORD(doc文件)一步生成电子书(梦寐以求的功能吧?哈哈……)
6、可以作为文本文件使用的电子书创作工具软件。(并选择 Web 模板或 CSS)
7、支持一步将图片文件编译成电子相册。(并且可以选择电子相册模板或CSS)
8、支持mht文件一键生成电子书
9、网页颜色选择功能。可以捕获屏幕任何可见部分的颜色代码;目前以三种格式捕获颜色
10、网页批量压缩功能。选择性或批量压缩网页文件
11、批量加密文件,也可以解密文件。
12、批量拆分文件,也可以合并文件。
13、文档合并功能。支持多种文件格式合并为五种格式之一,HTML、TXT、RTF、DOC、XML
14、支持HTML网页文件一键生成电子书。
15、支持简繁体中文转换(GB2312->BIG5 BIG5->GB2312)
16、网页特效采集与管理功能。并且可以方便的批量插入网页
17、反编译 CHM 电子书。
18、在线搜索功能。集成强大的中文搜索引擎---百度搜索
19、已经提供了几个 CSS 和模板。你也可以自己写。让过渡更随意
20、提供从html文件生成电子书的两个选项
21、支持ppt(powerpoint)文件一步生成电子书
22、支持xls(excel)文件一键生成电子书
23、文字和网页文字的批量替换
24、HTML TXT RTF DOC XML等格式可以任意相互转换
25、除了转换上面列出的文件类型,还可以自己添加转换类型
安装方式
1、先等待王子网页转换精灵下载完成
2、使用压缩软件解压文件
3、双击运行“PrinceSetup_nh.exe”开始安装
4、安装完成后可以使用自定义安装目录
抓取网页生成电子书(这是最好转换为PDF后的效果怎么样?怎么用?)
网站优化 • 优采云 发表了文章 • 0 个评论 • 69 次浏览 • 2022-02-26 18:22
大路最近遇到一个问题。有些网页上的数据需要离线保存备份,但是各种剪辑工具并不能完全抓取完整的网页,所以不知道能不能转成PDF保存。
注意,这是在大陆搜索了大约7到8个在线工具后,选择了一个各方面都满足需求、使用频率低、用量少的工具。但绝对不是最好的,如果你知道更好的工具,请留言告诉我
至于为什么要保存到本地阅读,其实我是想用记事本保存的,但是效果很差,几乎看不懂。本地存储是因为这几年内容太多变成404了。原来的网络采集夹已成为孤岛。除了采集夹本身,大部分链接都死了,很尴尬。.
不过大路转成PDF后还是把PDF放在记事本里,毕竟方便
Pdf人群
Pdfcrowd 是一个在线文档转换工具,支持将网页转换为PDF和图片,可以是URL、HTML文件或HTML代码
可以使用了,使用默认配置,直接输入网址,点击转换即可,可以直接下载,也可以在线阅读,非常方便。
但是转换后的PDF会在每一页的末尾加一个小尾巴,对个人使用是无害的,商业应用请慎重。
例子
下面是使用 Pdfcrowd 转换为 PDF 的效果。注意中间的黑框是PDF分页,不是bug
有相同需求的同学可以试试,Pdfcrowd网站:
另外,本文的重点是,如果您有其他建议,请尽快发送过来。 查看全部
抓取网页生成电子书(这是最好转换为PDF后的效果怎么样?怎么用?)
大路最近遇到一个问题。有些网页上的数据需要离线保存备份,但是各种剪辑工具并不能完全抓取完整的网页,所以不知道能不能转成PDF保存。
注意,这是在大陆搜索了大约7到8个在线工具后,选择了一个各方面都满足需求、使用频率低、用量少的工具。但绝对不是最好的,如果你知道更好的工具,请留言告诉我
至于为什么要保存到本地阅读,其实我是想用记事本保存的,但是效果很差,几乎看不懂。本地存储是因为这几年内容太多变成404了。原来的网络采集夹已成为孤岛。除了采集夹本身,大部分链接都死了,很尴尬。.
不过大路转成PDF后还是把PDF放在记事本里,毕竟方便
Pdf人群
Pdfcrowd 是一个在线文档转换工具,支持将网页转换为PDF和图片,可以是URL、HTML文件或HTML代码
可以使用了,使用默认配置,直接输入网址,点击转换即可,可以直接下载,也可以在线阅读,非常方便。
但是转换后的PDF会在每一页的末尾加一个小尾巴,对个人使用是无害的,商业应用请慎重。
例子
下面是使用 Pdfcrowd 转换为 PDF 的效果。注意中间的黑框是PDF分页,不是bug
有相同需求的同学可以试试,Pdfcrowd网站:
另外,本文的重点是,如果您有其他建议,请尽快发送过来。
抓取网页生成电子书(Python解释器及丰富的标准库模块源码或机器码源码)
网站优化 • 优采云 发表了文章 • 0 个评论 • 72 次浏览 • 2022-02-24 16:07
Python官方文档(中文版)
Python 是一种易于学习但功能强大的编程语言。它提供了高效的高级数据结构,以及简单高效的面向对象编程。Python 优雅的语法和动态类型,以及解释语言的性质,使其成为大多数平台上脚本和快速应用程序开发的理想语言。Python解释器及其丰富的标准库以源代码或机器码的形式提供,适用于各大系统平台的版本可从Python官网免费获取,并可免费分发。这个 网站 还收录发布页面或许多免费第三方 Python 模块、程序和工具的链接,以及其他文档。Python 解释器易于扩展,并且可以使用 C 或 C++(或其他可以从 C 调用的语言)扩展新的函数和数据类型。Python 也可以用作可定制软件中的扩展语言。本教程对 Python 语言和系统的基本概念和功能进行了非正式的介绍。最好有一个 Python 解释器准备好边看边练习,但是所有的例子都是独立的,所以本教程也可以离线阅读。有关标准对象和模块,请参阅 Python 标准库。Python 语言参考提供了更正式的语言参考。想写 C 或 C++ 扩展的可以参考扩展和嵌入 Python 解释器和 Python/C API 参考手册。也有不少书籍深入解释了 Python。本教程并未完全涵盖所有功能,甚至可能不会涵盖常用功能。本教程仅涵盖 Python 最显着的特性,并将让您体验该语言的风格特性。完成本教程后,您将能够阅读和编写 Python 模块和程序,并开始学习更多 Python 库模块,详情请参阅 Python 标准库。
立即下载 查看全部
抓取网页生成电子书(Python解释器及丰富的标准库模块源码或机器码源码)
Python官方文档(中文版)
Python 是一种易于学习但功能强大的编程语言。它提供了高效的高级数据结构,以及简单高效的面向对象编程。Python 优雅的语法和动态类型,以及解释语言的性质,使其成为大多数平台上脚本和快速应用程序开发的理想语言。Python解释器及其丰富的标准库以源代码或机器码的形式提供,适用于各大系统平台的版本可从Python官网免费获取,并可免费分发。这个 网站 还收录发布页面或许多免费第三方 Python 模块、程序和工具的链接,以及其他文档。Python 解释器易于扩展,并且可以使用 C 或 C++(或其他可以从 C 调用的语言)扩展新的函数和数据类型。Python 也可以用作可定制软件中的扩展语言。本教程对 Python 语言和系统的基本概念和功能进行了非正式的介绍。最好有一个 Python 解释器准备好边看边练习,但是所有的例子都是独立的,所以本教程也可以离线阅读。有关标准对象和模块,请参阅 Python 标准库。Python 语言参考提供了更正式的语言参考。想写 C 或 C++ 扩展的可以参考扩展和嵌入 Python 解释器和 Python/C API 参考手册。也有不少书籍深入解释了 Python。本教程并未完全涵盖所有功能,甚至可能不会涵盖常用功能。本教程仅涵盖 Python 最显着的特性,并将让您体验该语言的风格特性。完成本教程后,您将能够阅读和编写 Python 模块和程序,并开始学习更多 Python 库模块,详情请参阅 Python 标准库。
立即下载
抓取网页生成电子书(从里抓取书籍列表的书籍信息和每本书对应的ISBN码)
网站优化 • 优采云 发表了文章 • 0 个评论 • 185 次浏览 • 2022-03-16 10:16
本文首先抓取图书列表的图书信息和每本书对应的ISBN码。
一、分析需求和网站结构
这个网站的结构很简单,分页+书单+书详情页。
获取图书的详细信息和ISBN码,我们需要遍历所有页码,进入图书列表,然后从图书列表中进入每本书的详细信息页面,这样就可以抓取到详细信息和ISBN代码。
二、 从分页开始遍历书单的每一页
通过查看分页功能的HTML代码,可以通过class="current"定位到当前页码所在的span标签。这个span标签的下一个兄弟a标签是指向下一页的链接所在的标签。
通过比较最后一页的span可以发现,在最后一页中,class="current"找到的span标签没有下一个兄弟a标签。所以我们可以用它来判断我们是否已经到了最后一页。代码显示如下:
# 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
三、从书单中找到详细页面的链接
点击书单中的书名或封面图进入详情,然后选择书名和封面图之一,在此处选择书名。
我们可以通过查找class="entry-title"来定位书名所在的h2标签,然后通过这个标签的a属性获取链接所在的a标签,再通过字符串获取链接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
四、从图书详情页面获取书名和 ISBN 码
通过查看图书详情页的HTML代码,我们可以通过查找class="single-title"获取书名,定位到书名所在的h1标签,然后定位到"Isbn:"所在的dt标签通过查找 text="Isbn:" 进行定位,该标签的下一个兄弟节点就是该书的 ISBN 码所在的标签,通过该标签的字符串属性可以获取 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)
运行结果
六、将结果写入文件以供进一步处理
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 爬虫:从刮书信息和刮价格 (1): Basics Beautiful Soup
我们正处于大数据时代,欢迎对数据处理感兴趣的朋友查看另一个系列随笔:Using Python for Data Analysis Basics 系列随笔小结
接下来的作文是网站根据得到的ISBN码得到每本书对应的价格,通过数据分析的知识对得到的数据进行处理,最后输出成csv文件。感兴趣的朋友欢迎关注本博客,也欢迎留言讨论。 查看全部
抓取网页生成电子书(从里抓取书籍列表的书籍信息和每本书对应的ISBN码)
本文首先抓取图书列表的图书信息和每本书对应的ISBN码。
一、分析需求和网站结构
这个网站的结构很简单,分页+书单+书详情页。
获取图书的详细信息和ISBN码,我们需要遍历所有页码,进入图书列表,然后从图书列表中进入每本书的详细信息页面,这样就可以抓取到详细信息和ISBN代码。
二、 从分页开始遍历书单的每一页

通过查看分页功能的HTML代码,可以通过class="current"定位到当前页码所在的span标签。这个span标签的下一个兄弟a标签是指向下一页的链接所在的标签。
通过比较最后一页的span可以发现,在最后一页中,class="current"找到的span标签没有下一个兄弟a标签。所以我们可以用它来判断我们是否已经到了最后一页。代码显示如下:
# 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
三、从书单中找到详细页面的链接
点击书单中的书名或封面图进入详情,然后选择书名和封面图之一,在此处选择书名。

我们可以通过查找class="entry-title"来定位书名所在的h2标签,然后通过这个标签的a属性获取链接所在的a标签,再通过字符串获取链接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
四、从图书详情页面获取书名和 ISBN 码

通过查看图书详情页的HTML代码,我们可以通过查找class="single-title"获取书名,定位到书名所在的h1标签,然后定位到"Isbn:"所在的dt标签通过查找 text="Isbn:" 进行定位,该标签的下一个兄弟节点就是该书的 ISBN 码所在的标签,通过该标签的字符串属性可以获取 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)
运行结果

六、将结果写入文件以供进一步处理
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 爬虫:从刮书信息和刮价格 (1): Basics Beautiful Soup
我们正处于大数据时代,欢迎对数据处理感兴趣的朋友查看另一个系列随笔:Using Python for Data Analysis Basics 系列随笔小结
接下来的作文是网站根据得到的ISBN码得到每本书对应的价格,通过数据分析的知识对得到的数据进行处理,最后输出成csv文件。感兴趣的朋友欢迎关注本博客,也欢迎留言讨论。
抓取网页生成电子书(如何将网页文章批量抓取、生成电子书、直接推送到Kindle)
网站优化 • 优采云 发表了文章 • 0 个评论 • 114 次浏览 • 2022-03-14 07:13
我一直在研究如何将我关心的网页或 文章 放入我的 Kindle 中进行认真阅读,但我已经很长时间没有取得任何真正的进展。手工排版制作电子书的方法虽然简单易行,但对于短小、更新频繁的网页文章来说效率低下。如果有一个工具可以文章批量抓取网页,生成电子书,然后直接推送到Kindle上就好了。Doocer 就是这样一种实用程序。
Doocer是@lepture开发的在线服务,允许用户在Pocket Read Later账号中提交URL、RSS提要地址和文章,然后逐一或批量制作成ePub和MOBI电子书. 您可以直接在 Doocer 中阅读所有文章,也可以将它们推送到 Kindle、Apple Books 中阅读。
真的很好的阅读体验
Doocer 生成的电子书在排版方面非常出色。应该有的内容很多,不应该有的内容不多。本书不仅封面图文并茂,还有文章目录、网站出处、文章原作者等信息。Doocer生成的MOBI电子书支持KF8标准,因此支持Kindle原生替换自定义字体。
由于网站文章通常有标准和通用的排版规范,Doocer生成的电子书文章中的大小标题和列表图例与原网页文章高度一致@>。原文章中的所有超链接也被保留,评论、广告等内容全部丢弃。整本书的阅读体验非常友好。(当然,如果原网页文章的布局没有规则,那么生成的电子书也可能面目全非。)
将网页 文章 制作成电子书
Doocer完成注册登录后,我们就可以开始将网页文章制作成电子书了。首先,我们点击“NEW BOOK”按钮新建电子书,输入电子书名称。接下来选择右上角的“添加”以添加 文章 URL 或 RSS 提要地址。
以小众网站的文章为例,我们选择“FEED”,在输入框中粘贴RSS地址,然后点击“PARSE”,那么小众最近文章的列表就会出现为我们显示添加到。我们可以根据需要选择,也可以点击“SELECT ALL”全选文章。最后,下拉到页面底部,选择“SAVE”,那么这些文章就会被添加到书里。
其实Doocer网页与RSS工具很相似,实现了从网站批量抓取文章并集中展示的功能。
要将这些 文章 转换为电子书并将它们推送到 Kindle,我们必须做一些简单的事情。
首先,根据Doocer个人设置页面中的提示,我们打开它,将Doocer电子书的发送地址添加到个人文档接收地址中。完成后,我们在输入框中填写Kindle的个人文档接收地址,点击保存。
最后,我们在 Doocer 中打开《少数派》这本书,在页面上找到“Publish”,选择 Send to Kindle。大约 10 到 30 分钟,Doocer 将完成图书制作并将图书推送到 Kindle。
仍有一些问题需要注意
Doocer目前处于beta测试阶段,还有一些bug,尤其是中文网站经常出现问题。好在Doocer官网有开发者对话频道,可以直接联系他帮忙解决。
自动化所有操作的过程是我认为 Doocer 最需要做的事情。Doocer可以像RSS工具一样抓取网页中更新的文章,但是要抓取新的文章并生成电子书并推送,仍然需要手动完成。如果整个过程可以自动化,RSS - MOBI - Kindle 一口气,相信它的用处会更好。
目前,Doocer 的所有功能都可以免费使用。 查看全部
抓取网页生成电子书(如何将网页文章批量抓取、生成电子书、直接推送到Kindle)
我一直在研究如何将我关心的网页或 文章 放入我的 Kindle 中进行认真阅读,但我已经很长时间没有取得任何真正的进展。手工排版制作电子书的方法虽然简单易行,但对于短小、更新频繁的网页文章来说效率低下。如果有一个工具可以文章批量抓取网页,生成电子书,然后直接推送到Kindle上就好了。Doocer 就是这样一种实用程序。
Doocer是@lepture开发的在线服务,允许用户在Pocket Read Later账号中提交URL、RSS提要地址和文章,然后逐一或批量制作成ePub和MOBI电子书. 您可以直接在 Doocer 中阅读所有文章,也可以将它们推送到 Kindle、Apple Books 中阅读。

真的很好的阅读体验
Doocer 生成的电子书在排版方面非常出色。应该有的内容很多,不应该有的内容不多。本书不仅封面图文并茂,还有文章目录、网站出处、文章原作者等信息。Doocer生成的MOBI电子书支持KF8标准,因此支持Kindle原生替换自定义字体。
由于网站文章通常有标准和通用的排版规范,Doocer生成的电子书文章中的大小标题和列表图例与原网页文章高度一致@>。原文章中的所有超链接也被保留,评论、广告等内容全部丢弃。整本书的阅读体验非常友好。(当然,如果原网页文章的布局没有规则,那么生成的电子书也可能面目全非。)

将网页 文章 制作成电子书
Doocer完成注册登录后,我们就可以开始将网页文章制作成电子书了。首先,我们点击“NEW BOOK”按钮新建电子书,输入电子书名称。接下来选择右上角的“添加”以添加 文章 URL 或 RSS 提要地址。

以小众网站的文章为例,我们选择“FEED”,在输入框中粘贴RSS地址,然后点击“PARSE”,那么小众最近文章的列表就会出现为我们显示添加到。我们可以根据需要选择,也可以点击“SELECT ALL”全选文章。最后,下拉到页面底部,选择“SAVE”,那么这些文章就会被添加到书里。

其实Doocer网页与RSS工具很相似,实现了从网站批量抓取文章并集中展示的功能。

要将这些 文章 转换为电子书并将它们推送到 Kindle,我们必须做一些简单的事情。
首先,根据Doocer个人设置页面中的提示,我们打开它,将Doocer电子书的发送地址添加到个人文档接收地址中。完成后,我们在输入框中填写Kindle的个人文档接收地址,点击保存。

最后,我们在 Doocer 中打开《少数派》这本书,在页面上找到“Publish”,选择 Send to Kindle。大约 10 到 30 分钟,Doocer 将完成图书制作并将图书推送到 Kindle。

仍有一些问题需要注意
Doocer目前处于beta测试阶段,还有一些bug,尤其是中文网站经常出现问题。好在Doocer官网有开发者对话频道,可以直接联系他帮忙解决。
自动化所有操作的过程是我认为 Doocer 最需要做的事情。Doocer可以像RSS工具一样抓取网页中更新的文章,但是要抓取新的文章并生成电子书并推送,仍然需要手动完成。如果整个过程可以自动化,RSS - MOBI - Kindle 一口气,相信它的用处会更好。
目前,Doocer 的所有功能都可以免费使用。
抓取网页生成电子书(如何将网页文章批量抓取、生成电子书、直接推送到Kindle)
网站优化 • 优采云 发表了文章 • 0 个评论 • 103 次浏览 • 2022-03-14 07:08
我一直在研究如何将我关心的网页或 文章 放入我的 Kindle 中进行认真阅读,但我已经很长时间没有取得任何真正的进展。手工排版制作电子书的方法虽然简单易行,但对于短小、更新频繁的网页文章来说效率低下。如果有一个工具可以文章批量抓取网页,生成电子书,然后直接推送到Kindle上就好了。Doocer 就是这样一种实用程序。
Doocer是@lepture开发的在线服务,允许用户在Pocket Read Later账号中提交URL、RSS提要地址和文章,然后逐一或批量制作成ePub和MOBI电子书. 您可以直接在 Doocer 中阅读所有文章,也可以将它们推送到 Kindle、Apple Books 中阅读。
真的很好的阅读体验
Doocer 生成的电子书在排版方面非常出色。应该有的内容很多,不应该有的内容不多。本书不仅封面图文并茂,还有文章目录、网站出处、文章原作者等信息。Doocer生成的MOBI电子书支持KF8标准,因此支持Kindle原生替换自定义字体。
由于网站文章通常有标准和通用的排版规范,Doocer生成的电子书文章中的大小标题和列表图例与原网页文章高度一致@>。原文章中的所有超链接也被保留,评论、广告等内容全部丢弃。整本书的阅读体验非常友好。(当然,如果原网页文章的布局没有规则,那么生成的电子书也可能面目全非。)
将网页 文章 制作成电子书
Doocer完成注册登录后,我们就可以开始将网页文章制作成电子书了。首先,我们点击“NEW BOOK”按钮新建电子书,输入电子书名称。接下来选择右上角的“添加”以添加 文章 URL 或 RSS 提要地址。
以小众网站的文章为例,我们选择“FEED”,在输入框中粘贴RSS地址,然后点击“PARSE”,那么小众最近文章的列表就会出现为我们显示添加到。我们可以根据需要选择,也可以点击“SELECT ALL”全选文章。最后,下拉到页面底部,选择“SAVE”,那么这些文章就会被添加到书里。
其实Doocer网页与RSS工具很相似,实现了从网站批量抓取文章并集中展示的功能。
要将这些 文章 转换为电子书并将它们推送到 Kindle,我们必须做一些简单的事情。
首先,根据Doocer个人设置页面中的提示,我们打开它,将Doocer电子书的发送地址添加到个人文档接收地址中。完成后,我们在输入框中填写Kindle的个人文档接收地址,点击保存。
最后,我们在 Doocer 中打开《少数派》这本书,在页面上找到“Publish”,选择 Send to Kindle。大约 10 到 30 分钟,Doocer 将完成图书制作并将图书推送到 Kindle。
仍有一些问题需要注意
Doocer目前处于beta测试阶段,还有一些bug,尤其是中文网站经常出现问题。好在Doocer官网有开发者对话频道,可以直接联系他帮忙解决。
自动化所有操作的过程是我认为 Doocer 最需要做的事情。Doocer可以像RSS工具一样抓取网页中更新的文章,但是要抓取新的文章并生成电子书并推送,仍然需要手动完成。如果整个过程可以自动化,RSS - MOBI - Kindle 一口气,相信它的用处会更好。
目前,Doocer 的所有功能都可以免费使用。 查看全部
抓取网页生成电子书(如何将网页文章批量抓取、生成电子书、直接推送到Kindle)
我一直在研究如何将我关心的网页或 文章 放入我的 Kindle 中进行认真阅读,但我已经很长时间没有取得任何真正的进展。手工排版制作电子书的方法虽然简单易行,但对于短小、更新频繁的网页文章来说效率低下。如果有一个工具可以文章批量抓取网页,生成电子书,然后直接推送到Kindle上就好了。Doocer 就是这样一种实用程序。
Doocer是@lepture开发的在线服务,允许用户在Pocket Read Later账号中提交URL、RSS提要地址和文章,然后逐一或批量制作成ePub和MOBI电子书. 您可以直接在 Doocer 中阅读所有文章,也可以将它们推送到 Kindle、Apple Books 中阅读。

真的很好的阅读体验
Doocer 生成的电子书在排版方面非常出色。应该有的内容很多,不应该有的内容不多。本书不仅封面图文并茂,还有文章目录、网站出处、文章原作者等信息。Doocer生成的MOBI电子书支持KF8标准,因此支持Kindle原生替换自定义字体。
由于网站文章通常有标准和通用的排版规范,Doocer生成的电子书文章中的大小标题和列表图例与原网页文章高度一致@>。原文章中的所有超链接也被保留,评论、广告等内容全部丢弃。整本书的阅读体验非常友好。(当然,如果原网页文章的布局没有规则,那么生成的电子书也可能面目全非。)

将网页 文章 制作成电子书
Doocer完成注册登录后,我们就可以开始将网页文章制作成电子书了。首先,我们点击“NEW BOOK”按钮新建电子书,输入电子书名称。接下来选择右上角的“添加”以添加 文章 URL 或 RSS 提要地址。

以小众网站的文章为例,我们选择“FEED”,在输入框中粘贴RSS地址,然后点击“PARSE”,那么小众最近文章的列表就会出现为我们显示添加到。我们可以根据需要选择,也可以点击“SELECT ALL”全选文章。最后,下拉到页面底部,选择“SAVE”,那么这些文章就会被添加到书里。

其实Doocer网页与RSS工具很相似,实现了从网站批量抓取文章并集中展示的功能。

要将这些 文章 转换为电子书并将它们推送到 Kindle,我们必须做一些简单的事情。
首先,根据Doocer个人设置页面中的提示,我们打开它,将Doocer电子书的发送地址添加到个人文档接收地址中。完成后,我们在输入框中填写Kindle的个人文档接收地址,点击保存。

最后,我们在 Doocer 中打开《少数派》这本书,在页面上找到“Publish”,选择 Send to Kindle。大约 10 到 30 分钟,Doocer 将完成图书制作并将图书推送到 Kindle。

仍有一些问题需要注意
Doocer目前处于beta测试阶段,还有一些bug,尤其是中文网站经常出现问题。好在Doocer官网有开发者对话频道,可以直接联系他帮忙解决。
自动化所有操作的过程是我认为 Doocer 最需要做的事情。Doocer可以像RSS工具一样抓取网页中更新的文章,但是要抓取新的文章并生成电子书并推送,仍然需要手动完成。如果整个过程可以自动化,RSS - MOBI - Kindle 一口气,相信它的用处会更好。
目前,Doocer 的所有功能都可以免费使用。
抓取网页生成电子书(一步步解析单个页面,得到该页书籍链接列表得到)
网站优化 • 优采云 发表了文章 • 0 个评论 • 118 次浏览 • 2022-03-14 07:08
2. 解析单个页面以获取该页面上的书籍链接列表
3. 转到书页
* 判断是否可以下载
* 如果可以下载,请下载所有格式的书籍
其次,为了获得爬虫的健壮性,我们需要保证每次网页加载成功,文件下载完成,我会在后面的内容中一步一步介绍。
实施过程
Selenium 可以模拟打开浏览器。在此之前,我们需要下载浏览器的驱动程序。在本文中,我们使用的是chrome浏览器,Firefox也是常用的浏览器。步骤类似,不再赘述。
硒的安装:
sudo pip install selenium
然后下载chrome的webdriver,直接保存到本地,比如/usr/bin,然后设置selenium的基本设置
import re#正则表达式
import random#随机选择
import subprocess# 执行bash命令
from multiprocessing import Pool#建立线程池,并行爬取加快速度
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设置代理,自动获得代理IP地址下面会解释,这里注释掉
#PROXY='1.82.216.134:80'
#chromeOptions.add_argument('--proxy-server=%s' % PROXY)
# url_start='http://www.kancloud.cn/explore/top'
#建立一个webdriver对象
driver = webdriver.Chrome(chrome_options=chromeOptions)
driver.get('http://www.kancloud.cn/digest/ ... %2339;)#用chrome打开这个网页
运行上面的代码,打开一个chrome标签,如下图:
点击下载按钮,我们看到有PDF、epub、mobi三个下载选项。为了模拟点击动作,我们需要获取元素的位置。这时候我们就可以使用chrome的inspect功能了,快捷键是 Ctrl+shift+I ,或者将鼠标悬停在下载上,右键选择inspect,效果如下:
选择右边高亮的代码,右键->复制->复制xpath,可以得到元素的xpath
//*[@id="manualDownload"]/span/b
然后使用webdriver本身的xpath搜索功能获取元素,并模拟点击操作
运行上面这句话,我们可以看到网站确实响应了,支持下载的电子书格式有3种。这一步点击下载按钮是必须的,否则直接点击epub会报 element not visible 的错误。接下来我们演示下载epub,鼠标悬停在epub上,右键查看,可以得到下载epub的xpath,同上
driver.find_element_by_xpath('//*[@id="manualDownload"]/div/div/ul/li[2]/a').click()
这样我们就可以把这本epub电子书下载到我们指定的路径了。
这是 Selenium 的基本应用。它还有一些其他的定位元素的方法和模拟操作的功能,比如把网页往下拉,因为有些网站会根据用户的下拉情况来渲染网页,越往下拉,显示的内容越多。详情请查看 selenium 的官方文档。
我们对每一页的每一本书执行上述过程,然后我们可以爬取整个站点的书籍,前提是你的网速够快,运气够好。这是因为在持续爬取过程中会出现一些异常,例如
1. webdriver 将无法打开网页
2. 下载完成前打开下一个网页,导致webdriver负担过重,无法加载网页
3. 网站可能是基于IP地址的反爬虫
下一篇我们将解决以上问题,使用多进程加速(webdriver太慢,无法打开网页)。 查看全部
抓取网页生成电子书(一步步解析单个页面,得到该页书籍链接列表得到)
2. 解析单个页面以获取该页面上的书籍链接列表
3. 转到书页
* 判断是否可以下载
* 如果可以下载,请下载所有格式的书籍
其次,为了获得爬虫的健壮性,我们需要保证每次网页加载成功,文件下载完成,我会在后面的内容中一步一步介绍。
实施过程
Selenium 可以模拟打开浏览器。在此之前,我们需要下载浏览器的驱动程序。在本文中,我们使用的是chrome浏览器,Firefox也是常用的浏览器。步骤类似,不再赘述。
硒的安装:
sudo pip install selenium
然后下载chrome的webdriver,直接保存到本地,比如/usr/bin,然后设置selenium的基本设置
import re#正则表达式
import random#随机选择
import subprocess# 执行bash命令
from multiprocessing import Pool#建立线程池,并行爬取加快速度
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设置代理,自动获得代理IP地址下面会解释,这里注释掉
#PROXY='1.82.216.134:80'
#chromeOptions.add_argument('--proxy-server=%s' % PROXY)
# url_start='http://www.kancloud.cn/explore/top'
#建立一个webdriver对象
driver = webdriver.Chrome(chrome_options=chromeOptions)
driver.get('http://www.kancloud.cn/digest/ ... %2339;)#用chrome打开这个网页
运行上面的代码,打开一个chrome标签,如下图:
点击下载按钮,我们看到有PDF、epub、mobi三个下载选项。为了模拟点击动作,我们需要获取元素的位置。这时候我们就可以使用chrome的inspect功能了,快捷键是 Ctrl+shift+I ,或者将鼠标悬停在下载上,右键选择inspect,效果如下:
选择右边高亮的代码,右键->复制->复制xpath,可以得到元素的xpath
//*[@id="manualDownload"]/span/b
然后使用webdriver本身的xpath搜索功能获取元素,并模拟点击操作
运行上面这句话,我们可以看到网站确实响应了,支持下载的电子书格式有3种。这一步点击下载按钮是必须的,否则直接点击epub会报 element not visible 的错误。接下来我们演示下载epub,鼠标悬停在epub上,右键查看,可以得到下载epub的xpath,同上
driver.find_element_by_xpath('//*[@id="manualDownload"]/div/div/ul/li[2]/a').click()
这样我们就可以把这本epub电子书下载到我们指定的路径了。
这是 Selenium 的基本应用。它还有一些其他的定位元素的方法和模拟操作的功能,比如把网页往下拉,因为有些网站会根据用户的下拉情况来渲染网页,越往下拉,显示的内容越多。详情请查看 selenium 的官方文档。
我们对每一页的每一本书执行上述过程,然后我们可以爬取整个站点的书籍,前提是你的网速够快,运气够好。这是因为在持续爬取过程中会出现一些异常,例如
1. webdriver 将无法打开网页
2. 下载完成前打开下一个网页,导致webdriver负担过重,无法加载网页
3. 网站可能是基于IP地址的反爬虫
下一篇我们将解决以上问题,使用多进程加速(webdriver太慢,无法打开网页)。
抓取网页生成电子书(如何将网页文章批量抓取、生成电子书、直接推送到Kindle)
网站优化 • 优采云 发表了文章 • 0 个评论 • 76 次浏览 • 2022-03-13 07:14
我一直在研究如何将我关心的网页或 文章 放入我的 Kindle 中进行认真阅读,但我已经很长时间没有取得任何真正的进展。手工排版制作电子书的方法虽然简单易行,但对于短小、更新频繁的网页文章来说效率低下。如果有一个工具可以文章批量抓取网页,生成电子书,然后直接推送到Kindle上就好了。Doocer 就是这样一种实用程序。
Doocer是@lepture开发的在线服务,允许用户在Pocket Read Later账户中提交URL、RSS提要地址和文章,然后逐一或批量制作成ePub和MOBI电子书. 您可以直接在 Doocer 中阅读所有文章,也可以将它们推送到 Kindle、Apple Books 中阅读。
真的很好的阅读体验
Doocer 生成的电子书在排版方面非常出色。应该有的内容很多,不应该有的内容不多。本书不仅封面图文并茂,还有文章目录、网站出处、文章原作者等信息。Doocer生成的MOBI电子书支持KF8标准,因此支持Kindle原生替换自定义字体。
由于网站文章通常有标准和通用的排版规范,Doocer生成的电子书文章中的大小标题和列表图例与原网页文章高度一致@>。原文章中的所有超链接也被保留,评论、广告等内容全部丢弃。整本书的阅读体验非常友好。(当然,如果原网页文章的布局没有规则,那么生成的电子书也可能面目全非。)
将网页 文章 制作成电子书
Doocer完成注册登录后,我们就可以开始将网页文章制作成电子书了。首先,我们点击“NEW BOOK”按钮新建电子书,输入电子书名称。接下来选择右上角的“添加”以添加 文章 URL 或 RSS 提要地址。
以小众网页的文章为例,我们选择“FEED”,在输入框中粘贴RSS地址,然后点击“PARSE”,那么小众最近的文章列表就会出现为我们显示添加到。我们可以根据需要选择,也可以点击“SELECT ALL”全选文章。最后,下拉到页面底部,选择“SAVE”,那么这些文章就会被添加到书里。
其实Doocer网页与RSS工具很相似,实现了从网站批量抓取文章并集中展示的功能。
要将这些 文章 转换为电子书并将它们推送到 Kindle,我们必须做一些简单的事情。
首先,根据Doocer个人设置页面的提示,打开Amazon Kindle的个人文档设置,将Doocer电子书的发送地址添加到个人文档接收地址中。完成后,我们在输入框中填写Kindle的个人文档接收地址,点击保存。
最后,我们在 Doocer 中打开《少数派》这本书,在页面上找到“Publish”,选择 Send to Kindle。大约 10 到 30 分钟,Doocer 将完成图书制作并将图书推送到 Kindle。
仍有一些问题需要注意
Doocer目前处于beta测试阶段,还有一些bug,尤其是中文网站经常出现问题。好在Doocer官网有开发者对话频道,可以直接联系他帮忙解决。
自动化所有操作的过程是我认为 Doocer 最需要做的事情。Doocer可以像RSS工具一样抓取网页中更新的文章,但是要抓取新的文章并生成电子书并推送,仍然需要手动完成。如果整个过程可以自动化,RSS - MOBI - Kindle 一口气,相信它的用处会更好。
目前,Doocer 的所有功能都可以免费使用。 查看全部
抓取网页生成电子书(如何将网页文章批量抓取、生成电子书、直接推送到Kindle)
我一直在研究如何将我关心的网页或 文章 放入我的 Kindle 中进行认真阅读,但我已经很长时间没有取得任何真正的进展。手工排版制作电子书的方法虽然简单易行,但对于短小、更新频繁的网页文章来说效率低下。如果有一个工具可以文章批量抓取网页,生成电子书,然后直接推送到Kindle上就好了。Doocer 就是这样一种实用程序。
Doocer是@lepture开发的在线服务,允许用户在Pocket Read Later账户中提交URL、RSS提要地址和文章,然后逐一或批量制作成ePub和MOBI电子书. 您可以直接在 Doocer 中阅读所有文章,也可以将它们推送到 Kindle、Apple Books 中阅读。

真的很好的阅读体验
Doocer 生成的电子书在排版方面非常出色。应该有的内容很多,不应该有的内容不多。本书不仅封面图文并茂,还有文章目录、网站出处、文章原作者等信息。Doocer生成的MOBI电子书支持KF8标准,因此支持Kindle原生替换自定义字体。
由于网站文章通常有标准和通用的排版规范,Doocer生成的电子书文章中的大小标题和列表图例与原网页文章高度一致@>。原文章中的所有超链接也被保留,评论、广告等内容全部丢弃。整本书的阅读体验非常友好。(当然,如果原网页文章的布局没有规则,那么生成的电子书也可能面目全非。)

将网页 文章 制作成电子书
Doocer完成注册登录后,我们就可以开始将网页文章制作成电子书了。首先,我们点击“NEW BOOK”按钮新建电子书,输入电子书名称。接下来选择右上角的“添加”以添加 文章 URL 或 RSS 提要地址。

以小众网页的文章为例,我们选择“FEED”,在输入框中粘贴RSS地址,然后点击“PARSE”,那么小众最近的文章列表就会出现为我们显示添加到。我们可以根据需要选择,也可以点击“SELECT ALL”全选文章。最后,下拉到页面底部,选择“SAVE”,那么这些文章就会被添加到书里。

其实Doocer网页与RSS工具很相似,实现了从网站批量抓取文章并集中展示的功能。

要将这些 文章 转换为电子书并将它们推送到 Kindle,我们必须做一些简单的事情。
首先,根据Doocer个人设置页面的提示,打开Amazon Kindle的个人文档设置,将Doocer电子书的发送地址添加到个人文档接收地址中。完成后,我们在输入框中填写Kindle的个人文档接收地址,点击保存。

最后,我们在 Doocer 中打开《少数派》这本书,在页面上找到“Publish”,选择 Send to Kindle。大约 10 到 30 分钟,Doocer 将完成图书制作并将图书推送到 Kindle。

仍有一些问题需要注意
Doocer目前处于beta测试阶段,还有一些bug,尤其是中文网站经常出现问题。好在Doocer官网有开发者对话频道,可以直接联系他帮忙解决。
自动化所有操作的过程是我认为 Doocer 最需要做的事情。Doocer可以像RSS工具一样抓取网页中更新的文章,但是要抓取新的文章并生成电子书并推送,仍然需要手动完成。如果整个过程可以自动化,RSS - MOBI - Kindle 一口气,相信它的用处会更好。
目前,Doocer 的所有功能都可以免费使用。
抓取网页生成电子书(Windows,OSX及Linux的在线资料epub或mobi格式)
网站优化 • 优采云 发表了文章 • 0 个评论 • 164 次浏览 • 2022-03-13 01:22
自从我买了kindle之后,我就一直在思考如何充分利用它。虽然可以从多多购买很多书籍,网上也有很多免费的电子书,但还是有很多网页形式的有趣内容。比如O'Reilly Atlas提供了很多电子书,但只提供免费在线阅读;此外,许多材料或文件只是网页形式。所以我希望通过某种方式把这些网上资料转换成epub或者mobi格式,这样就可以在kindle上阅读了。这篇 文章 文章描述了如何使用 calibre 和少量代码来做到这一点。
CalibreCalibre 简介
Calibre 是一款免费的电子书管理工具,兼容 Windows、OS X 和 Linux。幸运的是,除了 GUI 之外,calibre 还提供了很多命令行工具,其中 ebook-convert 命令可以根据用户编写的食谱进行。文件(其实是python代码)抓取指定页面的内容,生成mobi等格式的电子书。通过编写食谱,可以自定义爬取行为以适应不同的网页结构。
安装口径
Calibre的下载地址为download,您可以根据自己的操作系统下载相应的安装程序。
如果是 Linux 操作系统,也可以从软件仓库安装:
Archlinux:
pacman -S calibre
Debian/Ubuntu:
apt-get install calibre
红帽/Fedora/CentOS:
yum -y install calibre
请注意,如果您使用 OSX,则需要单独安装命令行工具。
抓取网页以生成电子书
下面以Git Pocket Guide为例,说明如何通过calibre从网页生成电子书。
找到索引页面
爬取整本书,首先要找到索引页,通常是Table of Contents,也就是目录,其中每个目录都链接到对应的内容页。索引页面将指导生成电子书时要抓取的页面以及内容的组织顺序。在本例中,索引页为 61/index.html。
写食谱
Recipes 是一个带有recipe 扩展名的脚本。内容其实是一段python代码,用来定义calibre爬取页面的范围和行为。以下是用于爬取 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
下面解释代码的不同部分。
整体结构
一般来说,recipe是一个python类,但是这个类必须继承calibre.web.feeds.recipes.BasicNewsRecipe。
解析索引
整个recipe的核心方法是parse_index,这也是recipe必须实现的唯一方法。该方法的目标是分析索引页的内容并返回一个稍微复杂的数据结构(稍后描述),该结构定义了整个电子书的内容以及内容的组织顺序。
整体属性设置
在类的开头,定义了一些全局属性:
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 返回值
下面通过分析索引页来描述parse_index需要返回的数据结构。
整体返回数据结构是一个列表,其中每个元素是一个元组,一个元组代表一个卷。在这个例子中只有一个卷,所以列表中只有一个元组。
每个元组有两个元素,第一个元素是卷名,第二个元素是一个列表,列表中的每个元素都是一个map,代表一个章节(chapter),map中有两个元素:title和url,title是章节标题,url是章节所在内容页面的url。
Calibre 会根据 parse_index 的返回结果对整本书进行爬取和整理,并会自行对内容中的外部链接的图片进行爬取和处理。
整个parse_index使用soup解析索引页,生成上述数据结构。
更多的
以上是最基本的食谱。如果想详细了解如何使用,可以参考 API 文档。
生成手机
菜谱写好后,可以在命令行通过以下命令生成电子书:
ebook-convert Git_Pocket_Guide.recipe Git_Pocket_Guide.mobi
您可以生成 mobi 格式的电子书。ebook-convert 将抓取相关内容并根据食谱代码组织结构。
最终效果
下面是在kindle上看到的效果。
内容
内容一
内容二
有图片的页面
实际效果
我的食谱库
我在github上建了一个kindle-open-books,里面放了一些菜谱,这些菜谱是我自己写的,其他同学贡献的。欢迎任何人提供食谱。 查看全部
抓取网页生成电子书(Windows,OSX及Linux的在线资料epub或mobi格式)
自从我买了kindle之后,我就一直在思考如何充分利用它。虽然可以从多多购买很多书籍,网上也有很多免费的电子书,但还是有很多网页形式的有趣内容。比如O'Reilly Atlas提供了很多电子书,但只提供免费在线阅读;此外,许多材料或文件只是网页形式。所以我希望通过某种方式把这些网上资料转换成epub或者mobi格式,这样就可以在kindle上阅读了。这篇 文章 文章描述了如何使用 calibre 和少量代码来做到这一点。
CalibreCalibre 简介
Calibre 是一款免费的电子书管理工具,兼容 Windows、OS X 和 Linux。幸运的是,除了 GUI 之外,calibre 还提供了很多命令行工具,其中 ebook-convert 命令可以根据用户编写的食谱进行。文件(其实是python代码)抓取指定页面的内容,生成mobi等格式的电子书。通过编写食谱,可以自定义爬取行为以适应不同的网页结构。
安装口径
Calibre的下载地址为download,您可以根据自己的操作系统下载相应的安装程序。
如果是 Linux 操作系统,也可以从软件仓库安装:
Archlinux:
pacman -S calibre
Debian/Ubuntu:
apt-get install calibre
红帽/Fedora/CentOS:
yum -y install calibre
请注意,如果您使用 OSX,则需要单独安装命令行工具。
抓取网页以生成电子书
下面以Git Pocket Guide为例,说明如何通过calibre从网页生成电子书。
找到索引页面
爬取整本书,首先要找到索引页,通常是Table of Contents,也就是目录,其中每个目录都链接到对应的内容页。索引页面将指导生成电子书时要抓取的页面以及内容的组织顺序。在本例中,索引页为 61/index.html。
写食谱
Recipes 是一个带有recipe 扩展名的脚本。内容其实是一段python代码,用来定义calibre爬取页面的范围和行为。以下是用于爬取 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
下面解释代码的不同部分。
整体结构
一般来说,recipe是一个python类,但是这个类必须继承calibre.web.feeds.recipes.BasicNewsRecipe。
解析索引
整个recipe的核心方法是parse_index,这也是recipe必须实现的唯一方法。该方法的目标是分析索引页的内容并返回一个稍微复杂的数据结构(稍后描述),该结构定义了整个电子书的内容以及内容的组织顺序。
整体属性设置
在类的开头,定义了一些全局属性:
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 返回值
下面通过分析索引页来描述parse_index需要返回的数据结构。

整体返回数据结构是一个列表,其中每个元素是一个元组,一个元组代表一个卷。在这个例子中只有一个卷,所以列表中只有一个元组。
每个元组有两个元素,第一个元素是卷名,第二个元素是一个列表,列表中的每个元素都是一个map,代表一个章节(chapter),map中有两个元素:title和url,title是章节标题,url是章节所在内容页面的url。
Calibre 会根据 parse_index 的返回结果对整本书进行爬取和整理,并会自行对内容中的外部链接的图片进行爬取和处理。
整个parse_index使用soup解析索引页,生成上述数据结构。
更多的
以上是最基本的食谱。如果想详细了解如何使用,可以参考 API 文档。
生成手机
菜谱写好后,可以在命令行通过以下命令生成电子书:
ebook-convert Git_Pocket_Guide.recipe Git_Pocket_Guide.mobi
您可以生成 mobi 格式的电子书。ebook-convert 将抓取相关内容并根据食谱代码组织结构。
最终效果
下面是在kindle上看到的效果。
内容

内容一

内容二

有图片的页面

实际效果

我的食谱库
我在github上建了一个kindle-open-books,里面放了一些菜谱,这些菜谱是我自己写的,其他同学贡献的。欢迎任何人提供食谱。
抓取网页生成电子书(如何将网页文章批量抓取、生成电子书、直接推送到Kindle)
网站优化 • 优采云 发表了文章 • 0 个评论 • 306 次浏览 • 2022-03-13 00:12
我一直在研究如何将我关心的网页或 文章 放入我的 Kindle 中进行认真阅读,但我已经很长时间没有取得任何真正的进展。手工排版制作电子书的方法虽然简单易行,但对于短小、更新频繁的网页文章来说效率低下。如果有一个工具可以文章批量抓取网页,生成电子书,然后直接推送到Kindle上就好了。Doocer 就是这样一种实用程序。
Doocer是@lepture开发的在线服务,允许用户在Pocket Read Later账户中提交URL、RSS提要地址和文章,然后逐一或批量制作成ePub和MOBI电子书. 您可以直接在 Doocer 中阅读所有文章,也可以将它们推送到 Kindle、Apple Books 中阅读。
真的很好的阅读体验
Doocer 生成的电子书在排版方面非常出色。应该有的内容很多,不应该有的内容不多。本书不仅封面图文并茂,还有文章目录、网站出处、文章原作者等信息。Doocer生成的MOBI电子书支持KF8标准,因此支持Kindle原生替换自定义字体。
由于网站文章通常有标准和通用的排版规范,Doocer生成的电子书文章中的大小标题和列表图例与原网页文章高度一致@>。原文章中的所有超链接也被保留,评论、广告等内容全部丢弃。整本书的阅读体验非常友好。(当然,如果原网页文章的布局没有规则,那么生成的电子书也可能面目全非。)
将网页 文章 制作成电子书
Doocer完成注册登录后,我们就可以开始将网页文章制作成电子书了。首先,我们点击“NEW BOOK”按钮新建电子书,输入电子书名称。接下来选择右上角的“添加”以添加 文章 URL 或 RSS 提要地址。
以小众网页的文章为例,我们选择“FEED”,在输入框中粘贴RSS地址,然后点击“PARSE”,那么小众最近的文章列表就会出现为我们显示添加到。我们可以根据需要选择,也可以点击“SELECT ALL”全选文章。最后,下拉到页面底部,选择“SAVE”,那么这些文章就会被添加到书里。
其实Doocer网页与RSS工具很相似,实现了从网站批量抓取文章并集中展示的功能。
要将这些 文章 转换为电子书并将它们推送到 Kindle,我们必须做一些简单的事情。
首先,根据Doocer个人设置页面中的提示,我们打开它,将Doocer电子书的发送地址添加到个人文档接收地址中。完成后,我们在输入框中填写Kindle的个人文档接收地址,点击保存。
最后,我们在 Doocer 中打开《少数派》这本书,在页面上找到“Publish”,选择 Send to Kindle。大约 10 到 30 分钟,Doocer 将完成图书制作并将图书推送到 Kindle。
仍有一些问题需要注意
Doocer目前处于beta测试阶段,还有一些bug,尤其是中文网站经常出现问题。好在Doocer官网有开发者对话频道,可以直接联系他帮忙解决。
自动化所有操作的过程是我认为 Doocer 最需要做的事情。Doocer可以像RSS工具一样抓取网页中更新的文章,但是要抓取新的文章并生成电子书并推送,仍然需要手动完成。如果整个过程可以自动化,RSS - MOBI - Kindle 一口气,相信它的用处会更好。
目前,Doocer 的所有功能都可以免费使用。 查看全部
抓取网页生成电子书(如何将网页文章批量抓取、生成电子书、直接推送到Kindle)
我一直在研究如何将我关心的网页或 文章 放入我的 Kindle 中进行认真阅读,但我已经很长时间没有取得任何真正的进展。手工排版制作电子书的方法虽然简单易行,但对于短小、更新频繁的网页文章来说效率低下。如果有一个工具可以文章批量抓取网页,生成电子书,然后直接推送到Kindle上就好了。Doocer 就是这样一种实用程序。
Doocer是@lepture开发的在线服务,允许用户在Pocket Read Later账户中提交URL、RSS提要地址和文章,然后逐一或批量制作成ePub和MOBI电子书. 您可以直接在 Doocer 中阅读所有文章,也可以将它们推送到 Kindle、Apple Books 中阅读。

真的很好的阅读体验
Doocer 生成的电子书在排版方面非常出色。应该有的内容很多,不应该有的内容不多。本书不仅封面图文并茂,还有文章目录、网站出处、文章原作者等信息。Doocer生成的MOBI电子书支持KF8标准,因此支持Kindle原生替换自定义字体。
由于网站文章通常有标准和通用的排版规范,Doocer生成的电子书文章中的大小标题和列表图例与原网页文章高度一致@>。原文章中的所有超链接也被保留,评论、广告等内容全部丢弃。整本书的阅读体验非常友好。(当然,如果原网页文章的布局没有规则,那么生成的电子书也可能面目全非。)

将网页 文章 制作成电子书
Doocer完成注册登录后,我们就可以开始将网页文章制作成电子书了。首先,我们点击“NEW BOOK”按钮新建电子书,输入电子书名称。接下来选择右上角的“添加”以添加 文章 URL 或 RSS 提要地址。

以小众网页的文章为例,我们选择“FEED”,在输入框中粘贴RSS地址,然后点击“PARSE”,那么小众最近的文章列表就会出现为我们显示添加到。我们可以根据需要选择,也可以点击“SELECT ALL”全选文章。最后,下拉到页面底部,选择“SAVE”,那么这些文章就会被添加到书里。

其实Doocer网页与RSS工具很相似,实现了从网站批量抓取文章并集中展示的功能。

要将这些 文章 转换为电子书并将它们推送到 Kindle,我们必须做一些简单的事情。
首先,根据Doocer个人设置页面中的提示,我们打开它,将Doocer电子书的发送地址添加到个人文档接收地址中。完成后,我们在输入框中填写Kindle的个人文档接收地址,点击保存。

最后,我们在 Doocer 中打开《少数派》这本书,在页面上找到“Publish”,选择 Send to Kindle。大约 10 到 30 分钟,Doocer 将完成图书制作并将图书推送到 Kindle。

仍有一些问题需要注意
Doocer目前处于beta测试阶段,还有一些bug,尤其是中文网站经常出现问题。好在Doocer官网有开发者对话频道,可以直接联系他帮忙解决。
自动化所有操作的过程是我认为 Doocer 最需要做的事情。Doocer可以像RSS工具一样抓取网页中更新的文章,但是要抓取新的文章并生成电子书并推送,仍然需要手动完成。如果整个过程可以自动化,RSS - MOBI - Kindle 一口气,相信它的用处会更好。
目前,Doocer 的所有功能都可以免费使用。
抓取网页生成电子书(一步步解析单个页面,得到该页书籍链接列表得到)
网站优化 • 优采云 发表了文章 • 0 个评论 • 98 次浏览 • 2022-03-13 00:12
2. 解析单个页面以获取该页面上的书籍链接列表
3. 转到书页
* 判断是否可以下载
* 如果可以下载,请下载所有格式的书籍
其次,为了获得爬虫的健壮性,我们需要保证每次网页加载成功,文件下载完成,我会在后面的内容中一步一步介绍。
实施过程
Selenium 可以模拟打开浏览器。在此之前,我们需要下载浏览器的驱动程序。在本文中,我们使用的是chrome浏览器,Firefox也是常用的浏览器。步骤类似,不再赘述。
硒的安装:
sudo pip install selenium
然后下载chrome的webdriver,直接保存到本地,比如/usr/bin,然后设置selenium的基本设置
import re#正则表达式
import random#随机选择
import subprocess# 执行bash命令
from multiprocessing import Pool#建立线程池,并行爬取加快速度
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设置代理,自动获得代理IP地址下面会解释,这里注释掉
#PROXY='1.82.216.134:80'
#chromeOptions.add_argument('--proxy-server=%s' % PROXY)
# url_start='http://www.kancloud.cn/explore/top'
#建立一个webdriver对象
driver = webdriver.Chrome(chrome_options=chromeOptions)
driver.get('http://www.kancloud.cn/digest/ ... %2339;)#用chrome打开这个网页
运行上面的代码,打开一个chrome标签,如下图:
点击下载按钮,我们看到有PDF、epub、mobi三个下载选项。为了模拟点击动作,我们需要获取元素的位置。这时候我们就可以使用chrome的inspect功能了,快捷键是 Ctrl+shift+I ,或者将鼠标悬停在下载上,右键选择inspect,效果如下:
选择右边高亮的代码,右键->复制->复制xpath,可以得到元素的xpath
//*[@id="manualDownload"]/span/b
然后使用webdriver本身的xpath搜索功能获取元素,并模拟点击操作
运行上面这句话,我们可以看到网站确实响应了,支持下载的电子书格式有3种。这一步点击下载按钮是必须的,否则直接点击epub会报 element not visible 的错误。接下来我们演示下载epub,鼠标悬停在epub上,右键查看,可以得到下载epub的xpath,同上
driver.find_element_by_xpath('//*[@id="manualDownload"]/div/div/ul/li[2]/a').click()
这样我们就可以把这本epub电子书下载到我们指定的路径了。
这是 Selenium 的基本应用。它还有一些其他定位元素的方法和模拟操作的功能,比如把网页往下拉,因为有些网站会根据用户的下拉情况来渲染网页,越往下拉,显示的内容越多。详情请查看 selenium 的官方文档。
我们对每一页的每一本书执行上述过程,然后我们可以爬取整个站点的书籍,前提是你的网速够快,运气够好。这是因为在持续爬取过程中会出现一些异常,例如
1. webdriver 将无法打开网页
2. 下载完成前打开下一个网页,导致webdriver负担过重,无法加载网页
3. 网站可能是基于IP地址的反爬虫
下一篇我们将解决以上问题,使用多进程加速(webdriver太慢,无法打开网页)。 查看全部
抓取网页生成电子书(一步步解析单个页面,得到该页书籍链接列表得到)
2. 解析单个页面以获取该页面上的书籍链接列表
3. 转到书页
* 判断是否可以下载
* 如果可以下载,请下载所有格式的书籍
其次,为了获得爬虫的健壮性,我们需要保证每次网页加载成功,文件下载完成,我会在后面的内容中一步一步介绍。
实施过程
Selenium 可以模拟打开浏览器。在此之前,我们需要下载浏览器的驱动程序。在本文中,我们使用的是chrome浏览器,Firefox也是常用的浏览器。步骤类似,不再赘述。
硒的安装:
sudo pip install selenium
然后下载chrome的webdriver,直接保存到本地,比如/usr/bin,然后设置selenium的基本设置
import re#正则表达式
import random#随机选择
import subprocess# 执行bash命令
from multiprocessing import Pool#建立线程池,并行爬取加快速度
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设置代理,自动获得代理IP地址下面会解释,这里注释掉
#PROXY='1.82.216.134:80'
#chromeOptions.add_argument('--proxy-server=%s' % PROXY)
# url_start='http://www.kancloud.cn/explore/top'
#建立一个webdriver对象
driver = webdriver.Chrome(chrome_options=chromeOptions)
driver.get('http://www.kancloud.cn/digest/ ... %2339;)#用chrome打开这个网页
运行上面的代码,打开一个chrome标签,如下图:
点击下载按钮,我们看到有PDF、epub、mobi三个下载选项。为了模拟点击动作,我们需要获取元素的位置。这时候我们就可以使用chrome的inspect功能了,快捷键是 Ctrl+shift+I ,或者将鼠标悬停在下载上,右键选择inspect,效果如下:
选择右边高亮的代码,右键->复制->复制xpath,可以得到元素的xpath
//*[@id="manualDownload"]/span/b
然后使用webdriver本身的xpath搜索功能获取元素,并模拟点击操作
运行上面这句话,我们可以看到网站确实响应了,支持下载的电子书格式有3种。这一步点击下载按钮是必须的,否则直接点击epub会报 element not visible 的错误。接下来我们演示下载epub,鼠标悬停在epub上,右键查看,可以得到下载epub的xpath,同上
driver.find_element_by_xpath('//*[@id="manualDownload"]/div/div/ul/li[2]/a').click()
这样我们就可以把这本epub电子书下载到我们指定的路径了。
这是 Selenium 的基本应用。它还有一些其他定位元素的方法和模拟操作的功能,比如把网页往下拉,因为有些网站会根据用户的下拉情况来渲染网页,越往下拉,显示的内容越多。详情请查看 selenium 的官方文档。
我们对每一页的每一本书执行上述过程,然后我们可以爬取整个站点的书籍,前提是你的网速够快,运气够好。这是因为在持续爬取过程中会出现一些异常,例如
1. webdriver 将无法打开网页
2. 下载完成前打开下一个网页,导致webdriver负担过重,无法加载网页
3. 网站可能是基于IP地址的反爬虫
下一篇我们将解决以上问题,使用多进程加速(webdriver太慢,无法打开网页)。
抓取网页生成电子书(问题的话()设置网站RSS输出方式)
网站优化 • 优采云 发表了文章 • 0 个评论 • 93 次浏览 • 2022-03-10 07:18
准备好 RSS 提要后,您可以在 Calibre 中添加它们。打开Calibre,在Calibre主界面顶部的功能图标中找到“抓取新闻”,点击右侧的向下箭头,在弹出的菜单中点击“添加自定义新闻源”。
在弹出的对话框中,点击【新建配方】按钮,切换到“添加自定义新闻源”对话框。在“订阅列表标题”中输入一个名称,例如“我的订阅”(此名称是一个类别名称,将收录一组 RSS 提要地址)。
“最老的文章”可以设置抓取文章的及时性。默认情况下,Calibre 只会在过去 7 天内抓取 文章。如果你想抢更多,你可以自定义更改天数。“每个源的最大 文章 秒数”设置要抓取的最大 文章 秒数。不过需要注意的是,这两个设置受限于网站 RSS的输出方式。比如有些网站的RSS只输出有限数量的最新的文章,所以无论在Caliber中如何设置都会受到这个限制,可能无法获取到指定的数量文章;
接下来,我们需要在“将新闻添加到订阅”中添加我们想要保留的 RSS 地址。在“Source Name”中输入RSS订阅的名称,如“Kindle Companion”;然后在“Source URL”中输入RSS地址,如“”;最后点击【添加来源】按钮,在“订阅列表中的新闻”中添加一个RSS订阅。在一个订阅列表中可以抓取多个RSS订阅,因此可以重复输入多个RSS订阅名称和来源网址并添加多次。
添加RSS提要地址后。点击右下角的【保存】按钮保存并返回“添加自定义动态消息”界面。如需修改,可在左侧列表中选择一项,然后点击【编辑此配方】按钮进行修改。如果要修改它,请单击[删除此配方]按钮将其删除。如果没有问题,可以点击【关闭】按钮返回Calibre主界面。
三、获取和推送
设置好 Feed 后,您就可以抓取新闻了。同样,在Calibre主界面上方的功能图标中找到“抓取新闻”,点击,弹出“定期新闻下载”对话框。在左侧列表中找到“自定义”类别,点击展开,可以找到刚刚添加的订阅列表。选择好之后,点击界面下方的【立即下载】按钮,Calibre就会开始爬取RSS内容。
抓取成功后,Calibre 会生成一本期刊格式的电子书,并自动存入图书馆。如果您设置了电子邮件推送,Calibre 还会自动将生成的电子书推送到云端,以便自动同步到您的 Kindle。
当然,除了这种手动爬取方式,你还可以通过“定时下载”来定时爬取,比如每周、每月或者每隔指定天数爬取RSS内容,但前提是你要保持电脑开机,让您的计算机保持在线状态。
另外需要注意的是,有些网站的RSS只输出摘要,所以Calibre只能抓取摘要内容;如果您订阅的 RSS 被屏蔽并且您的网络没有使用代理,则 Failed to crawl 成功。
如果你需要抓取的网站没有提供RSS feed,可以参考《Calibre使用教程:抓取网站页面制作电子书》中文章提供的方法编写脚本直接抓取网站的页面内容,制作电子书。 查看全部
抓取网页生成电子书(问题的话()设置网站RSS输出方式)
准备好 RSS 提要后,您可以在 Calibre 中添加它们。打开Calibre,在Calibre主界面顶部的功能图标中找到“抓取新闻”,点击右侧的向下箭头,在弹出的菜单中点击“添加自定义新闻源”。

在弹出的对话框中,点击【新建配方】按钮,切换到“添加自定义新闻源”对话框。在“订阅列表标题”中输入一个名称,例如“我的订阅”(此名称是一个类别名称,将收录一组 RSS 提要地址)。
“最老的文章”可以设置抓取文章的及时性。默认情况下,Calibre 只会在过去 7 天内抓取 文章。如果你想抢更多,你可以自定义更改天数。“每个源的最大 文章 秒数”设置要抓取的最大 文章 秒数。不过需要注意的是,这两个设置受限于网站 RSS的输出方式。比如有些网站的RSS只输出有限数量的最新的文章,所以无论在Caliber中如何设置都会受到这个限制,可能无法获取到指定的数量文章;
接下来,我们需要在“将新闻添加到订阅”中添加我们想要保留的 RSS 地址。在“Source Name”中输入RSS订阅的名称,如“Kindle Companion”;然后在“Source URL”中输入RSS地址,如“”;最后点击【添加来源】按钮,在“订阅列表中的新闻”中添加一个RSS订阅。在一个订阅列表中可以抓取多个RSS订阅,因此可以重复输入多个RSS订阅名称和来源网址并添加多次。

添加RSS提要地址后。点击右下角的【保存】按钮保存并返回“添加自定义动态消息”界面。如需修改,可在左侧列表中选择一项,然后点击【编辑此配方】按钮进行修改。如果要修改它,请单击[删除此配方]按钮将其删除。如果没有问题,可以点击【关闭】按钮返回Calibre主界面。
三、获取和推送
设置好 Feed 后,您就可以抓取新闻了。同样,在Calibre主界面上方的功能图标中找到“抓取新闻”,点击,弹出“定期新闻下载”对话框。在左侧列表中找到“自定义”类别,点击展开,可以找到刚刚添加的订阅列表。选择好之后,点击界面下方的【立即下载】按钮,Calibre就会开始爬取RSS内容。

抓取成功后,Calibre 会生成一本期刊格式的电子书,并自动存入图书馆。如果您设置了电子邮件推送,Calibre 还会自动将生成的电子书推送到云端,以便自动同步到您的 Kindle。

当然,除了这种手动爬取方式,你还可以通过“定时下载”来定时爬取,比如每周、每月或者每隔指定天数爬取RSS内容,但前提是你要保持电脑开机,让您的计算机保持在线状态。
另外需要注意的是,有些网站的RSS只输出摘要,所以Calibre只能抓取摘要内容;如果您订阅的 RSS 被屏蔽并且您的网络没有使用代理,则 Failed to crawl 成功。
如果你需要抓取的网站没有提供RSS feed,可以参考《Calibre使用教程:抓取网站页面制作电子书》中文章提供的方法编写脚本直接抓取网站的页面内容,制作电子书。
抓取网页生成电子书(网上无法下载的“小说在线阅读”内容?有种Python2.7基础知识)
网站优化 • 优采云 发表了文章 • 0 个评论 • 73 次浏览 • 2022-03-08 15:08
你还在为无法在线下载的“小说在线阅读”内容而烦恼吗?或者是一些文章的内容让你有采集的冲动,却找不到下载链接?你有没有想自己写一个程序来完成这一切的冲动?你是不是学了python,想找点东西炫耀一下自己,告诉别人“兄弟真棒!”?所以让我们开始吧!哈哈~
嗯,最近刚写了很多关于Yii的东西,想找点东西调整一下.... = =
本项目以研究为目的。在所有版权问题上,我们都站在作者一边。想看盗版小说的读者,要自己面对墙!
说了这么多,我们要做的就是从网页上爬下小说正文的内容。我们的研究对象是全本小说网....再次声明,我们不对任何版权负责....
一开始,做最基础的内容,即抓取某一章的内容。
环境:Ubuntu,Python 2.7
基础知识
本程序涉及到的知识点有几个,这里罗列一下,不赘述,会有一堆直接百度的疑惑。
1. urllib2 模块的请求对象,用于设置 HTTP 请求,包括获取的 url,以及伪装成浏览器代理。然后就是urlopen和read方法,很好理解。
2.chardet 模块,用于检测网页的编码。网页抓取数据时容易遇到乱码问题。为了判断网页是gtk编码还是utf-8,使用chardet的detect函数进行检测。使用Windows的同学可以在这里下载,解压到python的lib目录下。
3. decode函数将字符串从某种编码转换为unicode字符,encode将unicode字符转换为指定编码格式的字符串。
4. re 模块正则表达式的应用。搜索功能可以找到匹配正则表达式的项目,replace是替换匹配的字符串。
思路分析:
我们选择的网址是斗罗大陆第一章。可以查看网页的源码,会发现只有一个内容标签收录了所有章节的内容,所以可以使用正则表达式匹配内容标签并抓取。试着把这部分打印出来,你会发现很多
和 ,
换行,就是网页中的占位符,也就是空格,换成空格就行了。这一章的内容非常漂亮。为了完整起见,也使用正则来爬下标题。
程序
<p>
# -*- coding: utf-8 -*-
import urllib2
import re
import chardet
class Book_Spider:
def __init__(self):
self.pages = []
# 抓取一个章节
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()
#先检测网页的字符编码,最后统一转为 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('(.*?) 查看全部
抓取网页生成电子书(网上无法下载的“小说在线阅读”内容?有种Python2.7基础知识)
你还在为无法在线下载的“小说在线阅读”内容而烦恼吗?或者是一些文章的内容让你有采集的冲动,却找不到下载链接?你有没有想自己写一个程序来完成这一切的冲动?你是不是学了python,想找点东西炫耀一下自己,告诉别人“兄弟真棒!”?所以让我们开始吧!哈哈~
嗯,最近刚写了很多关于Yii的东西,想找点东西调整一下.... = =
本项目以研究为目的。在所有版权问题上,我们都站在作者一边。想看盗版小说的读者,要自己面对墙!
说了这么多,我们要做的就是从网页上爬下小说正文的内容。我们的研究对象是全本小说网....再次声明,我们不对任何版权负责....
一开始,做最基础的内容,即抓取某一章的内容。
环境:Ubuntu,Python 2.7
基础知识
本程序涉及到的知识点有几个,这里罗列一下,不赘述,会有一堆直接百度的疑惑。
1. urllib2 模块的请求对象,用于设置 HTTP 请求,包括获取的 url,以及伪装成浏览器代理。然后就是urlopen和read方法,很好理解。
2.chardet 模块,用于检测网页的编码。网页抓取数据时容易遇到乱码问题。为了判断网页是gtk编码还是utf-8,使用chardet的detect函数进行检测。使用Windows的同学可以在这里下载,解压到python的lib目录下。
3. decode函数将字符串从某种编码转换为unicode字符,encode将unicode字符转换为指定编码格式的字符串。
4. re 模块正则表达式的应用。搜索功能可以找到匹配正则表达式的项目,replace是替换匹配的字符串。
思路分析:
我们选择的网址是斗罗大陆第一章。可以查看网页的源码,会发现只有一个内容标签收录了所有章节的内容,所以可以使用正则表达式匹配内容标签并抓取。试着把这部分打印出来,你会发现很多
和 ,
换行,就是网页中的占位符,也就是空格,换成空格就行了。这一章的内容非常漂亮。为了完整起见,也使用正则来爬下标题。
程序
<p>
# -*- coding: utf-8 -*-
import urllib2
import re
import chardet
class Book_Spider:
def __init__(self):
self.pages = []
# 抓取一个章节
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()
#先检测网页的字符编码,最后统一转为 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('(.*?)
抓取网页生成电子书(如何用Python写成的电子书提取工具?软件帮你)
网站优化 • 优采云 发表了文章 • 0 个评论 • 80 次浏览 • 2022-03-08 07:10
KindleUnpack 是 Kindle 用户的电子书提取工具。该软件可以帮助您将kindle中的电子书提取到本地。该软件可用于提取Kindle电子书如mobi、azw3等格式文件中的HTML内容。、图像和元数据文件,并且可以按照 KindleGen 生成的电子书的标准和格式放置这些文件。
格式介绍:
KindleUnpack(原名mobiunpack)是一个用Python编写的小程序,起源于专业电子书论坛mobileread。可用于提取Kindle电子书如mobi、azw3等格式文件中的HTML内容、图片和元数据文件,并可以按照KindleGen生成的电子书的标准和形式放置这些文件。
对于 KF8 文件和混合 Mobi 和 KF8 文件,它可以生成单独的 Mobi 和 KF8 文件,以及收录在电子书中的原创源文件。另外,对于 KF8 文件,它也会生成一个 ePub 文件,但是如果生成的 HTML 文件不符合 EPUB 标准,那么生成的 ePub 文件也不会符合 EPUB 标准。对于亚马逊 .azw4 格式的电子书,它可以提取格式文件中收录的 PDF 文档。
KindleUnpack 对于普通人来说用处不大,但是对于喜欢制作电子书的小伙伴来说却非常有用。例如,如果你看到一本电子书漂亮的布局或样式,你可以用它来拆解电子书,分析它的源文件,并将你喜欢的功能移植到你的电子书项目中。这是一个非常有用的学习工具。
指示:
运行名为 KindleUnpack.pyw 的 Python 脚本,打开工作界面;
点击“未加密的Kindle电子书输入文件”后的【浏览...】按钮,选择电子书;
点击“输出目录”后的【浏览...】按钮,选择生成文件的输出目录;
其他选项一般可以默认保留,点击【开始】按钮,稍等片刻即可完成反汇编。 查看全部
抓取网页生成电子书(如何用Python写成的电子书提取工具?软件帮你)
KindleUnpack 是 Kindle 用户的电子书提取工具。该软件可以帮助您将kindle中的电子书提取到本地。该软件可用于提取Kindle电子书如mobi、azw3等格式文件中的HTML内容。、图像和元数据文件,并且可以按照 KindleGen 生成的电子书的标准和格式放置这些文件。
格式介绍:
KindleUnpack(原名mobiunpack)是一个用Python编写的小程序,起源于专业电子书论坛mobileread。可用于提取Kindle电子书如mobi、azw3等格式文件中的HTML内容、图片和元数据文件,并可以按照KindleGen生成的电子书的标准和形式放置这些文件。
对于 KF8 文件和混合 Mobi 和 KF8 文件,它可以生成单独的 Mobi 和 KF8 文件,以及收录在电子书中的原创源文件。另外,对于 KF8 文件,它也会生成一个 ePub 文件,但是如果生成的 HTML 文件不符合 EPUB 标准,那么生成的 ePub 文件也不会符合 EPUB 标准。对于亚马逊 .azw4 格式的电子书,它可以提取格式文件中收录的 PDF 文档。
KindleUnpack 对于普通人来说用处不大,但是对于喜欢制作电子书的小伙伴来说却非常有用。例如,如果你看到一本电子书漂亮的布局或样式,你可以用它来拆解电子书,分析它的源文件,并将你喜欢的功能移植到你的电子书项目中。这是一个非常有用的学习工具。
指示:
运行名为 KindleUnpack.pyw 的 Python 脚本,打开工作界面;
点击“未加密的Kindle电子书输入文件”后的【浏览...】按钮,选择电子书;
点击“输出目录”后的【浏览...】按钮,选择生成文件的输出目录;
其他选项一般可以默认保留,点击【开始】按钮,稍等片刻即可完成反汇编。
抓取网页生成电子书(如何使用网络爬虫?代理IP的优势是什么?)
网站优化 • 优采云 发表了文章 • 0 个评论 • 76 次浏览 • 2022-03-08 06:20
在大数据时代,信息采集是一项重要任务。如果信息采集单纯依靠人力,不仅效率低、麻烦,而且采集成本也会增加。网络爬虫可以代替人自动采集整理互联网上的数据信息,因其效率和速度而广受青睐。
现在很多网站都设置了反爬机制来拒绝网络爬虫,以保护自己的安全。如果要继续访问网站,需要使用爬虫IP。如果当前IP地址被屏蔽,您可以将其更改为新的IP地址,以保证爬虫的顺利运行。
与普通IP相比,爬虫代理IP的优势:
一、高效率、高质量的代理多为机房拨号VPS搭建,效率一般在90%以上,也就是提取的IP基本可以连上。
二是速度快。优质代理IP多为机房宽带。机房的宽带比较快。与普通代理相比,用户数量相对较少,因此速度更快。
三、高安全性,优质代理IP一般需要授权才能使用,要么绑定终端IP授权,要么使用账号密码验证,均支持代理IP,后台自动切换。
在爬取相关信息的过程中,如果之前的频率过高,会被网站的反爬机制检测到,反爬机制会通过你的IP识别网络爬虫。那么我们如何使用代理IP呢?
1、进入软件-提取代理ip
2、生成 API 链接 - 打开链接
3、查看IP地址-使用 查看全部
抓取网页生成电子书(如何使用网络爬虫?代理IP的优势是什么?)
在大数据时代,信息采集是一项重要任务。如果信息采集单纯依靠人力,不仅效率低、麻烦,而且采集成本也会增加。网络爬虫可以代替人自动采集整理互联网上的数据信息,因其效率和速度而广受青睐。
现在很多网站都设置了反爬机制来拒绝网络爬虫,以保护自己的安全。如果要继续访问网站,需要使用爬虫IP。如果当前IP地址被屏蔽,您可以将其更改为新的IP地址,以保证爬虫的顺利运行。
与普通IP相比,爬虫代理IP的优势:
一、高效率、高质量的代理多为机房拨号VPS搭建,效率一般在90%以上,也就是提取的IP基本可以连上。
二是速度快。优质代理IP多为机房宽带。机房的宽带比较快。与普通代理相比,用户数量相对较少,因此速度更快。
三、高安全性,优质代理IP一般需要授权才能使用,要么绑定终端IP授权,要么使用账号密码验证,均支持代理IP,后台自动切换。
在爬取相关信息的过程中,如果之前的频率过高,会被网站的反爬机制检测到,反爬机制会通过你的IP识别网络爬虫。那么我们如何使用代理IP呢?
1、进入软件-提取代理ip
2、生成 API 链接 - 打开链接
3、查看IP地址-使用
抓取网页生成电子书(.js的命令行工具/Git来制作精美的电子书工具)
网站优化 • 优采云 发表了文章 • 0 个评论 • 77 次浏览 • 2022-03-05 15:22
####GitBook 是一个基于 Node.js 的命令行工具,它使用 Github/Git 和 Markdown 创建精美的电子书,用于同步、共享和录制
####包格式:html、pdf(需要安装gitbook-pdf,效果不是很好)、epub、MOBI
现在只介绍html格式:
完整效果:
基本步骤:
以管理员身份安装
$ npm install gitbook-cli -g 或
$ cnpm install gitbook-cli -g
新建一个文件夹来存放这样的目录
README.md:简介
###Welcome
[外链图片转存失败(img-Fpt1DMpr-1563846800927)(/img/huge.jpeg)]
SUMMARY.md:生成目录组织
* [简介](README.md)
* [第一章](chapter1/README.md)
* [第一节](chapter1/node1/README.md)
* [第二章](chapter2/README.md)
* [结束](end/README.md)
在目录下运行$ gitbook init
如果运行下载依赖包,会报如下错误:
解决方法:你可以用管理员权限运行 $ gitbook -V
注意:这只是一种解决方案,可能还有其他方法
全部安装完成后,可以再次执行文件下的$ gitbook init
$tree:查看目录
$ gitbook serve: 监听页面,localhost:4000 或 $ gitbook serve -p 8080
$ gitbook build: 构建文件夹_book
注意:生成的html不能直接访问跳转,因为有json数据请求。可以被编译器读取,也可以通过搭建本地服务器来访问
构建到 github:
注意:构建到github,可以参考这个文章 查看全部
抓取网页生成电子书(.js的命令行工具/Git来制作精美的电子书工具)
####GitBook 是一个基于 Node.js 的命令行工具,它使用 Github/Git 和 Markdown 创建精美的电子书,用于同步、共享和录制
####包格式:html、pdf(需要安装gitbook-pdf,效果不是很好)、epub、MOBI
现在只介绍html格式:
完整效果:
基本步骤:
以管理员身份安装
$ npm install gitbook-cli -g 或
$ cnpm install gitbook-cli -g
新建一个文件夹来存放这样的目录
README.md:简介
###Welcome
[外链图片转存失败(img-Fpt1DMpr-1563846800927)(/img/huge.jpeg)]
SUMMARY.md:生成目录组织
* [简介](README.md)
* [第一章](chapter1/README.md)
* [第一节](chapter1/node1/README.md)
* [第二章](chapter2/README.md)
* [结束](end/README.md)
在目录下运行$ gitbook init
如果运行下载依赖包,会报如下错误:
解决方法:你可以用管理员权限运行 $ gitbook -V
注意:这只是一种解决方案,可能还有其他方法
全部安装完成后,可以再次执行文件下的$ gitbook init
$tree:查看目录
$ gitbook serve: 监听页面,localhost:4000 或 $ gitbook serve -p 8080
$ gitbook build: 构建文件夹_book
注意:生成的html不能直接访问跳转,因为有json数据请求。可以被编译器读取,也可以通过搭建本地服务器来访问
构建到 github:
注意:构建到github,可以参考这个文章
抓取网页生成电子书(国外网站➤5.超星网址)
网站优化 • 优采云 发表了文章 • 0 个评论 • 62 次浏览 • 2022-03-04 10:11
网址:
以“光催化”为例进行搜索,出现以下资源,包括书籍和专利,按更新时间排序。注册会员即可下载标准共享网络资源或微信。一般会员每天可以免费下载两次。VIP会员似乎可以无限下载。您可以根据情况决定是否花钱开通VIP。
➤5. 超级巨星
网址:
最常见的资源最容易被每个人忽视。大学一般都和超星合作,学术资源还是很多的。部分图书提供目录试读功能。很多时候,看目录就知道要不要继续看下去了。同时,您还可以使用馆际互借或文献传递功能,以及独秀和中国国家数字图书馆。
➤6. 上千个采集站
网址:
个人感觉本科生的教材比较多,研究生的书资源比较少。你可以试试看。无论如何,它是免费的。
➤7.电子书联盟
网址:
其他学科不清楚,但是化学材料的资源比较少,资源比较老,好在是免费的,可以无限下载。
国外网站
➤8. 图书馆创世纪
网址:
我觉得Library Genesis 是英文书籍的Sci-Hub。页面也很简单。找到资源后,点击资源栏最右侧镜像下的任意数字,会弹出一个新页面。单击顶部的“获取”以获取所需的资源。.
➤9. BookSC
网址:
在Bug Tribe点击英文电子书弹出BookSC页面,简洁干净,无广告污染。
➤10. HathiTrust 数字图书馆
网址:
HathiTrust 是一个学术和研究机构的合作计划,它汇集了来自世界各地的数字图书馆。找到资源后,直接点击,可以在线阅读,有的可以直接下载,点击左侧“下载整本书(PDF)”,会自行生成PDF文档;.
最后,我想强调的是,尽管近年来全球范围内关于出版物数字化和免费共享的呼声越来越高,但书籍的作者和编辑们在书籍上付出了很多努力。如果您有条件,请购买正版书籍并在线下载。资源仅供个人学习使用,不得用于商业用途! 查看全部
抓取网页生成电子书(国外网站➤5.超星网址)
网址:
以“光催化”为例进行搜索,出现以下资源,包括书籍和专利,按更新时间排序。注册会员即可下载标准共享网络资源或微信。一般会员每天可以免费下载两次。VIP会员似乎可以无限下载。您可以根据情况决定是否花钱开通VIP。
➤5. 超级巨星
网址:
最常见的资源最容易被每个人忽视。大学一般都和超星合作,学术资源还是很多的。部分图书提供目录试读功能。很多时候,看目录就知道要不要继续看下去了。同时,您还可以使用馆际互借或文献传递功能,以及独秀和中国国家数字图书馆。
➤6. 上千个采集站
网址:
个人感觉本科生的教材比较多,研究生的书资源比较少。你可以试试看。无论如何,它是免费的。
➤7.电子书联盟
网址:
其他学科不清楚,但是化学材料的资源比较少,资源比较老,好在是免费的,可以无限下载。
国外网站
➤8. 图书馆创世纪
网址:
我觉得Library Genesis 是英文书籍的Sci-Hub。页面也很简单。找到资源后,点击资源栏最右侧镜像下的任意数字,会弹出一个新页面。单击顶部的“获取”以获取所需的资源。.
➤9. BookSC
网址:
在Bug Tribe点击英文电子书弹出BookSC页面,简洁干净,无广告污染。
➤10. HathiTrust 数字图书馆
网址:
HathiTrust 是一个学术和研究机构的合作计划,它汇集了来自世界各地的数字图书馆。找到资源后,直接点击,可以在线阅读,有的可以直接下载,点击左侧“下载整本书(PDF)”,会自行生成PDF文档;.
最后,我想强调的是,尽管近年来全球范围内关于出版物数字化和免费共享的呼声越来越高,但书籍的作者和编辑们在书籍上付出了很多努力。如果您有条件,请购买正版书籍并在线下载。资源仅供个人学习使用,不得用于商业用途!
抓取网页生成电子书(calibre网站的在线帮助文档无疑是最基本的学习资源)
网站优化 • 优采云 发表了文章 • 0 个评论 • 82 次浏览 • 2022-03-01 12:00
calibre 可以抓取网页并生成各种格式的电子书。您可以通过输入一些数据使用GUI来实现简单的自动页面爬取。主要用于RSS。您还可以使用高级功能来实现更复杂的网页抓取。但是要爬取一些比较复杂的网页内容,还是需要自动写一个PYTHON程序,也就是写一个recipe。calibre网站的在线帮助文档无疑是最基本的学习资源。
学习资料主要有三本,分别是添加你喜欢的新闻网站介绍爬取网页的基本方法。食谱的 API 文档介绍了基本的食谱编写接口 (API),包括参数设置和方法调用。其实就是研究子类的接口,再研究一些菜谱例子。学完这些内容,应该就可以完成菜谱的编写了。当然,因为菜谱是用python写的,所以学习python是必不可少的。这里只想介绍一下我学习界面的心得:
写菜谱,学习设置界面参数是第一步。其实通过设置参数,可以爬取一些简单的网页,生成一定质量的电子书。
API中列出了所有的接口参数,一共48个,并给出了一些解释。更多细节可以看源码,源码前面部分,定义了这48个参数,有更详细的解释。这些参数有些是独立可设置的,有些是互斥的,设置一个,另一个不起作用。有些,如果设置为 true,需要实现一个方法。大致如下:
1、title =_('未知新闻来源')
对于生成的电子书的标题,通常是设置的。
2、描述=你''
使用几行文字来描述这个食谱爬取的内容。原本是对GUI界面下一系列菜谱作用的描述。
3、__author__= __appname__
这个食谱的作者
4、requires_version= (0,6,0)
执行此配方所需的最低版本 calibre,默认为 0.6.0
5、语言='und'
网页内容中使用的语言必须符合 ISO-639 编码,并且长度必须为 2-3 个字符。
6、max_articles_per_feed= 100
每个供稿的最大 文章 下载次数,在没有 文章 日期的情况下使用。默认为 100。文章oldest_article 参数通常在有日期时使用。
7、最旧的文章= 7.0
最早下载的 文章 是几天前。默认为 7 天,单位为天。如果 文章 有日期,则此参数有效。
8、递归= 0
网页中链接的递归级别数。默认情况下,不执行递归下载。
9、延迟=0
连续下载时,两次下载之间的时间间隔,以浮点数表示,单位为秒。
10、publication_type='未知'
发布类型,要爬取的内容类型,如报纸(newspaper)、杂志(magazine)、博客(blog)等。如果设置为None,则没有类型,该参数将作为元数据数据并写入 opf 文件。
11、simultaneous_downloads=5
同时下载的数量,如果服务器有限制,则设置为 1。delay`>0时,自动减为1,默认为5
12、超时= 120.0
从服务器下载的最大时间限制,超过这个时间就是超时。单位为秒,默认为 120 秒。
13、timefmt= ' [%a, %d %b%Y]
首页显示的日期格式,默认格式为日、月、年
14、feeds=无
用于下载的 feed,可以是 ``[url1,url2, ...]`` 或 ``[('title1', url1), ('title2', url2),. ..]`` 两种形式。
15、summary_length= 500
简短描述的最大字符数,默认为 500 个字符。
16、no_stylesheets=False
指示是否下载和使用原创网页的样式表。默认是下载使用。当设置为 True 时,原创样式表将不会被下载和使用。
17、remove_javascript=真
是否删除下载网页中的 javascript 脚本。默认是删除脚本。
18、needs_subscription=False
下载时是否登录,如果为True,GUI界面会询问登录用户名和密码。如果设置为“可选”,则登录名和密码是可选的。
19、center_navbar=真
生成的电子书的目录是否居中对齐。默认为居中对齐,False 为左对齐。
20、编码=无
网页的字符集编码不正确时要设置的字符集编码,通常是“latin1”和“cp1252”。如果设置为无,将自动检测编码。如果它是可调用的,则使用两个参数调用它,即配方对象和解码的源文件,并返回解码的源文件。
21、use_embedded_content=无
通常,我们会根据嵌入内容的长度猜测提要将嵌入所有 文章 内容。该参数具有三个值。当设置为 None 时,将进行猜测;当设置为 True 时,假定提要收录所有嵌入的 文章 内容;当设置为 False 时,提要不收录嵌入的 文章 内容。
22、articles_are_obfuscated=False
默认为False,文章更方便抓取。如果设置为True,则表示文章不易爬取,而较难爬取的文章页面将通过实现get_obfuscated_article方法进行处理。
23、reverse_article_order=False
当设置为 True 时,将反转提要中 文章 的排序。 查看全部
抓取网页生成电子书(calibre网站的在线帮助文档无疑是最基本的学习资源)
calibre 可以抓取网页并生成各种格式的电子书。您可以通过输入一些数据使用GUI来实现简单的自动页面爬取。主要用于RSS。您还可以使用高级功能来实现更复杂的网页抓取。但是要爬取一些比较复杂的网页内容,还是需要自动写一个PYTHON程序,也就是写一个recipe。calibre网站的在线帮助文档无疑是最基本的学习资源。
学习资料主要有三本,分别是添加你喜欢的新闻网站介绍爬取网页的基本方法。食谱的 API 文档介绍了基本的食谱编写接口 (API),包括参数设置和方法调用。其实就是研究子类的接口,再研究一些菜谱例子。学完这些内容,应该就可以完成菜谱的编写了。当然,因为菜谱是用python写的,所以学习python是必不可少的。这里只想介绍一下我学习界面的心得:
写菜谱,学习设置界面参数是第一步。其实通过设置参数,可以爬取一些简单的网页,生成一定质量的电子书。
API中列出了所有的接口参数,一共48个,并给出了一些解释。更多细节可以看源码,源码前面部分,定义了这48个参数,有更详细的解释。这些参数有些是独立可设置的,有些是互斥的,设置一个,另一个不起作用。有些,如果设置为 true,需要实现一个方法。大致如下:
1、title =_('未知新闻来源')
对于生成的电子书的标题,通常是设置的。
2、描述=你''
使用几行文字来描述这个食谱爬取的内容。原本是对GUI界面下一系列菜谱作用的描述。
3、__author__= __appname__
这个食谱的作者
4、requires_version= (0,6,0)
执行此配方所需的最低版本 calibre,默认为 0.6.0
5、语言='und'
网页内容中使用的语言必须符合 ISO-639 编码,并且长度必须为 2-3 个字符。
6、max_articles_per_feed= 100
每个供稿的最大 文章 下载次数,在没有 文章 日期的情况下使用。默认为 100。文章oldest_article 参数通常在有日期时使用。
7、最旧的文章= 7.0
最早下载的 文章 是几天前。默认为 7 天,单位为天。如果 文章 有日期,则此参数有效。
8、递归= 0
网页中链接的递归级别数。默认情况下,不执行递归下载。
9、延迟=0
连续下载时,两次下载之间的时间间隔,以浮点数表示,单位为秒。
10、publication_type='未知'
发布类型,要爬取的内容类型,如报纸(newspaper)、杂志(magazine)、博客(blog)等。如果设置为None,则没有类型,该参数将作为元数据数据并写入 opf 文件。
11、simultaneous_downloads=5
同时下载的数量,如果服务器有限制,则设置为 1。delay`>0时,自动减为1,默认为5
12、超时= 120.0
从服务器下载的最大时间限制,超过这个时间就是超时。单位为秒,默认为 120 秒。
13、timefmt= ' [%a, %d %b%Y]
首页显示的日期格式,默认格式为日、月、年
14、feeds=无
用于下载的 feed,可以是 ``[url1,url2, ...]`` 或 ``[('title1', url1), ('title2', url2),. ..]`` 两种形式。
15、summary_length= 500
简短描述的最大字符数,默认为 500 个字符。
16、no_stylesheets=False
指示是否下载和使用原创网页的样式表。默认是下载使用。当设置为 True 时,原创样式表将不会被下载和使用。
17、remove_javascript=真
是否删除下载网页中的 javascript 脚本。默认是删除脚本。
18、needs_subscription=False
下载时是否登录,如果为True,GUI界面会询问登录用户名和密码。如果设置为“可选”,则登录名和密码是可选的。
19、center_navbar=真
生成的电子书的目录是否居中对齐。默认为居中对齐,False 为左对齐。
20、编码=无
网页的字符集编码不正确时要设置的字符集编码,通常是“latin1”和“cp1252”。如果设置为无,将自动检测编码。如果它是可调用的,则使用两个参数调用它,即配方对象和解码的源文件,并返回解码的源文件。
21、use_embedded_content=无
通常,我们会根据嵌入内容的长度猜测提要将嵌入所有 文章 内容。该参数具有三个值。当设置为 None 时,将进行猜测;当设置为 True 时,假定提要收录所有嵌入的 文章 内容;当设置为 False 时,提要不收录嵌入的 文章 内容。
22、articles_are_obfuscated=False
默认为False,文章更方便抓取。如果设置为True,则表示文章不易爬取,而较难爬取的文章页面将通过实现get_obfuscated_article方法进行处理。
23、reverse_article_order=False
当设置为 True 时,将反转提要中 文章 的排序。
抓取网页生成电子书(微信公众号【出书啦】效果纸质书效果代码思路获取)
网站优化 • 优采云 发表了文章 • 0 个评论 • 432 次浏览 • 2022-03-01 11:23
[目录]
为您的个人微信朋友圈数据生成电子书!介绍
朋友圈留着你的数据,留着美好的回忆,记录着我们的每一点成长。从某种意义上说,发朋友圈就是记录生活,感受生活,见证每个人每一步的成长。
如此珍贵的记忆,何不保存呢?只需一杯咖啡时间,即可一键打印朋友圈。可以是纸质书也可以是电子书,可以长期保存,比拍照好,有时间足迹记忆。
现在,您可以选择打印电子书或纸质书。如果印刷纸质书,可以找第三方机构购买;如果你打印一本电子书,我们可以自己生成,这样可以节省很多钱。
部分截图
在开始编写代码思路之前,我们先来看看最终生成的效果。
电子书效果
纸书效果
获取微信书籍链接的代码思路
看完效果图,开始进入代码编写部分。首先,由于朋友圈数据的隐私性较高,如果手动获取,需要使用root安卓手机解密或解密PC机备份的聊天记录数据库,很难大多数人。所以我们的想法是根据现有数据打印电子书。
目前已经有第三方服务支持导出朋友圈数据,微信公众号【出版图书】提供了这样的服务。这种服务很有可能是基于安卓模拟器自动化的,我就不赘述了。
先关注公众号,然后开始制作微信书籍。这个过程将你添加为编辑的朋友,然后你向他打开朋友圈。过一会采集,小编会给你发一个专属链接,这个链接里的内容就是你的Personal Moments。
生成电子书
有了这个链接,我们开始打印页面的内容。
整个过程基于 selenium 自动化。如果你知道 selenium,那么这个过程其实很简单。
首先,为了引导用户输入微信图书链接,我们采用在浏览器中弹出输入文本框的形式,让用户输入数据。
首先在selenium中执行js代码,完成js代码中弹出输入文本框的功能。
进入微信图书链接
# 以网页输入文本框形式提示用户输入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 = """
// 弹出文本输入框,输入微信书的完整链接地址
target_url = prompt("请输入微信书的完整链接地址","https://");
// 动态创建一个input元素
input_target_url = document.createElement("input");
// 为其设置id,以便在程序中能够获取到它的值
input_target_url.id = "id_input_target_url";
// 插入到当前网页中
document.getElementsByTagName("body")[0].appendChild(input_target_url);
// 设置不可见
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代码的具体步骤为:弹出一个输入文本框,创建一个动态元素,随机命名元素的id,将动态元素插入到当前页面,这样就可以通过python 内容中的硒。
接下来,检测弹框是否存在于 selenium 中。如果不存在,则获取弹框的内容并执行下一步。流程代码如下:
# 执行以上js脚本
driver.execute_script(js)
# 判断弹出框是否存在
while(True):
try:
# 检测是否存在弹出框
alert = driver.switch_to.alert
time.sleep(0.5)
except:
# 如果抛异常,说明当前页面不存在弹出框,即用户点击了取消或者确定
break
# 获取用户输入的链接地址
target_url = WebDriverWait(driver, 20).until(EC.presence_of_element_located((By.ID, random_id)))
value = target_url.get_attribute('value')
# 删除空格
value = value.strip()
此时value的值就是弹出框返回的内容。(你可能会问,直接加value=微信书链接可以吗?其实>_header确实是可以的,通过selenium隐藏这个元素的代码如下:
# 隐藏导航栏,防止影响截图效果
js = 'document.querySelector("body > header").style.display="none";'
driver.execute_script(js)
我们也发现当前页面显示的数据只收录某月的朋友圈数据,而不是所有的朋友圈数据,那么如何显示所有的朋友圈数据呢?通过分析可以看出,当点击“下个月”按钮时,会显示一个新的元素,而原来的元素会被隐藏,隐藏的元素就是上个月的数据。所以我们只需要遍历到上个月,显示之前的所有元素,然后打印出来。那么,如何判断是上个月呢?我们也可以通过分析得知,当不是上个月时,“下个月”的类名是下个月,当是上个月时,“下个月”的类名是下个月禁用,所以我们可以检测它的类名,就知道是不是在上个月了。
# 判断当下一月控件的class name 是否为next-month disable,如果是,则说明翻到最后一月了
page_source = driver.page_source
# 每一个element代表每一页,将每一页中style的display属性改成block,即可见状态
for index, element in enumerate(element_left_list):
# ..在xpath中表示上一级的元素,也就是父元素
parent_element = element.find_element_by_xpath('..')
# 获取这个父元素的完整id
parent_element_id = parent_element.get_attribute('id')
# 将该父元素更改为可见状态
js = 'document.getElementById("{}").style.display="block";'.format(parent_element_id)
driver.execute_script(js)
但是,这种方式会出现问题。即使我们打印成功,我们也不难保证页面上的所有元素都加载完毕,所以有些元素打印后可能无法显示,导致不太好看。因此,需要判断加载何时结束。
通过分析我们知道,网页元素未加载时,会出现“加载中”的提示,而网页元素加载时,该元素是隐藏的。因此,我们可以通过判断元素是否隐藏来知道当前页面元素是否被加载。这部分代码如下:
# 等待当前页面所有数据加载完毕,正常情况下数据加载完毕后,这个‘加载中’元素会隐藏起来
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
但是我们也发现,在等待页面元素及时加载后,还是有一些图片没有显示出来。
这很令人困惑,为什么?通过分析我们还了解到,当这些图片处于加载状态时,类名是lazy-img。从字面意思上,我们大概可以猜到它的意思是延迟加载,也就是用户在那里滑动页面,直到加载完毕。,以节省服务器压力。
所以我们可以通过一个名为lazy-img的类滑动到每个元素来加载它。所以?一个合适的方法是通过js定位元素,直到所有类名为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,所以退出循环
break
其中document.getElementsByClassName("lazy-img")[0]是指document.getElementsByClassName("lazy-img")的第一个元素,scrollIntoView()是指滚动到该元素的位置
打印电子书
通过以上步骤,我们成功隐藏了一些可能影响外观的元素,同时也显示了所有需要的元素。接下来,是时候打印零件了。浏览器打印功能可以直接通过js代码调用,而且我们之前已经设置为自动打印pdf格式,所以会自动打印为pdf。但它打印到哪里?这里需要设置浏览器的默认存储位置,保存位置为当前目录。此步骤的代码如下:
# 默认下载、打印保存路径
'savefile.default_directory': os.getcwd()
# 调用chrome打印功能
driver.execute_script('window.print();')
打印后设置退出浏览器 driver.quit()
经测试,电子书为超清版,大小约为16MB,质量还不错。
如何运行
# 跳转到当前目录
cd 目录名
# 先卸载依赖库
pip uninstall -y -r requirement.txt
# 再重新安装依赖库
pip install -r requirement.txt
# 开始运行
python main.py
补充
完整版源码存放在github上,需要的可以下载
项目持续更新中,欢迎您star此项目 查看全部
抓取网页生成电子书(微信公众号【出书啦】效果纸质书效果代码思路获取)
[目录]
为您的个人微信朋友圈数据生成电子书!介绍
朋友圈留着你的数据,留着美好的回忆,记录着我们的每一点成长。从某种意义上说,发朋友圈就是记录生活,感受生活,见证每个人每一步的成长。
如此珍贵的记忆,何不保存呢?只需一杯咖啡时间,即可一键打印朋友圈。可以是纸质书也可以是电子书,可以长期保存,比拍照好,有时间足迹记忆。
现在,您可以选择打印电子书或纸质书。如果印刷纸质书,可以找第三方机构购买;如果你打印一本电子书,我们可以自己生成,这样可以节省很多钱。
部分截图
在开始编写代码思路之前,我们先来看看最终生成的效果。
电子书效果
纸书效果
获取微信书籍链接的代码思路
看完效果图,开始进入代码编写部分。首先,由于朋友圈数据的隐私性较高,如果手动获取,需要使用root安卓手机解密或解密PC机备份的聊天记录数据库,很难大多数人。所以我们的想法是根据现有数据打印电子书。
目前已经有第三方服务支持导出朋友圈数据,微信公众号【出版图书】提供了这样的服务。这种服务很有可能是基于安卓模拟器自动化的,我就不赘述了。
先关注公众号,然后开始制作微信书籍。这个过程将你添加为编辑的朋友,然后你向他打开朋友圈。过一会采集,小编会给你发一个专属链接,这个链接里的内容就是你的Personal Moments。
生成电子书
有了这个链接,我们开始打印页面的内容。
整个过程基于 selenium 自动化。如果你知道 selenium,那么这个过程其实很简单。
首先,为了引导用户输入微信图书链接,我们采用在浏览器中弹出输入文本框的形式,让用户输入数据。
首先在selenium中执行js代码,完成js代码中弹出输入文本框的功能。
进入微信图书链接
# 以网页输入文本框形式提示用户输入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 = """
// 弹出文本输入框,输入微信书的完整链接地址
target_url = prompt("请输入微信书的完整链接地址","https://");
// 动态创建一个input元素
input_target_url = document.createElement("input");
// 为其设置id,以便在程序中能够获取到它的值
input_target_url.id = "id_input_target_url";
// 插入到当前网页中
document.getElementsByTagName("body")[0].appendChild(input_target_url);
// 设置不可见
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代码的具体步骤为:弹出一个输入文本框,创建一个动态元素,随机命名元素的id,将动态元素插入到当前页面,这样就可以通过python 内容中的硒。
接下来,检测弹框是否存在于 selenium 中。如果不存在,则获取弹框的内容并执行下一步。流程代码如下:
# 执行以上js脚本
driver.execute_script(js)
# 判断弹出框是否存在
while(True):
try:
# 检测是否存在弹出框
alert = driver.switch_to.alert
time.sleep(0.5)
except:
# 如果抛异常,说明当前页面不存在弹出框,即用户点击了取消或者确定
break
# 获取用户输入的链接地址
target_url = WebDriverWait(driver, 20).until(EC.presence_of_element_located((By.ID, random_id)))
value = target_url.get_attribute('value')
# 删除空格
value = value.strip()
此时value的值就是弹出框返回的内容。(你可能会问,直接加value=微信书链接可以吗?其实>_header确实是可以的,通过selenium隐藏这个元素的代码如下:
# 隐藏导航栏,防止影响截图效果
js = 'document.querySelector("body > header").style.display="none";'
driver.execute_script(js)
我们也发现当前页面显示的数据只收录某月的朋友圈数据,而不是所有的朋友圈数据,那么如何显示所有的朋友圈数据呢?通过分析可以看出,当点击“下个月”按钮时,会显示一个新的元素,而原来的元素会被隐藏,隐藏的元素就是上个月的数据。所以我们只需要遍历到上个月,显示之前的所有元素,然后打印出来。那么,如何判断是上个月呢?我们也可以通过分析得知,当不是上个月时,“下个月”的类名是下个月,当是上个月时,“下个月”的类名是下个月禁用,所以我们可以检测它的类名,就知道是不是在上个月了。
# 判断当下一月控件的class name 是否为next-month disable,如果是,则说明翻到最后一月了
page_source = driver.page_source
# 每一个element代表每一页,将每一页中style的display属性改成block,即可见状态
for index, element in enumerate(element_left_list):
# ..在xpath中表示上一级的元素,也就是父元素
parent_element = element.find_element_by_xpath('..')
# 获取这个父元素的完整id
parent_element_id = parent_element.get_attribute('id')
# 将该父元素更改为可见状态
js = 'document.getElementById("{}").style.display="block";'.format(parent_element_id)
driver.execute_script(js)
但是,这种方式会出现问题。即使我们打印成功,我们也不难保证页面上的所有元素都加载完毕,所以有些元素打印后可能无法显示,导致不太好看。因此,需要判断加载何时结束。
通过分析我们知道,网页元素未加载时,会出现“加载中”的提示,而网页元素加载时,该元素是隐藏的。因此,我们可以通过判断元素是否隐藏来知道当前页面元素是否被加载。这部分代码如下:
# 等待当前页面所有数据加载完毕,正常情况下数据加载完毕后,这个‘加载中’元素会隐藏起来
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
但是我们也发现,在等待页面元素及时加载后,还是有一些图片没有显示出来。
这很令人困惑,为什么?通过分析我们还了解到,当这些图片处于加载状态时,类名是lazy-img。从字面意思上,我们大概可以猜到它的意思是延迟加载,也就是用户在那里滑动页面,直到加载完毕。,以节省服务器压力。
所以我们可以通过一个名为lazy-img的类滑动到每个元素来加载它。所以?一个合适的方法是通过js定位元素,直到所有类名为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,所以退出循环
break
其中document.getElementsByClassName("lazy-img")[0]是指document.getElementsByClassName("lazy-img")的第一个元素,scrollIntoView()是指滚动到该元素的位置
打印电子书
通过以上步骤,我们成功隐藏了一些可能影响外观的元素,同时也显示了所有需要的元素。接下来,是时候打印零件了。浏览器打印功能可以直接通过js代码调用,而且我们之前已经设置为自动打印pdf格式,所以会自动打印为pdf。但它打印到哪里?这里需要设置浏览器的默认存储位置,保存位置为当前目录。此步骤的代码如下:
# 默认下载、打印保存路径
'savefile.default_directory': os.getcwd()
# 调用chrome打印功能
driver.execute_script('window.print();')
打印后设置退出浏览器 driver.quit()
经测试,电子书为超清版,大小约为16MB,质量还不错。
如何运行
# 跳转到当前目录
cd 目录名
# 先卸载依赖库
pip uninstall -y -r requirement.txt
# 再重新安装依赖库
pip install -r requirement.txt
# 开始运行
python main.py
补充
完整版源码存放在github上,需要的可以下载
项目持续更新中,欢迎您star此项目
抓取网页生成电子书( Requests-html快速指南发送一个GET请求:Requests(图) )
网站优化 • 优采云 发表了文章 • 0 个评论 • 74 次浏览 • 2022-02-27 15:10
Requests-html快速指南发送一个GET请求:Requests(图)
)
前两天无意中发现了一个可以免费下载电子书的网站,引起了我的采集瘾,迫不及待地想下载这些书。碰巧不久前 requests 的作者 kennethreitz 有一个新的库 requests-html,它不仅可以请求网页,还可以解析 HTML 文档。事不宜迟,让我们开始吧。
安装
安装很简单,只需执行:
pip install requests-html
而已。
分析页面结构
通过查看浏览器中的元素,可以发现这本电子书网站是用WordPress构建的。主页列表元素非常简单和规则。
所以我们可以通过查找 .entry-title > a 得到所有图书详情页的链接,然后我们到详情页找到下载链接,如下图
可以发现.download-links > a中的链接就是该书的下载链接。回到列表页面,可以发现站点有700多个页面,所以我们可以循环列表获取所有的下载链接。
Requests-html 快速指南
发送 GET 请求:
from requests_html import HTMLSession
session = HTMLSession()
r = session.get('https://python.org/')
Requests-html 的方便之处在于它解析 html 就像使用 jQuery 一样容易,例如:
# 获取页面的所有链接可以这样写:
r.html.links
# 会返回 {'//docs.python.org/3/tutorial/', '/about/apps/'}
# 获取页面的所有的绝对链接:
r.html.absolute_links
# 会返回 {'https://github.com/python/pyth ... 39%3B, 'https://docs.python.org/3/tutorial/'}
# 通过 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学习资料可以加群: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"
]
# 获取当前列表页所有图书链接
def get_list(url):
response = session.get(url)
all_link = response.html.find('.entry-title a') # 获取页面所有图书详情链接
for link in all_link:
getBookUrl(link.attrs['href'])
# 获取图书下载链接
def getBookUrl(url):
response = session.get(url)
l = response.html.find('.download-links a', first=True)
if l is not None: # 运行后发现有的个别页面没有下载链接,这里加个判断
link = l.attrs['href'];
download(link)
#下载图书
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 # 文件路径写死了,运行时当前目录必须有名 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')
# 如果文件大小不存在,则直接写入返回的文本
if total_length is None:
f.write(response.content)
else:
# 下载进度条
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)) ) # 打印进度条
sys.stdout.flush()
print(filename + '下载完成!')
if __name__ == '__main__':
#从这运行,应为知道列表总数,所以偷个懒直接开始循环
for x in range(1,756):
print('当前页面: '+ str(x))
get_list(list_url+str(x))
运行结果:
查看全部
抓取网页生成电子书(
Requests-html快速指南发送一个GET请求:Requests(图)
)
前两天无意中发现了一个可以免费下载电子书的网站,引起了我的采集瘾,迫不及待地想下载这些书。碰巧不久前 requests 的作者 kennethreitz 有一个新的库 requests-html,它不仅可以请求网页,还可以解析 HTML 文档。事不宜迟,让我们开始吧。
安装
安装很简单,只需执行:
pip install requests-html
而已。
分析页面结构
通过查看浏览器中的元素,可以发现这本电子书网站是用WordPress构建的。主页列表元素非常简单和规则。
所以我们可以通过查找 .entry-title > a 得到所有图书详情页的链接,然后我们到详情页找到下载链接,如下图
可以发现.download-links > a中的链接就是该书的下载链接。回到列表页面,可以发现站点有700多个页面,所以我们可以循环列表获取所有的下载链接。
Requests-html 快速指南
发送 GET 请求:
from requests_html import HTMLSession
session = HTMLSession()
r = session.get('https://python.org/')
Requests-html 的方便之处在于它解析 html 就像使用 jQuery 一样容易,例如:
# 获取页面的所有链接可以这样写:
r.html.links
# 会返回 {'//docs.python.org/3/tutorial/', '/about/apps/'}
# 获取页面的所有的绝对链接:
r.html.absolute_links
# 会返回 {'https://github.com/python/pyth ... 39%3B, 'https://docs.python.org/3/tutorial/'}
# 通过 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学习资料可以加群: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"
]
# 获取当前列表页所有图书链接
def get_list(url):
response = session.get(url)
all_link = response.html.find('.entry-title a') # 获取页面所有图书详情链接
for link in all_link:
getBookUrl(link.attrs['href'])
# 获取图书下载链接
def getBookUrl(url):
response = session.get(url)
l = response.html.find('.download-links a', first=True)
if l is not None: # 运行后发现有的个别页面没有下载链接,这里加个判断
link = l.attrs['href'];
download(link)
#下载图书
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 # 文件路径写死了,运行时当前目录必须有名 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')
# 如果文件大小不存在,则直接写入返回的文本
if total_length is None:
f.write(response.content)
else:
# 下载进度条
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)) ) # 打印进度条
sys.stdout.flush()
print(filename + '下载完成!')
if __name__ == '__main__':
#从这运行,应为知道列表总数,所以偷个懒直接开始循环
for x in range(1,756):
print('当前页面: '+ str(x))
get_list(list_url+str(x))
运行结果:
抓取网页生成电子书(软件介绍王子网页转换小精灵(图)的软件特色)
网站优化 • 优采云 发表了文章 • 0 个评论 • 89 次浏览 • 2022-02-27 07:16
软件介绍
王子网页转换精灵是一款简单易用的网页转换小程序,支持网页制作、网页批量转换、电子书制作、简繁体转换、文件格式转换、文件分割合并、文件加密和解密等功能。将网页内容转换为文本或快速将文本转换为网页可以快速完成。
软件功能
1、 将文本文件批量转换为web文件(txt等转htm)
2、网页文件批量转成文本文件(htm等转成txt)
3、Word、EXCEL、POWERPOINT文档批量转换成web文件(doc xls ppt等转换成htm)
4、图片文件、FLASH、mp3、wmv文件批量转换为网页(jpg gif swf mp3 wmv等--> htm)
5、支持WORD(doc文件)一步生成电子书(梦寐以求的功能吧?哈哈……)
6、可以作为文本文件使用的电子书创作工具软件。(并选择 Web 模板或 CSS)
7、支持一步将图片文件编译成电子相册。(并且可以选择电子相册模板或CSS)
8、支持mht文件一键生成电子书
9、网页颜色选择功能。可以捕获屏幕任何可见部分的颜色代码;目前以三种格式捕获颜色
10、网页批量压缩功能。选择性或批量压缩网页文件
11、批量加密文件,也可以解密文件。
12、批量拆分文件,也可以合并文件。
13、文档合并功能。支持多种文件格式合并为五种格式之一,HTML、TXT、RTF、DOC、XML
14、支持HTML网页文件一键生成电子书。
15、支持简繁体中文转换(GB2312->BIG5 BIG5->GB2312)
16、网页特效采集与管理功能。并且可以方便的批量插入网页
17、反编译 CHM 电子书。
18、在线搜索功能。集成强大的中文搜索引擎---百度搜索
19、已经提供了几个 CSS 和模板。你也可以自己写。让过渡更随意
20、提供从html文件生成电子书的两个选项
21、支持ppt(powerpoint)文件一步生成电子书
22、支持xls(excel)文件一键生成电子书
23、文字和网页文字的批量替换
24、HTML TXT RTF DOC XML等格式可以任意相互转换
25、除了转换上面列出的文件类型,还可以自己添加转换类型
安装方式
1、先等待王子网页转换精灵下载完成
2、使用压缩软件解压文件
3、双击运行“PrinceSetup_nh.exe”开始安装
4、安装完成后可以使用自定义安装目录 查看全部
抓取网页生成电子书(软件介绍王子网页转换小精灵(图)的软件特色)
软件介绍
王子网页转换精灵是一款简单易用的网页转换小程序,支持网页制作、网页批量转换、电子书制作、简繁体转换、文件格式转换、文件分割合并、文件加密和解密等功能。将网页内容转换为文本或快速将文本转换为网页可以快速完成。

软件功能
1、 将文本文件批量转换为web文件(txt等转htm)
2、网页文件批量转成文本文件(htm等转成txt)
3、Word、EXCEL、POWERPOINT文档批量转换成web文件(doc xls ppt等转换成htm)
4、图片文件、FLASH、mp3、wmv文件批量转换为网页(jpg gif swf mp3 wmv等--> htm)
5、支持WORD(doc文件)一步生成电子书(梦寐以求的功能吧?哈哈……)
6、可以作为文本文件使用的电子书创作工具软件。(并选择 Web 模板或 CSS)
7、支持一步将图片文件编译成电子相册。(并且可以选择电子相册模板或CSS)
8、支持mht文件一键生成电子书
9、网页颜色选择功能。可以捕获屏幕任何可见部分的颜色代码;目前以三种格式捕获颜色
10、网页批量压缩功能。选择性或批量压缩网页文件
11、批量加密文件,也可以解密文件。
12、批量拆分文件,也可以合并文件。
13、文档合并功能。支持多种文件格式合并为五种格式之一,HTML、TXT、RTF、DOC、XML
14、支持HTML网页文件一键生成电子书。
15、支持简繁体中文转换(GB2312->BIG5 BIG5->GB2312)
16、网页特效采集与管理功能。并且可以方便的批量插入网页
17、反编译 CHM 电子书。
18、在线搜索功能。集成强大的中文搜索引擎---百度搜索
19、已经提供了几个 CSS 和模板。你也可以自己写。让过渡更随意
20、提供从html文件生成电子书的两个选项
21、支持ppt(powerpoint)文件一步生成电子书
22、支持xls(excel)文件一键生成电子书
23、文字和网页文字的批量替换
24、HTML TXT RTF DOC XML等格式可以任意相互转换
25、除了转换上面列出的文件类型,还可以自己添加转换类型
安装方式
1、先等待王子网页转换精灵下载完成
2、使用压缩软件解压文件
3、双击运行“PrinceSetup_nh.exe”开始安装
4、安装完成后可以使用自定义安装目录
抓取网页生成电子书(这是最好转换为PDF后的效果怎么样?怎么用?)
网站优化 • 优采云 发表了文章 • 0 个评论 • 69 次浏览 • 2022-02-26 18:22
大路最近遇到一个问题。有些网页上的数据需要离线保存备份,但是各种剪辑工具并不能完全抓取完整的网页,所以不知道能不能转成PDF保存。
注意,这是在大陆搜索了大约7到8个在线工具后,选择了一个各方面都满足需求、使用频率低、用量少的工具。但绝对不是最好的,如果你知道更好的工具,请留言告诉我
至于为什么要保存到本地阅读,其实我是想用记事本保存的,但是效果很差,几乎看不懂。本地存储是因为这几年内容太多变成404了。原来的网络采集夹已成为孤岛。除了采集夹本身,大部分链接都死了,很尴尬。.
不过大路转成PDF后还是把PDF放在记事本里,毕竟方便
Pdf人群
Pdfcrowd 是一个在线文档转换工具,支持将网页转换为PDF和图片,可以是URL、HTML文件或HTML代码
可以使用了,使用默认配置,直接输入网址,点击转换即可,可以直接下载,也可以在线阅读,非常方便。
但是转换后的PDF会在每一页的末尾加一个小尾巴,对个人使用是无害的,商业应用请慎重。
例子
下面是使用 Pdfcrowd 转换为 PDF 的效果。注意中间的黑框是PDF分页,不是bug
有相同需求的同学可以试试,Pdfcrowd网站:
另外,本文的重点是,如果您有其他建议,请尽快发送过来。 查看全部
抓取网页生成电子书(这是最好转换为PDF后的效果怎么样?怎么用?)
大路最近遇到一个问题。有些网页上的数据需要离线保存备份,但是各种剪辑工具并不能完全抓取完整的网页,所以不知道能不能转成PDF保存。
注意,这是在大陆搜索了大约7到8个在线工具后,选择了一个各方面都满足需求、使用频率低、用量少的工具。但绝对不是最好的,如果你知道更好的工具,请留言告诉我
至于为什么要保存到本地阅读,其实我是想用记事本保存的,但是效果很差,几乎看不懂。本地存储是因为这几年内容太多变成404了。原来的网络采集夹已成为孤岛。除了采集夹本身,大部分链接都死了,很尴尬。.
不过大路转成PDF后还是把PDF放在记事本里,毕竟方便
Pdf人群
Pdfcrowd 是一个在线文档转换工具,支持将网页转换为PDF和图片,可以是URL、HTML文件或HTML代码
可以使用了,使用默认配置,直接输入网址,点击转换即可,可以直接下载,也可以在线阅读,非常方便。
但是转换后的PDF会在每一页的末尾加一个小尾巴,对个人使用是无害的,商业应用请慎重。
例子
下面是使用 Pdfcrowd 转换为 PDF 的效果。注意中间的黑框是PDF分页,不是bug
有相同需求的同学可以试试,Pdfcrowd网站:
另外,本文的重点是,如果您有其他建议,请尽快发送过来。
抓取网页生成电子书(Python解释器及丰富的标准库模块源码或机器码源码)
网站优化 • 优采云 发表了文章 • 0 个评论 • 72 次浏览 • 2022-02-24 16:07
Python官方文档(中文版)
Python 是一种易于学习但功能强大的编程语言。它提供了高效的高级数据结构,以及简单高效的面向对象编程。Python 优雅的语法和动态类型,以及解释语言的性质,使其成为大多数平台上脚本和快速应用程序开发的理想语言。Python解释器及其丰富的标准库以源代码或机器码的形式提供,适用于各大系统平台的版本可从Python官网免费获取,并可免费分发。这个 网站 还收录发布页面或许多免费第三方 Python 模块、程序和工具的链接,以及其他文档。Python 解释器易于扩展,并且可以使用 C 或 C++(或其他可以从 C 调用的语言)扩展新的函数和数据类型。Python 也可以用作可定制软件中的扩展语言。本教程对 Python 语言和系统的基本概念和功能进行了非正式的介绍。最好有一个 Python 解释器准备好边看边练习,但是所有的例子都是独立的,所以本教程也可以离线阅读。有关标准对象和模块,请参阅 Python 标准库。Python 语言参考提供了更正式的语言参考。想写 C 或 C++ 扩展的可以参考扩展和嵌入 Python 解释器和 Python/C API 参考手册。也有不少书籍深入解释了 Python。本教程并未完全涵盖所有功能,甚至可能不会涵盖常用功能。本教程仅涵盖 Python 最显着的特性,并将让您体验该语言的风格特性。完成本教程后,您将能够阅读和编写 Python 模块和程序,并开始学习更多 Python 库模块,详情请参阅 Python 标准库。
立即下载 查看全部
抓取网页生成电子书(Python解释器及丰富的标准库模块源码或机器码源码)
Python官方文档(中文版)
Python 是一种易于学习但功能强大的编程语言。它提供了高效的高级数据结构,以及简单高效的面向对象编程。Python 优雅的语法和动态类型,以及解释语言的性质,使其成为大多数平台上脚本和快速应用程序开发的理想语言。Python解释器及其丰富的标准库以源代码或机器码的形式提供,适用于各大系统平台的版本可从Python官网免费获取,并可免费分发。这个 网站 还收录发布页面或许多免费第三方 Python 模块、程序和工具的链接,以及其他文档。Python 解释器易于扩展,并且可以使用 C 或 C++(或其他可以从 C 调用的语言)扩展新的函数和数据类型。Python 也可以用作可定制软件中的扩展语言。本教程对 Python 语言和系统的基本概念和功能进行了非正式的介绍。最好有一个 Python 解释器准备好边看边练习,但是所有的例子都是独立的,所以本教程也可以离线阅读。有关标准对象和模块,请参阅 Python 标准库。Python 语言参考提供了更正式的语言参考。想写 C 或 C++ 扩展的可以参考扩展和嵌入 Python 解释器和 Python/C API 参考手册。也有不少书籍深入解释了 Python。本教程并未完全涵盖所有功能,甚至可能不会涵盖常用功能。本教程仅涵盖 Python 最显着的特性,并将让您体验该语言的风格特性。完成本教程后,您将能够阅读和编写 Python 模块和程序,并开始学习更多 Python 库模块,详情请参阅 Python 标准库。
立即下载