scrapy 워크 복수 거미 tiems, 파이프 및 사용의 동작 방법

Scrapy 여러 거미, 각 거미 특정 항목을, 파이프 라인을 만드는 단 하나 개의 항목으로 만들었습니다. 그냥 당신이 크롤링 모두 동시에 시작 시작할 수있는 시작 스크립트를 작성합니다.

코드는 github에 업로드 된이 논문에서가 아니라 텍스트에 연결합니다.

첫째, 여러 거미의 scrapy 프로젝트를 생성

scrapy startproject mymultispider의 
CD mymultispider 
scrapy genspider myspd1 sina.com.cn 
scrapy genspider myspd2 sina.com.cn 
scrapy genspider myspd3 sina.com.cn

제 2 동작, 방법

관찰 스파이더 각각의 인쇄 관련 정보를 용이하게하기 위해 1

수입 scrapy의
 클래스 Myspd1Spider (scrapy.Spider) 
    이름 = ' myspd1 ' 
    allowed_domains = ' sina.com.cn ' ] 
    start_urls = ' http://sina.com.cn/ ' ] 

DEF 파싱 (자동 응답) 인쇄 ( ' myspd1를 ' )

같은 myspd2와 같은 다른 사람들은 myspd3 인쇄 관련 콘텐츠입니다.

다음과 같이 더 두 가지 방법으로, 첫째 비교적 간단한 서면 2보다 거미 실행은 프로젝트 디렉토리에 crawl.py 파일을 생성

에서 scrapy.crawler 수입 CrawlerProcess
 에서 scrapy.utils.project 수입 get_project_settings는 

처리 = CrawlerProcess (get_project_settings ()) 

# myspd1是爬虫名 
process.crawl ( ' myspd1 ' ) 
process.crawl ( ' myspd2 ' ) 
process.crawl ( ' myspd3 ' ) 

Process.Start를 ()

관찰의 편의를 위해, 출력은 로그 파일 settings.py에서 정의 할 수 있습니다

LOG_LEVEL = ' ERROR '

다음과 같이 마우스 오른쪽 버튼으로 실행이 파일을 출력 할 수 있습니다

 

 

 3. 작업의 두 번째 방법은 공식 GitHub의에서 찾을 수 있습니다 크롤링 소스 코드를 수정하는 것입니다 : https://github.com/scrapy/scrapy/blob/master/scrapy/commands/crawl.py

다음에, 같은 디렉토리 거미에 디렉토리를 디렉토리를 mycmd 만들고 크롤링 소스 복사이 디렉토리에 mycrawl.py, 상기 수정 된 실행 방법을 만들 수

