2017-05-17 16 views
0

私は乗客のためにウェブページを掻き集めようとしました&貨物データ。私はそれらを通常のデータに変換できませんでした。ウェブエンコーディングは難しいようです。PythonでUTF8エンコーディングを削除する

私が使用したコードは次のとおりです。

from __future__ import print_function 
import requests 
import pandas as pd 
from bs4 import BeautifulSoup 
import urllib 
url = "https://www.faa.gov/data_research/passengers_cargo/unruly_passengers/" 
r = requests.get(url) 
soup = BeautifulSoup(r.content) 
links = soup.find_all("tbody") 

for link in links: 
    print(link.text) 

出力1

これはフォーマット年と合計で印刷します。しかし、リストに追加すると、エンコーディングによってデータが失われます。あなたは私を実行するために出力1

names = [] 
for link in links: 
    names.append(link.text) 
names = map(lambda x: x.strip().encode('ascii'), names) 
print(names) 

出力2

に所望の出力は、年合計であることを見ることができます。このようfind_all trtd使用することができます

+5

「\ n」は簡単に置き換えたり分割したりできる改行です。 –

+4

あなたのデータを破壊しているわけではありません。あなたのデータは問題ありません。以前とまったく同じ文字が含まれています。それは文字列を直接 'print'した場合とは異なった表示になります。 – user2357112

+3

実際に実行したコードに 'map(lambda x:x.strip()。encode( 'ascii')、names)'ステップが含まれておらず、 'encode( 'ascii')'部分がおそらく必要ない。 – user2357112

答えて

1

を分析します:

import requests 
from bs4 import BeautifulSoup 
import urllib 
url = "https://www.faa.gov/data_research/passengers_cargo/unruly_passengers/" 
r = requests.get(url) 
soup = BeautifulSoup(r.content) 
links = soup.find_all("tr") 

data = [] 
for link in links: 
    tds = link.find_all('td') 
    if tds: 
     data.append({'year':tds[0].text,'total':tds[1].text}) 

print(data) 

それは働いている。

希望します。

関連する問題