原文地址:Python 爬虫 简单实现 (爬取下载链接) - 简书
项目地址:https://github.com/Kulbear/All-IT-eBooks-Spider
这几日和朋友搜索东西的时候无意间发现了一个国外的存有大量PDF格式电子书的网站。其实我相当奇怪在国外版权管控如此严的环境下这个网站是如何拿到这么多电子书的,而且全是正版样式的PDF,目录索引一应俱全,没有任何影印和扫描的版本c加加和python哪个值得学。
今天要做的事情就是爬取All IT eBooks这个网站上面PDF的下载链接了。
准备工作
-
安装Python 3.5.X
-
或者选择 Anaconda 下载页
这个项目(姑且叫项目)的结构十分简单,要爬取的网站结构设计也十分清晰,所以我们不需要用任何第三方库!
分析网页代码并提取
其实这个简单的爬虫需要做的事情仅仅是爬取目标网页的源代码(一般是HTML),提取自己需要的有效信息,再做进一步使用。
点击每本书或者标题以后,会进入到每本书的详细资料页面,并且有一个十分明显的Download PDF的按钮(这里我就不截图了)。
比如某本书详细页面的链接(不在上图中,找了一本链接比较短的书):
http://www.allitebooks.com/big-data/
首先我们要拿到每个书detail页面的链接,然后通过这个链接进入到具体的页面,再找寻下载的链接。
多检查几个链接我们可以发现首页上的每本书详细页面的链接很容易找到,每本书的内容都是一个article的node里所包含的,例如:
很容易就可以找到这本书的链接在第一层div的第一个子node上
仔细观察整个网页源码后发现,唯独这个带有书detail页链接的tag里有这条
那么现在就很简单了,我们有以下几个选择来提取这个链接:
- BeautifulSoup
- 正则表达式(Regular Expression)
- 其他…
BeautifulSoup这里不过多做叙述,简单来说,这个库可以帮你很好的分解HTML的DOM结构,而正则表达式则是Ultimate Solution,可以匹配任何符合条件的字符串,这里我们选用正则表达式(我也只学过皮毛,不过解决这次的问题只需要5分钟入门级就可以),具体正则教程可以参见网上的资源,比如 这里。
先推荐一个在线检测正则的网站 Regex101
匹配刚才那个网页链接所需要的正则表达式如上,现在我们来开始Python代码的部分:
以上代码能够将网页源码解码并返回我们需要的url_list, 其中re.findall(…)这一部分的作用是,找到doc中所有符合BOOK_LINK_PATTERN的部分并return一个list出来,转换为set只是为了去重,又在之后重新转回为了list为了方便遍历。
仅仅抓取第一页显然不够,所以我们加入对页码的遍历,如下:
这里并没有对可能出现的Error做处理,我们稍后补上。
至此,我们的程序已经可以抓取这个网站所有页面里的书detail页面的链接了(理论上)
具体到每个页面以后的工作变得十分简单,通过访问每本书的detail页面,检查源代码,可以很轻松的提取出页面里Download PDF按钮对应的下载链接。
其中,
就是我们需要的部分了。
故技重施,使用如下的正则表达式匹配这一段HTML代码:
这段代码就不分解放出了,自己动手吧(源码和Github链接在最后)。
(其实是因为我是写完了整个代码以后才返回来写这个文章,现在懒得拆了……)
小结
当然,这个简单的程序只是一个最最基本的小爬虫。离枝繁叶茂真正功能的爬虫还差很多。多数网站都有多少不等的反爬虫机制,比如单位时间内单一IP的方位次数限制等等。通常网站会有一个robots.txt文件,规定了针对爬虫的要求,比如能不能使用爬虫。这个文件一般在www.hostname.com/robots.txt这个格式的网址可以直接查看,比如我们这次爬取的网站
应对不同网站的反爬虫机制,我们可以选择增加Header,随机Header,随机IP等很多方法来绕开,当你大量或者高频爬取一些网站的同时,如果可以,别忘了给网站拥有者做一些贡献(比如之前爬取Wiki的时候,捐赠了5刀…),以缓解网站作者维持服务器的压力。
源码
Github: https://github.com/JiYangE/All-IT-eBooks-Spider
请尽情的鞭笞Star我吧!
趁着午休的一小时赶工出来的代码,也没备注重构修改过,结构略乱,单一指责根本没有,我不管,能打仗的兵就是好兵,各位凑活一下看,逻辑非常简单
文件1 crawler.py
文件2 conf.py
运行结果文件 result.txt 内容:
再废话两句
Python的功能日益强大起来,有很多现成的爬虫框架可以学习,在熟练网络协议和抓取等基础的网络知识以后,也可以试试学习一些较为完善的框架,比如Scrapy,详情可以看崔庆才的总结
获取授权