2017-12-13 13 views
0

私はお気に入りのポッドキャストのURLを掻き集めるプログラムを書こうとしています。後者のデータからローカルWebサイトを作成したいと考えています。jsonデータとして書き込むために複数の値を辞書に割り当てる?

私はjsonファイルとして書き込んだり、そのデータにjavascriptを使ってアクセスするための辞書を作成しようとしています。

{"url": "www.test.com", "text" : "Podcast 1... foo bar"} 

私はしかし、値を割り当てるトラブルを抱えている:

私は辞書のようになりたいと思います。あなたがループ内でこれを行う場合は、各リンクが処理されるように、しかし、linksの値が置き換えられます

if link.has_attr('href'): 
     links = {'url': link.get('href'), 'text': link.get_text()} 

、および:

def findLinks(url): 
    filename = url[-16:-4] + ".json" 
    response = requests.get(url).content 
    soup = BeautifulSoup(response, parseOnlyThese=SoupStrainer('a')) 

    for link in soup: 
     if link.has_key('href'): 
      links[link.attrMap['href']] = link.getText() #Dictionary 

    writeToJSON(filename, links) 
+0

links = [{'url': link['href'], 'text': link.get_text()} for link in soup if link.has_attr('href')] 

最後に、JSON形式のファイルに書き込みます[これらの行](https://stackoverflow.com/a/47757432/355230)に沿って何かできますか? – martineau

答えて

0

は、このような辞書を作成します。私はこれまで持っているものファイルに保存されている辞書は1つだけです。そのため、代わりに辞書のリストを使用してください。あなたが行くように、リストに各辞書を追加します。

links = [] 
for link in soup: 
    if link.has_attr('href'): 
     links.append({'url': link['href'], 'text': link.get_text()}) 

またはリストの内包表記を使用します。

writeToJSON(filename, links) 
0
def findLinks(url): 
    temp_list = [] 
    filename = url[-16:-4] + ".json" 
    response = requests.get(url).content 
    soup = BeautifulSoup(response, parseOnlyThese=SoupStrainer('a')) 

    for link in soup: 
     if link.has_key('href'): 
      result_dict = {'url': link['href'], 'text': link.get_text()} 
      temp_list.append(result_dict) 

    json.dump(temp_list,open(filename,'w')) 
関連する問題