当我们在scrapy spider中的parse_item中产生请求时会发生什么?

时间:2015-03-01 09:27:05

标签: python post scrapy yield

我使用scrapy HTTP POST方法抓取网站,然而,一些奇怪的问题一直困扰着我,我不知道哪里出了问题。 这是我的示例代码:

def parse(self, response):
    sel = Selector(response)
    # to generate next page
    next_formdata = sel.css("next")
    yield FormRequest(url=self.start_urls[0], 
                              formdata=next_formdata,
                              callback=self.parse)

    # to parse item
    items = sel.css("items")
    for item in items:
        cur_formdata = item.css("form")
        yield FormRequest(url=self.start_urls[0],
                              formdata=cur_formdata,
                              callback=self.parse_item)

def parse_item(self, response):
    sel = Selector(response)
    if len(sel.extract()) < 10000:
        new_request = response.request.copy()
        yield new_request

    log.msg("item length is" + str(len(sel.extract())))
    item = MyItem()
    # get specific information
    yield item

但是,我在日志信息中不断得到“项目长度为xxx”,其中xxx只有几百个。我试图实现的是防止目标网站出现错误页面,那么我该怎么做才能解决这个问题呢?谢谢!

1 个答案:

答案 0 :(得分:1)

好吧,我开始意识到我没有添加else分支,所以当调用parse函数时,这个方法会在yield停止的地方继续。这是一个愚蠢的错误,对不起!