一个爬虫框架需要具备哪些功能?

首先web框架需要具备哪些功能。Flask,Django有模板类,Request类,Response类等,但其实最核心的是他们的路由(route)功能:即url到视图函数的映射规则。
其次爬虫框架需要具备哪些功能。Scrapy,pyspider有http请求库,html解析工具,数据库存储等,但其实最核心的是他们的调度(scheduler)程序:即如何让你的请求,解析,存储协同工作。
所以一个最小的爬虫框架只需要一套调度程序就可以了,其他的请求,解析,存储都可以作为框架的扩展来使用,比如:gaoxinge/spidery。另外既然一个最小的爬虫框架只有一套调度程序,那么它也可以用来做非爬虫的工作。
一个爬虫的例子# -*- coding: utf-8 -*-"""url: https://stackoverflow.com/questionsfetch: requestsparse: lxmlpresist: txt"""import requestsfrom lxml import etreefrom spidery import Spiderspider = Spider( urls = ,)@spider.fetchdef fetch(url): response = requests.get(url) return response@spider.parsedef parse(response): root = etree.HTML(response.text) results = root.xpath(\u0026#39;//div\u0026#39;) for result in results: question = {} question = result.xpath(\u0026#39;div//strong/text()\u0026#39;) question = result.xpath(\u0026#39;div//strong/text()\u0026#39;) question = result.xpath(\u0026#39;div/div/text()\u0026#39;).strip() question = result.xpath(\u0026#39;div/h3/a/text()\u0026#39;) question = result.xpath(\u0026#39;div/h3/a/@href\u0026#39;) yield question, None@spider.presistdef presist(item): f.write(str(item) + \u0026#39;\\u0026#39;)f = open(\u0026#39;stackoverflow.txt\u0026#39;, \u0026#39;wb\u0026#39;)spider.consume_all()f.close()但是为什么一般的爬虫框架都要有自己的http请求库呢?这是因为你很难实现一套调度程序,而不考虑发送请求的方式,尤其是异步的情形。比如,虽然gaoxinge/spidery实现一套调度程序,但是在使用它的时候,不建议使用异步的请求(twisted,tornado等)。

■网友
看这两张图应该就清楚了一个爬虫框架需要具备哪些功能?

【一个爬虫框架需要具备哪些功能?】 一个爬虫框架需要具备哪些功能?


    推荐阅读