응답을 구문 분석하는 데 하나 이상의 방법이있는 Scrapy 스파이더의 계약서를 작성하는 가장 좋은 방법은 무엇입니까? 이걸 answer으로 보았지만 나에게 분명히 들리지 않았습니다.여러 구문 분석 방법을 사용하는 약 계약
현재 예제 : 페이지의 정보를 추출하는 parse_product
이라는 메서드가 있지만 다른 페이지에서 같은 제품에 대해 추출해야하는 데이터가 더 많습니다. 따라서이 마지막에 새로운 요청이 yield
입니다. 메서드를 호출하여 새 요청을 만들고 새 콜백이 해당 필드를 추출하고 항목을 반환하도록합니다.
두 번째 방법에 대한 계약서를 작성하면 메타 속성 (대부분의 필드가있는 항목 포함)이 없기 때문에 문제가 발생합니다. 첫 번째 메소드에 대한 계약서를 작성하면 항목 대신 새 요청을 리턴하기 때문에 필드를 리턴하는지 확인할 수 없습니다. 예에서
def parse_product(self, response):
il = ItemLoader(item=ProductItem(), response=response)
# populate the item in here
# yield the new request sending the ItemLoader to another callback
yield scrapy.Request(new_url, callback=self.parse_images, meta={'item': il})
def parse_images(self, response):
"""
@url http://foo.bar
@returns items 1 1
@scrapes field1 field2 field3
"""
il = response.request.meta['item']
# extract the new fields and add them to the item in here
yield il.load_item()
, 나는 두 번째 방법으로 계약을 넣어하지만
response.request.meta['item']
, 또한, 필드
field1
및
field2
는 첫 번째 방법으로 채워진에 나에게
KeyError
예외를했다.
희망이 충분히 있습니다.
정확하게 내가 찾던 답변이 아니었지만 실제 도움보다 더 많이 도움이되었습니다. 고맙습니다. –