2017-08-05 5 views
2

私は非常にPythonには新しく、すべての仕組みを頭で考えようとしています。今は美しいスープを使ってデータのテーブルを削っています。私は美しいスープを使用したい特定のテーブルに移動することができますが、実際のデータを引き出すことは私を困惑させ、私が試みたすべてが失敗しました。これは、出力私が欲しいのは、最終的に私がに並べ替えたいTDタグ、内部の実際の数字である美しいスープとパイソンを持つテーブルを掻き立てよう3.x

<td class="text-left">Total return</td> 


<td>-2.79</td> 


<td>-2.61</td> 


<td>11.22</td> 


<td>24.6</td> 


<td>19.18</td> 


<td>18.65</td> 


<td>21.44</td> 


<td>-</td> 

で私を残して

sauce = requests.get('https://www.investsmart.com.au/managed-funds/fund/cromwell-phoenix-opportunities-fund/40665') 
soup = BeautifulSoup(sauce.text, 'html.parser') 
tables = soup.findChildren('table') 
my_table = tables[1] 
rows = my_table.findChildren(['tr']) 

for tds in rows[1]: 
    print(tds) 

これは私の現在のコードですそれぞれの月を抽出し、それをExcelファイルに出力します。

私がしようとすると、しかし、私は、タグなしでちょうどリターンをつかむためにどのように本当にわからない:

for tds in rows[1]: 
    print(tds.text) 

私はこのエラーを取得:はAttributeError:「NavigableString」オブジェクトが属性「テキスト」を持っていない

どのようにしてこのデータを取り込んで、何から来るのかを分かりやすくして出力することができます。なぜなら、次に何をすべきか分からないからです。

答えて

0
sauce = requests.get('https://www.investsmart.com.au/managed-funds/fund/cromwell-phoenix-opportunities-fund/40665') 
soup = bs4.BeautifulSoup(sauce.text, 'html.parser') 
#this gets all the tables in the page, we need the second table 
table = soup.findAll('table')[1] 
#gets all the rows in that table 
rows = table.findAll('tr') 
#since the first row contains all column titles 
column_heads = [i.text.encode('utf-8') for i in rows[0].findAll('th')[1:]] 
#r will hold all the rows in the form of lists 
r = [] 
for i in rows[1:]: 
    r.append([k.text.encode('utf-8') for k in i.findAll('td') ]) 

あなたは慎重にあなたがあなたが

出力を必要とするタグをターゲットにすることができたに基づく構造のアイデアを与えるだろう、あなたのブラウザのビュー・ソース・ツールを使用してHTMLページを調べているやらなければなりませんご参考のために:

column_heads = ['1 Month %','3 Month %','6 Month %','1 Year % p.a.','2 Year % p.a.','3 Year % p.a.','5 Year % p.a.','10 Year % p.a.'] 

機能エンコード()Unicode形式の例であるすべてのテキストを変換しますu'Hello」の文字列にする

印刷最初のリストあなたは、私はcsvファイルが動作すると思いExcelにエクスポートするにしたい場合は、R

r[0] = ['Total return','-2.79','-2.61','11.22','24.6','19.18','18.65','21.44','-'] 

私は、これはあなたが

+0

私はこれを感謝します.string引数を発見し、それを動作させるようにしましたが、これはもっと良い方法のように思えますので、私はそれを使って遊んで、私ができることを見ていきます。先週始めたように、プログラミングに新しいことは本当に役に立ちます。 – Jisket

1

私はbeautifulsoupなしのトリックを持っています。インストールpandas。その後、

import pandas as pd 
tables = pd.read_html("http:...") 

の後、tablesはページのテーブルのリストになりました。

+1

おかげで、私が実際にしたいです私はそれが初めてであるので、Pythonについてもっと理解するためにまずbs4を学ぶことに決心しました。しかし、私がbs4に慣れた後は、この方法を試してみます。 – Jisket

0

探しているものであると思います:提案のための

import requests 
from bs4 import BeautifulSoup 

sauce = requests.get('https://www.investsmart.com.au/managed-funds/fund/cromwell-phoenix-opportunities-fund/40665') 
soup = BeautifulSoup(sauce.text, 'html.parser') 
tables = soup.find_all('table') 
with open('csvfile.csv','w') as csv: 
    for row in tables[1].find_all('tr'): 
     line = "" 
     for td in row.find_all(['td', 'th']): 
      line += '"' + td.text + '",' 
     csv.write(line + '\n') 
関連する問題