2013-08-21 9 views
2

Я научился царапать страницы с помощью scrapy. Некоторые из представленных мне данных находятся в формате JSON, и я до сих пор не смог скрестить страницу JSON. Я знаю, что это можно сделать (благодаря моему только предыдущему вопросу и полезным ответам), но я просто не могу заставить его работать. Мне интересно, если: а) кто-нибудь знает пример успешного сценария скрининга для JSON, или б) я мог бы иметь некоторые указатели.соскабливание ответа json в scrapy

Я воспользовался этой страницей за помощью: http://www.jroller.com/evans/entry/parsing_json_with_python, , пытающийся очистить страницу, используемую в качестве примера на ней.

Мой паук бежит, но ничего не царапается. Я знаю, что делаю ошибки, но мне кажется, что я изменил каждый маленький аспект шпидера хотя бы один раз, и теперь я просто смутился.

Основу моего паука (изданного в ответ на предложение ниже) заключается в следующем:

from scrapy.spider import BaseSpider 
from scrapy.selector import HtmlXPathSelector 
from learnjson.items import learnjsonitems, Field 
import json 
import urllib2 

class MySpider(BaseSpider): 
name = "jsonexample" 
allowed_domains = ["googleapis.com"] 
req = urllib2.urlopen('http://maps.googleapis.com/maps/api/geocode/json?address=8-10%20Broadway,%20London%20SW1H%200BG,%20United%20Kingdom&sensor=false' 
) 

def json_parse(self, response): 
    jsonresponse = json.loads(response.body_as_unicode()) 
    latitude = jsonresponse["lat"] 


    print item["lat"] 

Принимая пример страницы, которая Царапины (не мои данные, только что-то практиковать на), я был пытаясь вытащить, скажем, уличный адрес и широту/долготу, но я ничего не пробовал, кажется, работает.

ответ

1

Я думаю, что вы пропустили импортирования json.Add

импорта JSON в коде.

Также расширьте и откройте свой json-файл с помощью urllib2. Он будет работать нормально. И вы можете добавить код для ответа json вроде.

class MySpider(BaseSpider): 
    ... 

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

     item = MyItem() 
     item["firstName"] = jsonresponse["firstName"]    

     return item 

Надеется, что это помогает :)

+0

также вы можете использовать JSON ответ для извлечения данных, как класс MySpider (BaseSpider): ... Защиту синтаксического анализа (самоощущение, ответ): jsonresponse = json.loads (ответ) пункт = MyItem() пункт [ "FirstName"] = jsonresponse [ "FirstName"] возвращенный деталь – Tushar

+0

Большое спасибо за ваше предложение, но я пытался сделать, как вы предложили, и все еще царапины ничего. Я отредактировал мое сообщение, чтобы показать новый паук - я уверен, что делаю небольшую/простую ошибку, но я не могу ее найти! –

+0

'response = json.loads (jsonResponse)' Заменить 'jsonResponse' с json, который вы получаете – Tushar

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