前言:
现时各位老铁们对“javascript online”可能比较注重,我们都想要剖析一些“javascript online”的相关文章。那么小编同时在网络上汇集了一些有关“javascript online””的相关内容,希望小伙伴们能喜欢,看官们快快来了解一下吧!Scrapy架构图Scrapy Engine(引擎): 负责Spider、ItemPipeline、Downloader、Scheduler中间的通讯,信号、数据传递等。Scheduler(调度器): 它负责接受引擎发送过来的Request请求,并按照一定的方式进行整理排列,入队,当引擎需要时,交还给引擎。Downloader(下载器):负责下载Scrapy Engine(引擎)发送的所有Requests请求,并将其获取到的Responses交还给Scrapy Engine(引擎),由引擎交给Spider来处理,Spider(爬虫):它负责处理所有Responses,从中分析提取数据,获取Item字段需要的数据,并将需要跟进的URL提交给引擎,再次进入Scheduler(调度器),Item Pipeline(管道):它负责处理Spider中获取到的Item,并进行进行后期处理(详细分析、过滤、存储等)的地方.Downloader Middlewares(下载中间件):你可以当作是一个可以自定义扩展下载功能的组件。Spider Middlewares(Spider中间件):你可以理解为是一个可以自定扩展和操作引擎和Spider中间通信的功能组件(比如进入Spider的Responses;和从Spider出去的Requests)创建项目和爬虫:创建项目:`scrapy startproject 项目名字创建爬虫:进入到项目所在的路径,执行命令:scrapy genspider 爬虫名字 爬虫域名。注意:爬虫名字和项目名字不能一致。项目目录结构items.py:用来存放爬虫爬取下来数据的模型middlewares.py:用来存放各种中间件的文件。pipelines.py:用来将items的模型存储到本地磁盘中。settings.py:爬虫的一些配置信息(如请求头,多久发送一次请求,ip代理池等)scrapy.cfg:项目的配置文件。spiders包:以后所有的爬虫,都是存放到这里。快速入门response是一个scrapy.http.response.html.HtmlResonse对象,可以执行xpath和css语法来提取数据。提取出来的数据是一个Selector或SelectorList对象。获取其中字符串应该执行getall或get方法。getall方法:获取Selector中的所有文本,返回一个列表。get方法:获取的是Selector中的第一个文本,返回一个str类型。如果数据解析回来,要传给pipeline处理,可以使用yield来返回。或者收集所有的item,最后统一使用return返回。item:建议在items.py中定义好模型,以后就不用使用字典的方式。`pipeline:这个是专门用来保存数据的,其中有三个方法会经常使用:open_spider(self, spider):当爬虫被打开的时候执行process_item(self, item, spider):当爬虫有item传过来的时候会被调用。closs_spider(self, spider): 当爬虫关闭的时候会被调用要激活pipeline,应该在settings.py中,设置ITEM_PIPELINES。保存json数据的时候可以使用JsonItemExporter和JsonLinesItemExporterJson
ItemExporter:每次把数据添加到内存中,最后统一写入到磁盘中。好处是存储的数据是一个满足json规则的数据。坏处是如果数据量比较大,那么比较耗内存。
from scrapy.exporters import JsonItemExporter
class QsbkPipeline(object):
def __init__(self):
self.fp = open('duanzi.json', 'wb')
self.exporter = JsonItemExporter(self.fp, ensure_ascii=False,
encoding='utf-8')
self.exporter.start_exporting()
def open_spider(self, spider):
pass
def process_item(self, item, spider):
self.exporter.export_item(item)
return item
def close_spider(self, spider):
self.exporter.finish_exporting()
self.fp.close()
JsonLinesItemExporter:每次调用exorter_item的时候就把item存储到磁盘中。坏处是每一个字典是一行,整个文件不是一个满足json格式的文件。好处是每次处理数据的时候就直接存储到磁盘中,不会耗内存,数据也比较安全。
from scrapy.exporters import JsonLinesItemExporter
class QsbkPipeline(object):
def __init__(self):
self.fp = open('duanzi.json', 'wb')
self.exporter = JsonLinesItemExporter(self.fp, ensure_ascii=False,
encoding='utf-8')
def open_spider(self, spider):
pass
def process_item(self, item, spider):
self.exporter.export_item(item)
return item
def close_spider(self, spider):
self.fp.close()
CrawlSpider
在创建爬虫的命令修改为scrapy genspider -t crawl 爬虫名字 爬虫域名
需要使用LinkExtractor和Rule,这两个东西决定爬虫的具体走向。
allow设置规则的方法,要能够限制在我们想要的url上,不要跟其他的url产生相同的正则表达式即可。什么情况下使用follow:如果在爬取页面的 时候,需要将满足当前条件的url再进行跟进,那么就设置为True,否则设置为False.什么情况下指定callback:如果这个url对应的页面,只是为了获取更多的url, 并不需要里面的数据,那么可以不指定callback;如果想要获取url对应页面的数据,那么就需要指定一个callback。Scrapy Shell可以方便我们做一些数据提取的测试代码如果想要执行scrapy命令,毫无疑问是要先进入到scrapy所在的环境中如果想要读取某个项目的配置信息,那么应该先进入到这个项目中,再执行scrapy shell命令模拟登陆人人网想要发送post请求,推荐使用scrapy.FormRequest方法,可以方便的指定表单数据。如果想在爬虫一开始的时候就发送post请求,那么应该重写start_requests方法,在这个方法中发送post请求
标签: #javascript online #scrapy增量式爬虫