Scrapy框架学习

scrapy框架:(Scrapy,Pyspider)
高定制性,高性能(异步网络框架twisted),所以数据下载速度非常快,提供了数据存储,数据下载,提取规则
分布式策略:
scrapy-redis,在scrapy基础上添加了一套以Redis数据库为核心的组件,让scrapy框架支持分布式的功能,主
要在Redis里做请求指纹去重、请求分配、数据临时存储。

scrapy框架的工作流程:

1.首先Spiders(爬虫)将需要发送请求的url(requests)经ScrapyEngine(引擎)交给Scheduler(调度器)。

2.Scheduler(排序,入队)处理后,经ScrapyEngine,DownloaderMiddlewares(可选,主要有User_Agent, Proxy代理)交给Downloader。

3.Downloader向互联网发送请求,并接收下载响应(response)。将响应(response)经ScrapyEngine,SpiderMiddlewares(可选)交给Spiders。

4.Spiders处理response,提取数据并将数据经ScrapyEngine交给ItemPipeline保存(可以是本地,可以是数据库)。

提取url重新经ScrapyEngine交给Scheduler进行下一个循环。直到无Url请求程序停止结束。

scrapy入门

1,创建一个scrapy项目

scrapy startproject mySpider

2,生成一个爬虫

scrapy genspider itcast “itcast.cn”

3,提取数据

完善spider,使用xpath等方法

4,保存数据

pipeline中保存数据

示例:

itcast.py

import scrapy


class ItcastSpider(scrapy.Spider):
     name = 'itcast'
     allowed_domains = ['itcast.cn']
     start_urls = ['http://www.itcast.cn/channel/teacher.shtml']

    def parse(self, response):
         #ret1 = response.xpath("//div[@class='tea_con']//h3/text()").extract()
         #print(ret1)

        #分组
        li_list = response.xpath("//div[@class='tea_con']//li")
         for li in li_list:
             item = {}
             item["name"] = li.xpath(".//h3/text()").extract()[0]
             item["title"] = li.xpath(".//h4/text()").extract()[0]
             #print(item)
             yield item #传给pipelines.py,需要在setting中开启

配置setting

ITEM_PIPELINES = {
     'myspider.pipelines.MyspiderPipeline': 300,
     'myspider.pipelines.MyspiderPipeline1': 301,

}

#优先级后面跟的数字较小先执行

pipelines.py

class MyspiderPipeline(object):
     def process_item(self, item, spider):
         item["hello"] = "world"
         #print(item)
         return item

class MyspiderPipeline1(object):
     def process_item(self, item, spider):
         print(item)
         return item

你可能感兴趣的:(python,python)