【问题标题】:Scrape a table class in Python在 Python 中抓取一个表类
【发布时间】:2016-11-04 10:39:18
【问题描述】:

我正在尝试抓取 http://emojipedia.org/emoji/ ,但我不确定最有效的方法是什么。我想抓取的内容在表 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)

非常感谢您的帮助。

【问题讨论】:

    标签: python web-scraping beautifulsoup python-requests


    【解决方案1】:

    soup.findAll('tr', limit=2) 不会做太多考虑到只获取页面上的前两个 trs。您需要首先找到 table 的所有行,然后在每个 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)
    

    另一种方法是只获取文本而不进行拆分,即从 a 标签中获取文本,不包括 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。

    【讨论】:

    • 非常感谢! "table = soup.select_one("table.emoji-list") " 对我不起作用,但我使用了 "table = soup.find('table', {'class': 'emoji-list'}) "
    • @morfara,有意思,你是用 requests 来获取源的吗?
    • 我是爬虫的新手,我不得不承认哪个库最好用是很混乱的。你知道有什么好的资源可以解释为什么 requests 比 urllib 更好吗?附: 1 是的,我使用了它,但它给了我“TypeError:'NoneType' 对象不可调用” 2 对于 td1.text,我得到“u'\U0001f600 Grinning Face'”作为输出。有什么简单的方法可以只保留英文并删除 unicode?再次感谢!
    • 你用的是什么版本的bs4? requests 就像文档中所说的 http for human 一样,它使许多复杂的 http 请求变得非常简单,它将成为标准库的一部分,但由于各种原因作者不想这样做。如果你在 python 中做 http,除非你真的掌握它,否则你应该使用 requests。
    • 对不起,是的,我刚刚看到了重复的输出,编辑就可以了
    猜你喜欢
    • 2014-04-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-12-15
    • 2018-11-08
    • 2021-04-26
    • 2018-07-02
    相关资源
    最近更新 更多