【问题标题】:Can't scrape HTML table using BeautifulSoup无法使用 BeautifulSoup 抓取 HTML 表格
【发布时间】:2016-05-12 03:19:42
【问题描述】:

我正在尝试使用 Python、BeautifulSoup、Requests 以及 Selenium 从网页上的表格中抓取数据以登录该站点。 这是我要获取数据的表...

<div class="sastrupp-class">
        <table>
            <tbody>
                <tr>
                    <td class="key">Thing I dont want 1</td>
                    <td class="value money">$1.23</td>

                    <td class="key">Thing I dont want 2</td>
                    <td class="value">99,999,999</td>

                    <td class="key">Target</td>
                    <td class="money value">$1.23</td>

                    <td class="key">Thing I dont want 3</td>
                    <td class="money value">$1.23</td>

                    <td class="key">Thing I dont want 4</td>
                    <td class="value percentage">1.23%</td>

                    <td class="key">Thing I dont want 5</td>
                    <td class="money value">$1.23</td>
                </tr>
            </tbody>
        </table>
    </div>
我可以很好地找到“sastrupp-class”,但我不知道如何查看它并找到我想要的表格部分。 我想我可以像这样寻找我正在寻找的课程......
    output = soup.find('td', {'class':'key'})
    print(output)

但这不会返回任何东西。

重要提示:

  1. 表中的类名与我想要的类名相同。如果我不能将它们分开,我可以接受,尽管我宁愿只退回我想要的。

    2.网站上还有其他

    为class="sastrupp-class"。
    1. 我显然是这方面的初学者,所以如果我能帮助您,请告诉我。 任何帮助/指针将不胜感激。

    【问题讨论】:

    • 它在我的电脑上运行良好,是实际代码吗?如果您尝试根据文本获取特定元素,您可以先“find_all”,然后按内容过滤其他元素。
    • itextpad.com/wFsEvS7eDb 这是我尝试过的
    • 可能这部分表格是由javascript生成的,所以请求无法获取。将页面下载到 HTML 文件并在编辑器中打开以检查 HTML 标签。
    • @furas 我相信就是这样。查看页面源时看不到表格。当我检查元素时,我可以看到 cmets 说每个项目都来自一个名为 summary() 的函数。
    • 所以现在检查页面使用的所有文件并找到summary()。或者在 Chrome 中使用 "Developer Tools" 或在 Firefox 中使用 "Firebug" 来查看浏览器从服务器读取的所有数据 - 也许您会在不同的文件中找到您的数据。

标签: python selenium beautifulsoup


【解决方案1】:

1) 首先,要获得“目标”,您需要find_all,而不是find。然后,考虑到您确切知道您的目标将在哪个位置(在您给出的示例中是 index=2),可以像这样达到解决方案:

from bs4 import BeautifulSoup

html = """(YOUR HTML)"""

soup = BeautifulSoup(html, 'html.parser')
table = soup.find('div', {'class': 'sastrupp-class'})
all_keys = table.find_all('td', {'class': 'key'})
my_key = all_keys[2]

print my_key.text  # prints 'Target'

2)

网站上还有其他 class="sastrupp-class" 的

同样,您需要使用 find_all 选择您需要的索引,然后选择正确的索引。

示例 HTML:

<body>
<div class="sastrupp-class"> Don't need this</div>
<div class="sastrupp-class"> Don't need this</div>
<div class="sastrupp-class"> Don't need this</div>
<div class="sastrupp-class"> Target</div>
</body>

要提取目标,您可以:

all_divs = soup.find_all('div', {'class':'sastrupp-class'})
target = all_divs[3]  # assuming you know exactly which index to look for

【讨论】:

    猜你喜欢
    • 2021-01-11
    • 2011-03-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多