2017-01-19 13 views
2

Webページ上の表からデータを抜き取り、Python 3とBeautiful Soup 4を使用してCSVファイルに保存しようとしています。データを抽出することができましたが、データの周りのタグを削除したり、CSVファイルに保存する方法を見つけることができませんでした。私は以前に尋ねられた質問を組み合わせ、それらの方法を適用しようとしましたが、私はまだこの問題を解決するには不足しています。ここでPython 3とBeautiful Soup 4を使用してHTMLタグを削除し、CSVファイルに保存します。

は私のスクリプトです:ここでは

import csv 
import pandas as pd 
import requests 
from bs4 import BeautifulSoup 

url="enter url here" 
r=requests.get(url) 
soup=BeautifulSoup(r.content,"lxml") 

table=soup.find("table", attrs={"class":"smsEvents"}) 

list_rows=[] 
for row in table.find_all('tr'): 
    list_cells=[] 
    for cell in row.find_all('td'): 
     list_cells.append(cell) 
    list_rows.append(list_cells) 
print(list_rows) 

は、どのような印刷コマンドが返すのサンプルです:

&amp;nbsp        </td>, <td class="rel119 carrier"> 
&amp;nbsp        </td>], [<td class="rel46 carrier"> 
            0.00 
           </td>, <td class="rel47 carrier"> 
            0.00 
           </td>, <td class="rel48 carrier"> 
            0.00 

の表は、毎月記録されている約25の変数(行)(列が含まれています)。 &amp;nbspのエントリは、変数を異なるカテゴリに分ける行に対応していると思います。

これらのタグを削除し、出力をCSVファイルに保存したいのは理想的です。私は非常にPythonとデータスクレイピングに新しいので、任意のすべてのヘルプは非常に感謝しています。

ありがとうございます!

+0

ポストのURLまたはテーブルのHTMLコード –

+0

404 Not found ..... –

+0

あなたの質問にテーブルのhtmlコードを投稿すると、これは参考になります。 –

答えて

1
import csv 
import pandas as pd 
import requests 
from bs4 import BeautifulSoup 

url="https://ai.fmcsa.dot.gov/SMS/Carrier/1000196/History.aspx" 
r=requests.get(url) 
soup=BeautifulSoup(r.content,"lxml") 

table=soup.find("table", attrs={"class":"smsEvents"}) 
with open('a.csv', 'w', newline='') as f: 
    writer = csv.writer(f) 
    for tr in table('tr'): 
     row = [t.get_text(strip=True) for t in tr(['td', 'th'])] 
     writer.writerow(row) 

アウト: enter image description here

+1

完璧に働いて、ありがとう。 –

0

私はここlxmlを使用しての代わりに、直接BeautifulSoup(お勧めしますこのような何か試してみてください:あなたがあなたの代わりに細胞を得るために、親テーブルのそれぞれの子要素を反復処理の完全なXPathをすることができます

from lxml import html 
res=requests.get(url) 
node = html.fromstring(res.content) 
cells = node.xpath('//table[@class="smsEvents"]/tr/td') 

お知らせ。

+0

ダビデの提案に感謝します。私はこれをもう一度やってみるが、代わりにlxmlを使う。 –

関連する問題