0
여러 거미에서 되풀이 작업을 처리하는 함수를 만들려고합니다. 그것을 깨뜨리는 것처럼 보이는 요청을하는 것입니다. 이 질문은 this question의 후속 조치입니다.요청을 생성하는 BaseSpider 클래스의 기능
import scrapy
import json
import re
class BaseSpider(scrapy.Spider):
start_urls = {}
def test(self, response, cb, xpath):
self.logger.info('Success')
for url in response.xpath(xpath).extract():
req = scrapy.Request(response.urljoin(url), callback=cb)
req.meta['category'] = response.meta.get('category')
yield req
yield req
코드에있을 때, "성공"로거가 갑자기 더 이상 작동하지 않고 콜백 함수를 호출 할 것 같지 않습니다. yield req
이 주석 처리되면 로거는 "성공"로거를 표시합니다. 나는 문제가 거미의 코드를 아래에, 거미에 생각하지 않지만 :
def parse(self,response):
self.logger.info('Base page: %s', response.url)
for req in self.test(response, self.parse_page, '//h3/a/@href'):
yield req
시험 방법 수익률 결과와 이유를 먹으 렴 :
# -*- coding: utf-8 -*-
import scrapy
from crawling.spiders import BaseSpider
class testContactsSpider(BaseSpider):
""" Test spider """
name = "test"
start_urls = {}
start_urls['test'] = 'http://www.thewatchobserver.fr/petites-annonces-montres#.WfMaIxO0Pm3'
def parse(self,response):
self.logger.info('Base page: %s', response.url)
self.test(response, self.parse_page, '//h3/a/@href')
def parse_page(self, response):
self.logger.info('Page: %s', response.url)
이것은 실제로 작동하는 것 같습니다. 그러나 이상적으로는 가능한 한 간단하게 코드를 작성하고 싶습니다. 'self.parse' 함수에서 루프를 수행하지 않고'self.test' 함수에서 이러한 요청을 직접 내놓을 수는 없습니까? – Casper
나는 그것이 가능하다고 생각하지 않는다. 코드를 좀 더 단순하게 유지하려면 (Python 3_에서) req in test() : yield req' 대신'yield from test()'를 사용할 수 있습니다. – Fidan
불행히도 2.7을 달리고 있지만 도움을 주셔서 감사합니다. – Casper