2017-11-04 11 views
-1

누군가 나에게 이것을 설명 할 수 있습니까?
거미에 XPath를 사용하여 데이터를 추출하는 코드가 있습니다.왜 스크래핑 된 텍스트는 스파이더의 문자열이지만 파이프 라인의 목록입니까?

price_euro = add.xpath('.//strong[@class="price price--eur"]/text()').extract_first() 
print 'price_euro', price_euro, type(price_euro) 

와 내가 얻을 것은 :

price_euro 25.500 <type 'unicode'> 

나는 이것을 이해, 나는 문자열 내가 (.extract_first 사용했기 때문에 (유니 코드))로이이 제가 원하는 것입니다.

하지만 내 파이프 라인의

,

print "item['price_euro']", item['price_euro'], type(item['price_euro']) 

나는 목록이 나에게 큰 문제가되지 않습니다

item['price_euro'] [u'25.500 '] <type 'list'> 

로,하지만 때마다 내가 액세스 할 때 있기 때문에 짜증나 그것의 끝에 [0]을 추가해야합니다. 예. item [ 'price_euro'] [0]

사용 중지 할 수 있나요?
이 논리 뒤에있는 논리는 무엇입니까?

내가 price_euro

l = ItemLoader(item=MyItem(), response=response) 
l.add_value('price_euro', price_euro)  
yield l.load_item() 
+0

어디서 가격을 책정합니까? 인쇄 할 때 전체 항목이 어떻게 생겼습니까? –

+0

@omu_negru 질문 할 코드를 추가했습니다. – WebOrCode

답변

2

ItemLoaderadd_value()를 호출 (뿐만 아니라 add_css()add_xpath()) 같은 분야에 대한 여러 번 허용 추가 어떻게

감사드립니다. 이것은 찾고있는 정보를 HTML 소스의 여러 위치에서 찾을 수 있거나 요청간에 HTML 레이아웃이 다를 때 유용합니다. 이를 수용하기 위해 항목 로더는 모든 필드 값을 목록에 저장합니다.

가격 정보에 대해 필드 값 하나만을 예상하면 output processor을 지정하여 load_item()이 호출 될 때 항목 로더에게 목록 변환 방법을 알릴 수 있습니다. 더 이상 항목 로더 항목 유형을 말할 필요가 없습니다 그 추가 상승과 함께, 이전

from scrapy.loader import ItemLoader 
from scrapy.loader.processors import TakeFirst 

class MyItemLoader(ItemLoader): 
    default_item_class = MyItem 
    price_euro_out = TakeFirst() 

당신은 다음이 항목 로더를 채울 수 있습니다 :이 작업을 수행하는 표준 방법은 ItemLoader 클래스를 서브 클래스입니다 사용

l = MyItemLoader(response=response) 
l.add_value('price_euro', price_euro)  
yield l.load_item() 

당신이 게시 된 예제 코드를 들어, 당신도 add_xpath() 방법을 통해 수동 추출을 방지하고 항목 로더에 addselector 등의 키워드 인수를 전달 할 수 있습니다

l = MyItemLoader(selector=add) 
l.add_xpath('price_euro', './/strong[@class="price price--eur"]/text()')  
yield l.load_item() 

당신이 사용하려는 경우 항목의 모든 필드, 당신은 또한 당신의 품목 로더의 기본 출력 프로세서를 선언 할 수 을위한 행동 "첫 번째 목록 요소를 가지고"

class MyItemLoader(ItemLoader): 
    default_item_class = MyItem 
    default_output_processor = TakeFirst() 

치료 도큐는 list of built-in processors입니다.

+0

답장을 보내 주셔서 감사합니다. 이 문제를 해결하기 위해 나는 유일한 것을 얻는 파이프 라인을 만들었다. 저는 지난 주에 Scrapy를 사용하고 있습니다. 일단 당신이 그 뒤에있는 논리를 이해하면 아주 좋은 프레임 워크입니다. 이 방법을 사용하려고합니다. – WebOrCode