Scrapy意外地跳过了一些页面

时间:2017-06-13 18:19:37

标签: python scrapy

我正在编写一个scrapy爬虫,用于迭代“下一页”抓取。 我的代码是这样的:

def parse(self, response):

    while self.current_page<=self.total_page:

        self.current_page = int(self.selector.css("something").extract()[-1])

        for post_node in self.selector.css("div.info-column"):
            yield {
                "location": post_node.css("something").extract(),
            }
        logging.info("************** now page is %d **************", self.current_page)
        logging.info("********** one page done,Going to next **********")

        try:

            self.next.send_keys('\n')

我希望代码抓取每个页面的信息,然后点击下一页。但是打印的调试信息表明它经常跳过一些页面。

可能是什么原因?

1 个答案:

答案 0 :(得分:0)

(道歉......我不能发表对你的问题的评论,因为我没有足够的代表) 请发布更多代码...或日志本身。根据配置有很多分歧点,我们需要更多信息来诊断。还有很多其他代码可能在这里进行很差的交互。

执行logging.info语句时,self.current_page肯定会陈旧/误导。自我是蜘蛛对象。如果任何其他代码生成由parse()处理的链接,那么在执行日志语句时,您的current_page将被陈旧/重新分配。

我注意到你的印刷品是在收益率之后: yield会暂停该函数并在您尝试再次迭代后从该位置恢复。也许您因为您的logging.info的发生方式与页面的实际处理分开而被误导。

scrapy下载程序队列是LIFO(后进先出)。所以它将处理&#34; new&#34;在它回到尝试迭代“第一个”之前的东西。 parse()调用。

我还猜测你正试图在AJAXy网页上进行操作,发送&#39; \ n&#39;加载一个新的&#34;页面&#34;在引擎盖下?

可能发生的是你加载第一页,设置current_page,你产生新项目,处理新项目,新链接是由未显示的其他规则或机制养殖,在这些链接上调用解析,current_page设置为那些新的页码,...一堆其他东西......,最后你的原始parse()调用被要求它的下一个项目,它从yield语句和日志恢复&#34;现在页面是%d& #34;当前错误的当前页码。

我的回答很可能是因为缺乏信息而不一定是真的...但至少如果给你一些东西可以咀嚼。