항목의 기본 사용
항목, Scrapy 분석 결과가 사전에 반환 될 수있는 구성 데이터를 저장하는 장소,하지만 큰 파충류 시스템에서 매우 편리했다 파이썬 사전에 구조의 부족이다. 상품 카테고리는 사전 API를 제공하고, 쉽게 필드가 선언되고, 많은 다른 구성 요소가 Scrapy 정보 항목 활용 할 수 할 수 있습니다. 다음과 같이 기본적인 방법은 다음과 같습니다 :
import scrapy
class MovieItem(scrapy.Item):
# define the fields for your item here like:
name = scrapy.Field()
이 필드의 목적은 각각의 필드에 대한 메타 데이터를 지정할. 위의 예 LAST_UPDATED 직렬화 함수는 STR로 지정된 다른 구성 요소에 대한 메타 데이터, 각 메타하지만 다른 의미를 지정할 수있다.
그런 다음 사전 값에 대한 액세스와 같은 값의 액세스 항목 :
#设置值的方法
product['last_updated'] = 'today'
#访问值得方法
>>> product['last_updated']
today
>>> product.keys()
['price', 'name']
>>> product.items()
[('price', 1000), ('name', 'Desktop PC')]
>>> product.get('name')
Desktop PC
항목 로더의 기본 사용
항목 로더는 우리를 위해 항목을 생성하는 매우 편리한 방법을 제공합니다. 항목은 캡처 된 데이터에 대한 컨테이너를 제공하고, 항목 로더은 우리가 아주 쉽게 용기에 채워 입력 할 수 있습니다.
필드의 수백을 추출하는 프로젝트에 많은 시간이, 매우 어려운 경우 유지 보수를 수행하는 것을 의미 항목 로우더 (프로젝트 로더).
컨테이너가 각 항목이 필드 추출 규칙에 구성 될 수있다 내부 scrapy 따라서, 예컨대 용기 ItemLoader을 제공한다. 원래 데이터는 기능에 의해 분석하고, 항목 필드 할당, 매우 편리 할 수있다. 참고 웹 사이트 : HTTPS : //blog.csdn.net/zwq912318834/article/details/79530828
그랩 컨테이너 데이터를 저장하고 Itemloader 충전 용기위한 메커니즘을 제공하는 항목 제공 : 그래서 항목을보고 Itemloader합니다.
Itemloader 더 쉽게 거미 또는 소스 형식 (HTML, XML 등이 될 수있는 유연하고 효율적인 메커니즘을 제공한다 ) , 특히 복잡한 규칙, 특히 여러 차례의 분석에서, 쉽게 유지, 확장 및 재 작성 할 수 있습니다.
일반적인 사용에서, 크롤러 평 파일에 사용 :
from scrapy.loader import ItemLoader
#从items中调用Product的类
from myproject.items import Product
def parse(self, response):
#ItemLoader中的参数包含两个参数,第一个是引入的类,第二个是浏览器响应的结果
l = ItemLoader(item=Product(), response=response)
#这个是三种字段的添加方法
l.add_xpath('name', '//div[@class="product_name"]')
l.add_css('stock', 'p#stock]')
l.add_value('last_updated', 'today') # you can also use literal values
#添加load_item()来提交字段
return l.load_item()填充到容器中
item.py이 필드를 사용자 정의 할 수 있습니다에서 :
두 가지 방법은 첫 번째 항목에서 사용자 정의 클래스를 추가하는 것입니다있다 Itemloader
from scrapy.loader import ItemLoader
#Identity、TakeFirst、Join、Compose、MapCompose、SelectJmes都是内置的处理器
from scrapy.loader.processors import TakeFirst, MapCompose, Join
class ProductLoader(ItemLoader):
#定义默认的ItemLoader.default_input_processor和ItemLoader.default_input_processor
default_output_processor = TakeFirst()
#通过_in和_out后缀来定义输入和输出处理器
name_in = MapCompose(unicode.title)
name_out = Join()
price_in = MapCompose(unicode.strip)
두 번째 방법은 정의 필드 방법 항목에 파일을 추가하는 것입니다
import scrapy
#Identity、TakeFirst、Join、Compose、MapCompose、SelectJmes都是内置的处理器
from scrapy.loader.processors import Join, MapCompose, TakeFirst
from w3lib.html import remove_tags
def filter_price(value):
if value.isdigit():
return value
class Product(scrapy.Item):
name = scrapy.Field(
input_processor=MapCompose(remove_tags),
output_processor=Join(),
)
price = scrapy.Field(
input_processor=MapCompose(remove_tags, filter_price),
output_processor=TakeFirst(),
)