2017-09-07 6 views
1

NASAのウェブページから「毎日の太陽放射 - 水平」の列だけを読みたいと思っています。それについてどうすればいいですか?ここに私のコードです:ウェブページテーブルから列を読む

# Horizontal radiation values (kwh/m**2) 
import urllib.parse 
import html5lib 
import pandas as pd 

url = "https://eosweb.larc.nasa.gov/cgi-bin/sse/retscreen.cgi?email=rets%40nrcan.gc.ca&step=1&lat=49.4&lon=7.3&submit=Submit" 

params = {'lat':a,'lon':b} 

url_parts = list(urllib.parse.urlparse(url)) 

query = dict(urllib.parse.parse_qsl(url_parts[4])) 

query.update(params) 

url_parts[4] = urllib.parse.urlencode(query) 

print(urllib.parse.urlunparse(url_parts)) 

webresult = pd.read_html(urllib.parse.urlunparse(url_parts)) 
webresult[3] 

それは完全なテーブルのみを表示します。

+0

「a」、「b」、「pd」とは何ですか? – Adelin

+0

有効なコードを記入してください。書かれたコードは実行されません。 – Mike

答えて

2

これは簡単にBeautifulSoupを使用して行うことができます。コードのコメントで説明します。

import bs4, requests 

def getColumn(url): 
    # get the page 
    resp = requests.get(url) 

    # create a BeautifulSoup object that represents the page 
    # and use lxml parser to parse the html 
    soup = bs4.BeautifulSoup(resp.text, 'lxml') 

    # get all the tables in the page 
    tables= soup.findAll('table') 

    # all data of interest will be collected here 
    data = [] 

    #we only want to process the 4th table, so we store it in table 
    table = tables[3] 

    # for each row in this table, get the 4th column and add it in data 
    for row in table.findAll('tr'): 
     row_data= row.findAll('td') 

     if not row_data: continue #skip empty lists 

     column4= row.findAll('td')[3].string # read the 4th column 

     data.append(column4) 

    # data is in string so we need to convert it to float 

    # discard the first and last two elements in the list (we don't want them) 
    # then convert the remaining from string to float 
    data = [ float(x.strip()) for x in data[1:-2]] 

    return data 


def main(): 
    url= 'https://eosweb.larc.nasa.gov/cgi-bin/sse/retscreen.cgi?email=rets%40nrcan.gc.ca&step=1&lat=49.4&lon=7.3&submit=Submit' 
    lst = getColumn(url) 

    print(lst) 

if __name__ == '__main__': 
    main() 
+0

別の問題があります。私は3.6から配列でURLから取得したデータを乗算するはずだが、私はこのtypeErrorを取得し続けています: 'NoneType'オブジェクトはsubscriptableではありません。どうすればいいですか? – Mfon

+0

@Mfonこのタイプの例外は、Nullオブジェクトで減算を行うときに発生します。自分で解決できない場合は、新しい質問を作成する必要があります。 – Anonta