2016-07-02 9 views
3

私はhttp://emojipedia.org/emoji/をスクレイプしようとしていますが、これを行う最も効率的な方法がわかりません。私がスクレイプしたいのは、table class = "emoji_list"の中にあります。私は別々の列にそれぞれの "td"の中のものを保存したいと思います。出力は、各ラインは、絵文字を表し、次のようになります:私はこれまでのところ、次のコードを書かれているPythonでテーブルクラスをスクラブ

Col1_Link    Col2_emoji  Col3_Comment  Col4_UTF 
"/emoji/%F0%9F%98%80/"    Grinning Face   U+1F600 

が、私はそれを行うための最善の方法は何かわかりません。

import requests 
from bs4 import BeautifulSoup 
import urllib 
import re  

url = "http://emojipedia.org/emoji/" 
html = urllib.urlopen(url) 
soup = BeautifulSoup(html) 
soup.findAll('tr', limit=2) 

ご協力いただきありがとうございます。

答えて

3

soup.findAll('tr', limit=2)は、ページ上の最初の2文字を取得するだけではあまり効果がありません。もう一つの方法は、分割せずに取得のみテキストになり

import requests 
from bs4 import BeautifulSoup 
url = "http://emojipedia.org/emoji/" 
html = requests.get(url).content 

soup = BeautifulSoup(html) 
table = soup.select_one("table.emoji-list") 

for row in table.find_all("tr")[:5]: 
    td1, td2 = row.find_all("td") 
    em, desc = td1.text.split(None, 1) 
    print(td1.a["href"], em, desc, td2.text) 

ます:あなたが最初のテーブルのすべての行を見つける必要があり、2つのTDS各TRの内側にあるもの、あなたが望む抽出また、私はurllibはオーバー要求を使用してに固執するだろうfind(text=True, recursive=False)

for row in table.find_all("tr"): 
    td1, td2 = row.find_all("td") 
    print(td1.a["href"], td1.a.span.text, td1.a.find(text=True, recursive=False), td2.text) 

と子テキストを除くタグからテキストを取得すること。

+0

ありがとうございます! "table = soup.select_one(" table.emoji-list ")"は私のためには機能しませんでしたが、 "table = soup.find( 'table'、{'class': 'emoji-list'}) " – morfara

+0

@morfara、興味深い、あなたはソースを取得するためにリクエストを使用しましたか? –

+0

私は掻爬するのが初めてであり、どのライブラリを使用するのが最も良いか混乱することを認めなければなりません。あなたはurllibよりも要求が優れている理由を説明する良いリソースを知っていますか? P. 1はい、私はそれを使用しましたが、それは私に "TypeError: 'NoneType'オブジェクトは呼び出し可能ではありません" P.s. 2 td1.textについては、出力として "u '\ U0001f600 Grinning Face'"を取得します。英語だけを保ち、ユニコードを削除する簡単な方法はありますか? もう一度おねがいします! – morfara

関連する問題