2015-05-06 3 views
0

Я пытаюсь разбирать файлы так же, как this, но для многих долгот и широт. Гусеница перемещается по всем веб-страницам, но ничего не выводит.Попытка разобрать файлы JSON с помощью Scrapy

Вот мой код:

import scrapy 
import json 

from tutorial.items import DmozItem 
from scrapy.http import Request 
from scrapy.contrib.spiders import CrawlSpider, Rule 

class DmozSpider(CrawlSpider): 
    name = "dmoz" 
    allowed_domains = ["proadvisorservice.intuit.com"] 

    min_lat = 35 
    max_lat = 40 
    min_long = -100 
    max_long = -90 

    def start_requests(self): 
     for i in range(self.min_lat, self.max_lat): 
      for j in range(self.min_long, self.max_long): 
       yield scrapy.Request('http://proadvisorservice.intuit.com/v1/search?latitude=%d&longitude=%d&radius=100&pageNumber=1&pageSize=&sortBy=distance' % (i, j), 
        meta={'index':(i, j)}, 
        callback=self.parse) 

    def parse(self, response): 
     jsonresponse = json.loads(response.body_as_unicode()) 

     for x in jsonresponse['searchResults']: 
      item = DmozItem() 

      item['firstName'] = x['firstName'] 
      item['lastName'] = x['lastName'] 
      item['phoneNumber'] = x['phoneNumber'] 
      item['email'] = x['email'] 
      item['companyName'] = x['companyName'] 
      item['qbo'] = x['qbopapCertVersions'] 
      item['qbd'] = x['papCertVersions'] 

      yield item 
+2

В коде отсутствует 'print()'. – kay

+0

Я называю это через терминал ... «scrapy crawl dmoz -o items.json» ... зачем мне печатать? ... он должен выводить все элементы в файл items.json – Prathmesh

+0

Чтобы решить этот вид проблема заключается в том, что вы помещаете в ваш код множество операторов 'print()' для деактивации, где информация теряется. Без этого вы не знаете, может быть, 'scrapy.Request()' останавливается, если вы ошибочно поменяли начало и конец диапазона, если 'response.body_as_unicode()' киосков или что проблема. Сначала найдите точку, которая не достигнута, затем повторите попытку. – kay

ответ

1

При использовании CrawlSpider вы должны не переопределения parse() метода:

When writing crawl spider rules, avoid using parse as callback, since the CrawlSpider uses the parse method itself to implement its logic. So if you override the parse method, the crawl spider will no longer work. (source)

Но так как вы настроите паук вручную, а не с помощью CrawlSpider функциональность в любом случае, я бы предположил, что вы не наследуете ее. Вместо этого наследуйте от scrapy.Spider:

class DmozSpider(scrapy.Spider): 
    ... 
+0

Когда я снимаю CrawlSpider наследство, я получаю сообщение об ошибке: рейз NotImplementedError exceptions.NotImplementedError: – Prathmesh

+0

И когда я изменяю разобрать на скажем parse_site (или что-нибудь еще), я получаю ошибку: exceptions.AttributeError: объект «DmozSpider» имеет no attribute 'parse_site' – Prathmesh

+0

Вам также нужно изменить функцию: 'def parse()' to 'def parse_site()'. И для NotImplementedError мне нужно увидеть трассировку стека. – bosnjak

Смежные вопросы