2016-07-02 61 views
3

我想抓http://emojipedia.org/emoji/,但我不知道什麼是最有效的方式來做到這一點。我想在表格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)考慮到剛剛獲得頁面上的前兩個trs,不會做太多工作。你需要先找到的所有行然後提取你想要的是兩個TDS內每個TR

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) 

另一種方法是隻獲取文本而不破會是讓從一個標籤不包括子文本的文本與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) 

我也堅持使用過的urllib請求。

+0

非常感謝! 「table = soup.select_one(」table.emoji-list「)」對我不起作用,但我使用了「table = soup.find('table',{'class':'emoji-list'}) 「 – morfara

+0

@morfara,有趣的是,您是否使用請求獲取源代碼? –

+0

我是新來的刮,我不得不承認,它是如此令人困惑哪些圖書館是最好的使用。你知道有什麼好的資源可以解釋爲什麼request比urllib更好嗎? P.s. 1是的,我用它,但它給了我「TypeError:'NoneType'對象不可調用」 P. 2對於td1.text,我得到「u'\ U0001f600 Grinning Face'」作爲輸出。有沒有簡單的方法只保留英文並放棄Unicode? 再次感謝! – morfara