抓取网页生成电子书(Github博文地址,此处更新可能不是很及时。。)

优采云 发布时间: 2021-09-24 08:17

  抓取网页生成电子书(Github博文地址,此处更新可能不是很及时。。)

  Github 博文地址,这里更新可能不是很及时。1.背景

  最近发现算法和数据结构掉了不少(其实大学没好好学习,囧rz)。考虑到最近的项目结构越来越复杂,就用它来实践自己的想法,打算复习一下数据结构和算法。. 结合最近的英语学习,然后自己干脆用英语。然后选择一本参考书《Java 中的数据结构和算法》。

  起初,它非常费力,所以请慢慢来。因为之前有翻书的习惯,所以去书所附的官网,发现所附的PDF文件其实还不错,图文并茂。是很好的理解资料,所以要果断下载。不过,尼玛,原来还有很多。一个一个的救他们,真的很可怕。想想如何下载它们。

  2.实现

  考虑到目前为止你所学和理解的所有语言,可以用来实现,并将级别安排如下:

  Java/Android 熟悉 C# 熟悉 Python 熟悉语法 Javascript 熟悉一些 C/C++ 熟悉语法

  为了实现这一点,当然是最简单、最快和最好的。考虑到大学一直在使用C#,为什么不使用它呢?但是发现OSX平台只能使用Mono,不得不重新熟悉一下。考虑到所需的时间,Java 实现并不快。我对Javascript不熟悉,好像可以用node.js来写(atom用的)。陌生。C/C++很多年没用了,要实现的代码很多,特别麻烦。考虑到前段时间正好在Codecademy学了语法,就用它来练习吧。

  好的,我肯定会使用 Python。后续就是如何请求网络,解析网页的html标签,提取下载链接,下载文件。虽然我不明白这些是如何在 Python 中实现的,但过程是确定的。按照流程到网站找一个现成的。原理这里不研究,实现功能即可。

  下一步就是用各种搜索引擎搜索东西,谷歌可以,百度也可以(不同的引擎有不同的侧重点)。不要忘记目的是什么,搜索相关信息。

  好的,搜索之后,一定要从网上请求网页下载请求,BeautifulSoup解析html,提取下载链接BeautifulSoup,下载文档(stackoverflow里找到了一段下载文件的代码)。

  然后他们将它们组合在一起。组合后的代码如下:

  

  

   1 #file-name: pdf_download.py

2 __author__ = 'rxread'

3 import requests

4 from bs4 import BeautifulSoup

5

6

7 def download_file(url, index):

8 local_filename = index+"-"+url.split('/')[-1]

9 # NOTE the stream=True parameter

10 r = requests.get(url, stream=True)

11 with open(local_filename, 'wb') as f:

12 for chunk in r.iter_content(chunk_size=1024):

13 if chunk: # filter out keep-alive new chunks

14 f.write(chunk)

15 f.flush()

16 return local_filename

17

18 #http://ww0.java4.datastructures.net/handouts/

19 root_link="http://ww0.java4.datastructures.net/handouts/"

20 r=requests.get(root_link)

21 if r.status_code==200:

22 soup=BeautifulSoup(r.text)

23 # print soup.prettify()

24 index=1

25 for link in soup.find_all('a'):

26 new_link=root_link+link.get('href')

27 if new_link.endswith(".pdf"):

28 file_path=download_file(new_link,str(index))

29 print "downloading:"+new_link+" -> "+file_path

30 index+=1

31 print "all download finished"

32 else:

33 print "errors occur."

  查看代码

  运行以下代码将所有pdf文档下载到本地。

  

  

  1 python pdf_download.py

  查看代码

  3.优化

  30多行代码,全部搞定。它真的简洁明了。果然,用 Python 做一些脚本任务还是不错的。已使用它下载了 41 个文档。

  一开始下载的文件没有序列号,看的时候不知道顺序,所以在文件名前加了一个序列号。

  其他优化部分可以参考如下:

  考虑到当前函数的一些异常错误没有处理,需要稍后处理。功能未完全封装,不支持下载的文件类型。这可以根据您将来的需要进行扩展。这样在下载的文件少的时候可能还好,但是如果文件多,就需要使用多线程(数量合适)或者线程池来下载,加快下载速度。有的写可能不符合python语法规范,当然写和不写的区别已经是0和1了。其他的细节,比如pdf可能是大写的PDF。4.附录“Java 中的数据结构和算法”(Michael T. Goodrich、Roberto Tamassia)下载或

  下面两个网站是好书下载网站。如果可能,您应该购买正版书籍以支持作者。

  一般我会先下载电子书,如果合适再买纸质版。Python 语法入门

  就是这样。

  本文来自RxRead的博客,欢迎转载,如转载请注明。

  欢迎共同探讨。

0 个评论

要回复文章请先登录注册


官方客服QQ群

微信人工客服

QQ人工客服


线