2016-09-20 11 views
0

私はウェブクローラーの世界では初めてです。単純なJSONファイルをクロールしてそこからリンクを取得するのは少し難しいです。私はこれを試して達成するためにフレームワークを使用しています。JSONファイルからリンクをクロールする

{ 

"pages": [ 

{ 

    "address":"http://foo.bar.com/p1", 

    "links": ["http://foo.bar.com/p2", 

    "http://foo.bar.com/p3", "http://foo.bar.com/p4"] 

}, 

{ 

    "address":"http://foo.bar.com/p2", 

    "links": ["http://foo.bar.com/p2", 

    "http://foo.bar.com/p4"] 

    }, 

{ 

    "address":"http://foo.bar.com/p4", 

    "links": ["http://foo.bar.com/p5", 

    "http://foo.bar.com/p1", "http://foo.bar.com/p6"] 

    }, 

    { 

     "address":"http://foo.bar.com/p5", 

     "links": [] 

    }, 

    { 

     "address":"http://foo.bar.com/p6", 

     "links": ["http://foo.bar.com/p7", 

     "http://foo.bar.com/p4", "http://foo.bar.com/p5"] 

     } 

    ] 

    } 

マイitems.pyファイル

import scrapy 
from scrapy.item import Item, Field 


class FoobarItem(Item): 
    # define the fields for your item here like: 
    title = Field() 
    link = Field() 

マイクモファイル

from scrapy.spider import Spider 
from scrapy.selector import Selector 
from foobar.items import FoobarItem 

class MySpider(Spider): 
    name = "foo" 
    allowed_domains = ["localhost"] 
    start_urls = ["http://localhost/testdata.json"] 


    def parse(self, response): 
     yield response.url 

結局、私はファイルをクロールしてリンクを返したいと思います:

私のJSONの例ファイル

重複していないオブジェクトでは、今は私もjsonをクロールするのに苦労しています。上記のコードはjsonオブジェクトをクロールしてリンクを返すと思ったが、出力ファイルは空です。私が何を間違っているのか分かりませんが、助けていただければ幸いです。

答えて

-1

まず、jsonファイルを解析する方法が必要です。json libはうまくいくはずです。その後、次のビットは、URLを使用してクローラを実行することです。

import json 

with open("myExample.json", 'r') as infile: 
    contents = json.load(infile) 

#contents is now a dictionary of your json but it's a json array/list 
#continuing on you would then iterate through each dictionary 
#and fetch the pieces you need. 

    links_list = [] 
    for item in contents: 
     for key, val in item.items(): 
       if 'http' in key: 
        links_list.append(key) 
       if 'http' in value: 
        if isinstance(value, list): 
         for link in value: 
           links_list.append(link) 
        else: 
         links_list.append(value) 
    #get rid of dupes 
    links_list = list(set(links_list)) 
#do rest of your crawling with list of links 
関連する問題