Python Scrapy爬虫未完成解析函数中的所有循环

Python Scrapy爬虫未完成解析函数中的所有循环,python,screen-scraping,scrapy,Python,Screen Scraping,Scrapy,我的爬虫里有这个代码 class StackSpider(InitSpider): name = 'stack' allowed_domains = ['sitepoint.com'] start_urls = ["http://www.sitepoint.com"] start_page = "http://www.sitepoint.com" item = StackItem() def init_request(self):

我的爬虫里有这个代码

class StackSpider(InitSpider):
    name = 'stack'
    allowed_domains = ['sitepoint.com']
    start_urls = ["http://www.sitepoint.com"]
    start_page = "http://www.sitepoint.com"
    item = StackItem()

    def init_request(self):

        return Request(url=self.start_page, callback=self.parse)

    def parse(self, response):

        hxs = HtmlXPathSelector(response)
        sites = hxs.select('//div[@class="headline_area"]')
        items = []


        ivar = 1
        for site in sites[:5]:
            item = StackItem()
            log.msg(' LOOP' +str(ivar)+ '', level=log.ERROR)
            item['title'] ="yoo ma"
            request =  Request("http://www.sitepoint.com/getting-to-know-css3-selectors-structural-pseudo-classes/",  callback=self.test1)
            request.meta['item'] = item
            ivar = ivar + 1
            yield request


    def test1(self, response):
        log.msg('  LOOP 2 \n', level=log.ERROR)
        item = response.meta['item']
        item['desc'] = "test4"
        return item
我按照做了,但它只在一个循环上工作。 我的意思是我只能在屏幕上看到日志

LOOP1
LOOP2
应该重复3次

我尝试了回报和收益的不同组合,所以

  • 返回请求
    返回项
    给出输出
    LOOP1 LOOP2
  • yield request
    return item
    给出输出
    LOOP1 LOOP1 LOOP2
  • yield request
    yield item
    给出输出
    LOOP1 LOOP1 LOOP2
  • return request
    yield item
    给出输出
    LOOP1 LOOP2

  • 如何获取
    循环1 LOOP2 LOOP1 LOOP2等等

    我认为您没有进入
    循环2
    的原因是您在
    请求中对url进行了硬编码。Scrapy不要多次访问已访问的URL


    尝试更改该URL,看看它是如何运行的。不要依赖消息的顺序,因为
    请求不按顺序发生
    问题在您的循环中

    for site in sites[:5]:
    
    您多次在循环中请求同一URL

    Scrapy默认过滤相同的请求并忽略它们

    如果要多次请求同一URL,则需要设置
    dont\u filter=True

                request = Request("http://www.sitepoint.com/getting-to-know-css3-selectors-structural-pseudo-classes/",
                dont_filter=True,
                callback=self.test1)
    

    然后应该重复3次

    显然,sites=hxs.select(“//div[@class=“top”]”)只返回两项……没有人能够证明这一点,因为您缺少重要信息,无法进一步复制这一点。因此-1I可以确认它有许多来自刮壳的物品。这就是为什么我要切片来测试你能确认的东西并不重要,尤其是我不相信那些不能自己复制的声明……再一次:修正你的压痕@user1833746试着变得好一点。建议某人提出问题可以改进其问题的方式是很好的;但是试着用一种有帮助的、积极的语气去做。不要过滤是我的问题。这就是使用框架的问题。太多未知变量。@PraveenSinghYadav这真的不是问题没有太多未知变量你所要做的就是检查文档