2013-09-16 5 views
1

Я пытаюсь разобрать ответ JSON от API New York Times с помощью Scrapy to CSV, чтобы у меня было резюме всех связанных статей с конкретным запросом. Я хотел бы выплюнуть это как CSV со ссылкой, датой публикации, резюме и названием, чтобы я мог выполнить несколько поисков ключевых слов в сводном описании. Я новичок в Python и Scrapy, но вот мой паук (я получаю ошибку HTTP 400). Я xx'ed мой ключ API в пауке:JSON Response and Scrapy

from scrapy.spider import BaseSpider 
from scrapy.selector import HtmlXPathSelector 
from nytimesAPIjson.items import NytimesapijsonItem 
import json 
import urllib2 

class MySpider(BaseSpider): 
    name = "nytimesapijson" 
    allowed_domains = ["http://api.nytimes.com/svc/search/v2/articlesearch"] 
    req = urllib2.urlopen('http://api.nytimes.com/svc/search/v2/articlesearch.json?q="financial crime"&facet_field=day_of_week&begin_date=20130101&end_date=20130916&page=2&rank=newest&api-key=xxx) 

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

      item = NytimesapijsonItem() 
      item ["pubDate"] = jsonresponse["pub_date"] 
      item ["description"] = jsonresponse["lead_paragraph"] 
      item ["title"] = jsonresponse["print_headline"] 
      item ["link"] = jsonresponse["web_url"] 
      items.append(item) 
      return items 

Если кто имеет какие-либо идеи/предложения, в том числе onese снаружи Scrapy, пожалуйста, дайте мне знать. Заранее спасибо.

+1

400 означает, что запрос GET в URL имеет неверный формат. Возможно, попробуйте sort = newest, а не rank = newest. http://developer.nytimes.com/docs/read/article_search_api_v2 – umeboshi

+0

все еще имеет ту же проблему, но спасибо за предложение – eroma934

+0

Я действительно смог исправить ошибку HTTP, но теперь CSV-файл пуст. – eroma934

ответ

2

Вы должны установить и использовать start_urlsparse метод:

from scrapy.spider import BaseSpider 
import json 


class MySpider(BaseSpider): 
    name = "nytimesapijson" 
    allowed_domains = ["api.nytimes.com"] 
    start_urls = ['http://api.nytimes.com/svc/search/v2/articlesearch.json?q="financial crime"&facet_field=day_of_week&begin_date=20130101&end_date=20130916&page=2&rank=newest&api-key=xxx'] 

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

     print jsonresponse 
+0

Большое спасибо, что работает для печати на экране. Теперь есть способ сопоставить это с элементами и преобразовать в CSV. – eroma934

+0

@ eroma934 Да, у вас есть это в коде на самом деле. Я просто опустил его для примера. – alecxe

+0

Единственная проблема в том, что я получаю ошибку GET, когда я сохраняю синтаксис элемента. Это потому, что я пропускаю цикл (я думаю), но я не уверен, что эквивалент json для hxs.select будет в типичный паук. Я очень ценю ваш вклад. – eroma934