在Python中刮取一个表类

时间:2016-07-02 00:02:20

标签: python web-scraping beautifulsoup python-requests

我正试图抓http://emojipedia.org/emoji/,但我不确定最有效的方法是什么。在table class =“emoji_list”中找到了我想要抓取的内容。我想将每个“td”中的内容保存在单独的列中。输出将如下所示,其中每一行代表一个表情符号:

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)

非常感谢您的帮助。

1 个答案:

答案 0 :(得分:3)

soup.findAll('tr', limit=2)在考虑到只获取页面上的前两个trs时,不会做太多。您需要首先找到的所有行,然后在每个 tr 中提取您想要的两个 tds

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上的请求。