python - 通过python中的beautifulsoup从yahoofinance中提取表数据
问题描述
我是一名 Python 程序员。我想通过beautifulsoup库提取下面链接中的所有表格数据。
这是链接:https ://finance.yahoo.com/quote/GC%3DF/history?p=GC% 3DF[在此处输入图像描述] 1
解决方案
您需要查看网络抓取教程。
这是一个让您入门的方法:https ://realpython.com/python-web-scraping-practical-introduction/
这种事情可能会因复杂的标记而变得有点复杂,我会说问题帖子中提供的链接有资格作为稍微复杂的标记,但基本上,你想找到带有“Pb( 10px) Ovx(a) W(100%)” 类或表容器,其数据测试属性为“历史价格”。从那里向下钻取到您需要的标记数据。
但是,如果您坚持使用 BeautifulSoup 库,这里有一个教程:https : //realpython.com/beautiful-soup-web-scraper-python/ 向下滚动到第 3 步:“使用 Beautiful Soup 解析 HTML 代码”
安装库:python -m pip install beautifulsoup4
然后,使用以下代码抓取页面:
import requests
from bs4 import BeautifulSoup
URL = "https://finance.yahoo.com/quote/GC%3DF/history?p=GC%3DF"
page = requests.get(URL)
soup = BeautifulSoup(page.content, "html.parser")
然后,找到我之前提到的具有“历史价格”的 data-test 属性的表容器:
results = soup.find(attrs={"data-test" : "historical-prices"})
感谢其他 StackOverflow 帖子提供了有关 attrs 参数的信息:Extracting an attribute value with beautifulsoup
从那里,你会想要向下钻取。我不确定如何正确执行此步骤,因为我以前从未在 Python 中这样做过,但是有多种方法可以做到这一点。我的首选方法是在初始结果集上使用 find 方法或 findAll 方法:
result_set = results.find("tbody", recursive=False).findAll("tr")
或者,您可以使用已弃用的 findChildren 方法:
result_set = results.findChildren("tbody", recursive=False)
result_set2 = result_set.findChildren("tr", recursive=False)
您可能需要为每个向下钻取一个结果集循环。请注意,您提到的页面并不容易。您必须多次深入才能找到正确的 tr 元素。当然,上面的代码只是示例代码,没有经过适当的测试。
推荐阅读
- sitecore - Sitecore 与 iis 表单身份验证和编码基本身份验证
- c# - ASP.NET Core 2.1 错误?两因素身份验证 (2FA)
- bash - 过滤 2 个时间戳之间的日志文件条目,特别是 [31/Jul/2018:21:36:18 -0700] 格式
- android - 不同设备上的时间选择器对话框主题
- sql-server - Exchange 事务架构 - 数据库设计
- c# - Hangfire Cron 作业未在实际 Cron 时间执行
- pandas - 如何按自定义区域聚合?
- bash - 如何检查 docker pull 是否真的拉了一些东西
- opendaylight - 使用 yang 生成的 pojos 使用 odl netconf 客户端配置设备
- node-red - 如何将文件上传到 Node-RED