DEF RUN (자체, 인수는 OPTS) :
     #이 파충류의 목록을 얻을 
    spd_loader_list = (self.crawler_process.spider_loader.list를)
     # 각 파충류 통과 
    에 대한 SPName 에서 spd_loader_list 또는 인수 : 
        self.crawler_process.crawl을 (SPName, ** opts.spargs)
         인쇄 ( " : 파충류의 시작 " + SPName) 
    ) (self.crawler_process.start를

파일의 디렉토리에 __init__.py 초기화 파일 만들기

다음 기관 카탈로그의 완료 후,

 

 크롤러를 시작하는 명령을 사용하여

scrapy mycrawl --nolog

다음과 같이 출력은 다음과 같습니다

 

 

셋째, 지정된 항목

1,이 비교적 간단, 거미에 대한 소개에서 items.py 파일에서 해당 클래스를 생성

items.py

import scrapy


class MymultispiderItem(scrapy.Item):
    # define the fields for your item here like:
    # name = scrapy.Field()
    pass

class Myspd1spiderItem(scrapy.Item):
    name = scrapy.Field()

class Myspd2spiderItem(scrapy.Item):
    name = scrapy.Field()

class Myspd3spiderItem(scrapy.Item):
    name = scrapy.Field()

spider内,例myspd1

# -*- coding: utf-8 -*-
import scrapy
from mymultispider.items import Myspd1spiderItem

class Myspd1Spider(scrapy.Spider):
    name = 'myspd1'
    allowed_domains = ['sina.com.cn']
    start_urls = ['http://sina.com.cn/']

    def parse(self, response):
        print('myspd1')
        item = Myspd1spiderItem()
        item['name'] = 'myspd1的pipelines'
        yield item

四,指定pipelines

1,这个也有两种方法,方法一,定义多个pipeline类:

pipelines.py文件内:

class Myspd1spiderPipeline(object):
    def process_item(self,item,spider):
        print(item['name'])
        return item

class Myspd2spiderPipeline(object):
    def process_item(self,item,spider):
        print(item['name'])
        return item

class Myspd3spiderPipeline(object):
    def process_item(self,item,spider):
        print(item['name'])
        return item

1.1settings.py文件开启管道

ITEM_PIPELINES = {
   # 'mymultispider.pipelines.MymultispiderPipeline': 300,
   'mymultispider.pipelines.Myspd1spiderPipeline': 300,
   'mymultispider.pipelines.Myspd2spiderPipeline': 300,
   'mymultispider.pipelines.Myspd3spiderPipeline': 300,
}

1.2spider中设置管道,例myspd1

# -*- coding: utf-8 -*-
import scrapy
from mymultispider.items import Myspd1spiderItem

class Myspd1Spider(scrapy.Spider):
    name = 'myspd1'
    allowed_domains = ['sina.com.cn']
    start_urls = ['http://sina.com.cn/']
    custom_settings = {
        'ITEM_PIPELINES': {'mymultispider.pipelines.Myspd1spiderPipeline': 300},
    }

    def parse(self, response):
        print('myspd1')
        item = Myspd1spiderItem()
        item['name'] = 'myspd1的pipelines'
        yield item

指定管道的代码

custom_settings = {
        'ITEM_PIPELINES': {'mymultispider.pipelines.Myspd1spiderPipeline': 300},
    }

1.3运行crawl文件,运行结果如下

 

 2,方法二,在pipelines.py文件内判断是哪个爬虫的结果

2.1 pipelines.py文件内

class MymultispiderPipeline(object):
    def process_item(self, item, spider):
        if spider.name == 'myspd1':
            print('myspd1的pipelines')
        elif spider.name == 'myspd2':
            print('myspd2的pipelines')
        elif spider.name == 'myspd3':
            print('myspd3的pipelines')
        return item

2.2 settings.py文件内只开启MymultispiderPipeline这个管道文件

ITEM_PIPELINES = {
   'mymultispider.pipelines.MymultispiderPipeline': 300,
   # 'mymultispider.pipelines.Myspd1spiderPipeline': 300,
   # 'mymultispider.pipelines.Myspd2spiderPipeline': 300,
   # 'mymultispider.pipelines.Myspd3spiderPipeline': 300,
}

2.3spider中屏蔽掉指定pipelines的相关代码

# -*- coding: utf-8 -*-
import scrapy
from mymultispider.items import Myspd1spiderItem

class Myspd1Spider(scrapy.Spider):
    name = 'myspd1'
    allowed_domains = ['sina.com.cn']
    start_urls = ['http://sina.com.cn/']
    # custom_settings = {
    #     'ITEM_PIPELINES': {'mymultispider.pipelines.Myspd1spiderPipeline': 300},
    # }

    def parse(self, response):
        print('myspd1')
        item = Myspd1spiderItem()
        item['name'] = 'myspd1的pipelines'
        yield item

2.4 运行crawl.py文件,结果如下

 

 

代码git地址:https://github.com/terroristhouse/crawler

 

python系列教程:

链接:https://pan.baidu.com/s/10eUCb1tD9GPuua5h_ERjHA 

提取码:h0td 

 

 

추천

출처www.cnblogs.com/nmsghgnv/p/12369656.html