2016-05-31 5 views
0

enter image description hereScrapy вывод в файл JSON

После работы через официальный Тут я решил попробовать создать свой собственный паук в том же проекте. Я создал parker_spider.py в каталоге пауков. который содержит:

start_urls = [ 
    "myurl" 
] 


class Parker_Spider(scrapy.Spider): 

    name = "parker" 


    def start_requests(self): 
     for i in range(self.max_id): 
      yield Request('myurl', method="post", headers= headers, body=payload, callback=self.parse_method) 



def parse_method(self, response): 
    j = json.loads(response.body_as_unicode()) 
    print(j['d'][0]) 

Я вижу, что правильный вывод печатается, когда паук работает, поэтому я знаю его работу. Теперь я хочу сохранить вывод как JSON. Когда я запускаю:

$ scrapy crawl parker -o items.json 
............ 
2016-05-31 16:53:55 [scrapy] INFO: Closing spider (finished) 
2016-05-31 16:53:55 [scrapy] INFO: Dumping Scrapy stats: 
{'downloader/request_bytes': 16112, 
'downloader/request_count': 26, 
'downloader/request_method_count/POST': 26, 
'downloader/response_bytes': 12484, 
'downloader/response_count': 26, 
'downloader/response_status_count/200': 26, 
'finish_reason': 'finished', 
'finish_time': datetime.datetime(2016, 5, 31, 20, 53, 55, 192000), 
'log_count/DEBUG': 27, 
'log_count/INFO': 7, 
'response_received_count': 26, 
'scheduler/dequeued': 26, 
'scheduler/dequeued/memory': 26, 
'scheduler/enqueued': 26, 
'scheduler/enqueued/memory': 26, 
'start_time': datetime.datetime(2016, 5, 31, 20, 53, 54, 31000)} 
2016-05-31 16:53:55 [scrapy] INFO: Spider closed (finished) 

items.json создается в каталоге проектов, но пуста. Что я делаю не так?

EDIT: изменил код паука следующим образом:

def parse_method(self, response): 
    j = json.loads(response.body_as_unicode()) 
    ParkerItem.account=j['d'][0] 
    print(j['d'][0]) 
    return ParkerItem.account 

items.py:

class ParkerItem(scrapy.Item): 
    account = scrapy.Field() 

Теперь, когда я запускаю его я получаю:

ERROR: Spider must return Request, BaseItem, dict or None, got 'unicode' in <POST myurl 

что теперь?

ответ

1
def parse_method(self, response): 
    j = json.loads(response.body_as_unicode()) 
    item = ParkerItem() 
    item['account'] = j['d'][0] 
    yield item 
+0

Спасибо! Один вопрос: почему элемент доступен внутри функции parse_method? Я не импортирую его. – user61629

1

Ваш parse_method должен вернуть экземпляр scrapy.item.Item или подкласс. Как бы то ни было, он возвращает None, который интерпретирует Scrapy, поскольку из полученного ответа не может быть извлечен ни один элемент.

+0

см. Мое редактирование выше – user61629

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