【问题标题】:Python - How to scrape Tr/Td table data using 'requests & BeautifulSoup'Python - 如何使用“请求和 BeautifulSoup”抓取 Tr/Td 表数据
【发布时间】:2014-11-02 20:56:49
【问题描述】:

我是编程新手。我正在尝试我的第一个 Web Crawler 程序,它将帮助我完成我的工作。我正在尝试构建一个程序,该程序将从网页中抓取 tr/td 表数据,但难以成功。这是我目前所拥有的:

import requests
from bs4 import BeautifulSoup


def start(url):
    source_code = requests.get(url).text
    soup = BeautifulSoup(source_code)
    for table_data in soup.find_all('td', {'class': 'sorting_1'}):
        print(table_data)

start('http://www.datatables.net/')

我的目标是打印出每一行,然后将其导出到 excel 文件中。

谢谢你, -Cire

【问题讨论】:

  • 这不是一个糟糕的开始,哪个部分不起作用?
  • 我似乎无法从此脚本中获取任何数据。它只是说“进程以退出代码0完成”。

标签: python beautifulsoup python-requests


【解决方案1】:

我的建议是,如果您是 Python 新手,请先通过 iPython 笔记本(交互式提示)进行操作,以便在尝试编写脚本或函数之前先了解一下。从好的方面来说,所有变量都会持续存在,并且更容易看到发生了什么。

从这里的屏幕截图中,您可以立即看到find_all 函数没有找到任何东西。正在返回一个空列表 []。通过使用ipython,您可以轻松地在先前定义的变量上尝试函数的其他变体。例如,soup.find_all('td')

【讨论】:

  • 感谢威廉的推荐。我一定会搞砸的。
  • 啊!这绝对有帮助!非常感谢威廉! :)
  • 嗨@cire,如果这个或任何答案解决了您的问题,请点击复选标记考虑accepting it。这向更广泛的社区表明您已经找到了解决方案,并为回答者和您自己提供了一些声誉。没有义务这样做。
【解决方案2】:

查看http://www.datatables.net 的来源,我没有看到文本sorting_1任何 个实例,因此我不希望搜索该class 的所有表格单元格返回任何东西。

也许class 出现在与 DataTables 网站相关联的不同 URL 上,在这种情况下,您需要在代码中使用该 URL。 class 也有可能仅在客户端运行某些 JavaScript 之后出现(即,可能在对示例表执行某些操作之后),而不是在最初加载的页面上。

我建议从您知道在初始页面上的标签开始(通过查看浏览器中的页面源来查看)。

例如,目前,我可以看到divclass="content"。所以find_all代码可以改成如下:

for table_data in soup.find_all('div', {'class': 'content'}):
        print(table_data)

这应该会找到一些东西。

OP 对 cme​​ts 的回应:

在这种情况下您没有找到标记/类配对的确切原因是 DataTables 通常在 DOM 完成加载之后通过 JavaScript 在客户端呈现表格(尽管这取决于在页面上以及 DataTables 初始化代码所在的位置)。这意味着与基本 URL 关联的 HTML 不包含此内容。如果您 curl 基本 URL 并查看输出,则可以看到这一点。

但是,当在浏览器中加载它时,一旦 DataTablesJavaScript 触发,表格就会被渲染,并且 DOM 会被动态修改以添加表格,包括带有您正在寻找的课程。

【讨论】:

  • 嗨,Khampson,我把它放在表格部分下面:Airi Satou。我刚刚意识到我在回复时无法按 Enter :P
  • 这是我在“检查元素/编辑 HTML”下得到的: Airi Satou会计东京 33 2008/11/28 $162,700
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-04-20
  • 1970-01-01
  • 1970-01-01
  • 2020-01-03
  • 1970-01-01
  • 2016-02-21
  • 1970-01-01
相关资源
最近更新 更多