1.2 爬虫的完整链条
刚才我们体验了一下爬虫程序,看上去挺简单的?
没错!简单到寥寥几行代码就能构成一个爬虫程序。但它也有可能是复杂的,它的简单或复杂因业务需求而变化。图1-3描述了爬虫程序的完整链条。
图1-3 爬虫程序的完整链条
爬虫工程师在接到任务时,第一步是整理需求,例如:
·爬取电子工业出版社科技图书类目下的计算机书籍信息。
·信息包括书籍价格、封面URL、作译者姓名、出版时间、定价、页数、开本、版次、ISBN编号、字数、目录和内容简介等。
·将爬取下来的书籍信息存储到技术部编号为15的云服务器上的Redis数据库中。
·每天爬取2次。
·每爬取100本图书的信息存储1次,以降低服务器压力。
·每次爬取时发现有新书则打上标记,表明这是该轮次的新书。
整理好这些需求后便用浏览器访问电子工业出版社科技图书类目下的计算机书籍列表页,并对书籍信息的元素位置、属性值等进行分析。图1-4是书籍列表定位分析时的截图。
图1-4 书籍列表定位分析截图
图1-4中的分析主要是想找到列表中包裹着单本书的标签和链接指向的URL,这样在访问页面时可以通过循环的方式一本一本地访问图书详情页。图1-5是书籍信息定位分析时的截图。
图1-5 书籍信息定位分析截图
图1-5中的分析主要是想定位到图书的信息,例如包裹着图书定价的标签是span,包裹着图书名称的标签是h1。图1-6是书籍列表页翻页规则分析时的截图。
图1-6 书籍列表页翻页规则分析截图
图1-6中的分析主要是想将翻页的逻辑整理出来,在真正爬取时用代码构造URL以模拟翻页效果,提高爬虫程序效率。分析工作完成后就可以开始编写代码了。首先编写发出网络请求的代码,例如:
然后调用解析库装载响应正文,对应的代码如下:
接着根据分析时确定的元素定位信息编写内容提取代码,例如:
由于需要将数据存储到指定服务器的Redis中,所以还需要连接Redis数据库的代码和数据存储的代码,同时对图书信息数量进行计数,每100本存储1次。对应的代码如下:
通常情况下,把数据存储到数据库中是爬虫程序的最后任务,也是爬虫工程师工作范围的边界。不过有时候需求方(例如后端工程师团队或数据分析团队)的同事需要在数据出库时帮他们做进一步的处理,那么爬虫工程师的工作范围就会扩大。