2016-04-16 15 views
1

WebサイトのAfk。、Aantal、およびZetels列を解析して、最終的にJSONファイルとして保存することを希望します。BeautifulSoupで列を解析し、JSONとして保存する

jsonファイルとして保存する前に、要素を解析する必要があります。

私は

from bs4 import BeautifulSoup 
import urllib 

jaren = [str("2010"), str("2012")] 

for Jaargetal in jaren: 
    r = urllib.urlopen("http://www.nlverkiezingen.com/TK" + Jaargetal +".html").read() 
    soup = BeautifulSoup(r, "html.parser") 
    tables = soup.find_all("table") 

    for table in tables: 
     header = soup.find_all("h1")[0].getText() 
     print header 

     trs = table.find_all("tr")[0].getText() 
     print '\n' 
     for tr in table.find_all("tr"): 
       print "|".join([x.get_text().replace('\n','') for x in tr.find_all('td')]) 

アイブ氏は、私が間違って何をやっているか、私は何をすべきかを持っているん

from bs4 import BeautifulSoup 
import urllib 

jaren = [str("2010"), str("2012")] 

for Jaargetal in jaren: 
    r = urllib.urlopen("http://www.nlverkiezingen.com/TK" + Jaargetal +".html").read() 
    soup = BeautifulSoup(r, "html.parser") 
    tables = soup.find_all("table") 

    for table in tables: 
     header = soup.find_all("h1")[0].getText() 
     print header 

     for tr in table.find_all("tr"): 
      firstTd = tr.find("td") 
      if firstTd and firstTd.has_attr("class") and "l" in firstTd['class']: 
       tds = tr.find_all("td") 

       for tr in table.find_all("tr"): 
        print "|".join([x.get_text().replace('\n','') for x in tr.find_all('td')]) 
        break 

をしようと試み、私は正しい軌道に乗っていましたか?

+1

あなたが正確に既存のコードと間違っているものを指してもらえますか?ありがとう。 – alecxe

+0

@alecxe最初のコードでは、すべての行が印刷されます:Partij | Afk | Aantal |%| +/- | Zetelsコードに行を印刷するだけです:Afk。 AantalとZetels。 – Danisk

答えて

0

目的の列のみを抽出する1つのオプションは、列のインデックスをチェックすることです。興味のある列のインデックスを定義します。

DESIRED_COLUMNS = {1, 2, 5} # it is a set 

をそしてfind_all()enumerate()を使用します。

"|".join([x.get_text().replace('\n', '') 
      for index, x in enumerate(tr.find_all('td')) 
      if index in DESIRED_COLUMNS]) 
+0

ありがとう@Alecxeには、afan、Aantal、Zetelsなどの最初の3行しか取得できないというオプションもあります。 – Danisk

+0

@Daniskあなたはいつもスライスすることができます: 'tr.find_all( 'td')[:3]' – alecxe

+0

あなたの助けてくれてありがとう!私は別の簡単な質問があります。これは今働いていますが、唯一のことは2012年と2010年のことです.2010年は2012年よりも多くの行があるので、私は欲しくないコンテンツを削っています。言うオプションがありますか? "tr.find_all td [:20]と2010年のtr.find_all( 'tr')[:19] – Danisk

関連する問題