2013-08-21 87 views
2

我一直在學習使用scrapy來刮頁面。呈現給我的部分數據採用JSON格式,至今我無法成功抓取JSON頁面。我知道這是可以做到的(感謝我唯一的前面的問題和有用的回答),但我不能使它工作。我想知道是否a)任何人都知道JSON的scrapy腳本的成功例子,或者b)我可以請一些指針。Scrapy中的json響應

我一直在使用這個網頁一些幫助: http://www.jroller.com/evans/entry/parsing_json_with_python, 試圖刮掉用作它的一個示例頁面。

我的蜘蛛跑,但沒有被刮。我知道我犯了錯誤,但我覺得我已經改變了Spyder的每一個方面至少一次,現在讓我感到困惑。

我的蜘蛛(響應以下建議編輯)的基礎是這樣的:

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。

也extarct和urllib2打開你的json文件。它會正常工作。 你可以爲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() 項目[「名字」] = jsonresponse [「名字」] 退貨項目 – Tushar

+0

的建議非常感謝,但是我試圖做如你所說,它仍然刮傷 沒有。我編輯了我的帖子以顯示新的蜘蛛 - 我確信我正在犯一個小錯誤,但突然找不到它! –

+0

'response = json.loads(jsonResponse)'用你得到的json替換'jsonResponse' – Tushar