小白的scrapy入门之路(二)
上次我们爬取了菜鸟教程的Python页面,很简单的一个小项目对不对。这次我们来玩点更有意思的东西,就是让爬虫自己识别、自己去爬。
听上去是不是高端大气上档次,小编刚学的时候也觉得高端大气上档次。爬虫会自己自动去爬取数据,是不是很像AI。好了,说了那么多废话,下面进入我们今天的正题吧。
首先,今天我们要爬取的是脚本之家。我们可以百度一下,找到脚本之家的网站,如果浏览器有开发者工具的话,直接按F12,弹出调试框,我们就可以看到网站的结构了。上次我们爬的只是一小部分的页面,这次我们来玩次大的,爬取整个网站。小编这次用的是Scrapy给我们提供的CrawlSpider,即通用蜘蛛。同时,Scrapy还给我们提供了CSVspider,XMLspider等等。具体用法,请自行百度一下scrapy的官方文档,如果英文不好,可以看中文文档噢。
下面我们先写好我们的Item.py:
这次我们使用的还是ItemLoader,为什么小编喜欢用ItemLoader呢?因为懒嘛,还有的是这样蜘蛛的代码会非常整洁并且容易理解。数据处理的东西就可以放在pipeline或者items.py里面做了。写好了Item之后,后面就到我们的蜘蛛了:
是不是很简洁,下面小编简单说说蜘蛛吧。像我们所看到的一样,我们只需要把继承改成CrawlSpider,加上rules就可以了是不是很简单。实际上我们还是要了解一下它是怎么做到的。首先是实例化了一个Rule的对象,也就是网页提取的规则。而其次就是实例化了LinkExtractor的对象,用于匹配你想要蜘蛛去爬的网页url。最后就是follow和callback了。follow就是我们让不让蜘蛛做进一步的跟踪。callback就是提取了这些东西后要交给谁去处理。这样我们就简单的介绍完了crawlspider的使用了。下面就到我们的pipeline了,pipeline我们还是采用上次的pipeline,将数据异步写入数据库。
写完了pipeline,只要我们在设置中添加所要的参数就可以爬取了,例如数据库的那些参数,和用户代理(User-Agent)。不过这么容易满足不了小编的求知欲,所以小编做了新的尝试,用户代理池。
我们新建一个py文件,里面放所需要的用户代理的值,百度上都有。然后我们改写我们的中间件。Scrapy给我们提供了两个中间件,一个是蜘蛛中间件,一个是下载中间件。这次我们要改写的是一个下载的中间件,我们继承的是scrapy原有的User-Agent的中间件。
只要简单的几行的导入和几行的代码,我们的中间件就写好了。最后只要在设置文件里面把scrapy原有的USER-AGENT的中间件设置None,把我们自己写的中间件添加上去就可以了。这样我们的爬虫就写好了,是不是很简单。哈哈。
下面看看我们爬到的数据吧,因为数据太多,我就不全部展示了。
小编也就爬了10来万的数据,然后小编就关掉了。首先是因为单一主机爬取比较慢,其次呢,小编比较懒,不想偷偷地透露下次小编要搞的新奇玩意。
好了,小编的小白scrapy入门之路,今天就到这了。欢迎各位大神批评指正,让小编能够更好地成长。