2012-12-19 26 views
2

我有这样的代码在我的履带Scrapy履带不completeing所有环路的解析函数

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 

我做到了按documentation但它只能在一个环路。 我的意思是,我只能在日志中看到屏幕上

LOOP1 
LOOP2 

应重复3次

我想回报的不同组合和屈服,

  1. return requestreturn item给输出LOOP1 LOOP2
  2. yield request and return item给出输出LOOP1 LOOP1 LOOP1 LOOP2
  3. yield requestyield item使输出LOOP1 LOOP1 LOOP1 LOOP2
  4. return requestyield item使输出LOOP1 LOOP2

我怎样才能LOOP 1 LOOP2 LOOP1 LOOP2 AND so on

+0

解决您的identation –

+0

显然站点= hxs.select多次请求(” // div [@ class =“top”]')只返回两个项目....没有人可以证明这一点,因为您缺少重要信息以便进一步重现此问题。因此-1 –

+0

我可以确认它有许多来自scrapy外壳的项目。这就是为什么我切片检测 – user19140477031

回答

1

我想,为什么你不Loop 2得到的原因是因为你已硬编码的网址在Request。 Scrapy不会多次访问已经访问过的URL。

尝试更改该URL并查看它是如何发生的。不要依赖的消息Requests的顺序并不发生在为了

5

问题是在循环

for site in sites[:5]: 

您要求在循环中多次1个相同的URL。

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

,如果你想在同一个网址,你需要设置dont_filter=True

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

那么它应该是重复3次

+0

dont_filter was the问题给我。这是使用框架的问题。太多未知变量。 –

+0

@PraveenSinghYadav它真的不是一个问题没有太多的未知变量,所有你需要做的就是检查文档 https://doc.scrapy.org/en/latest/topics/request-response.html –