在本文中,我们将使用python抓取Yahoo Finance。 这是股票市场数据的重要来源。 我们将为此编写一个刮板。 使用该刮板,您将可以从yahoo Finance刮刮任何公司的股票数据。 如您所知,我想使事情变得简单,为此,我还将使用网络刮板 ,这将提高您的刮板效率。
为什么使用这个工具? 该工具将帮助我们使用数百万个旋转代理来抓取动态网站,以免被阻止。 它还提供了验证码清除功能。 它使用无标题的chrome抓取动态网站。
要求
通常,网页抓取分为两个部分:
通过发出HTTP请求获取数据通过解析HTML DOM提取重要数据
库和工具
美丽的汤 是一个Python库,用于从HTML和XML文件中提取数据。 通过请求,您可以非常轻松地发送HTTP请求。 网页抓取工具 提取目标网址HTML代码。
建立
我们的设置非常简单。 只需创建一个文件夹并安装Beautiful Soup和请求即可。 要创建文件夹并安装库,请在给定命令下方键入。 我假设您已经安装了Python3.x。
mkdir scraper
pip install beautifulsoup4
pip install requests
现在,使用您喜欢的任何名称在该文件夹中创建一个文件。 我正在使用scraping.py。
首先,您必须注册scrapingdog API 。 它将为您提供1000个免费积分。 然后,只需在文件中导入Beautiful Soup和请求即可。 像这样。
from bs4 import BeautifulSoup
import requests
我们要抓的东西
这是我们将提取的字段列表:
1. 上一个收盘价
2. 打开
3. 竞标
4. 问
5. 天的范围
6. 52周范围
7. 音量
8. 平均 卷
9. 市值
10. Beta
11. 市盈率
12. 每股收益
13. 收益率
14. 预期股息和收益率
15. 除息日
16. 1y目标EST
准备食物
现在,由于我们具备了准备刮板的所有要素,因此我们应该对目标URL进行GET请求以获取原始HTML数据。 如果您不熟悉抓取工具,请敦促您仔细阅读其文档 。 现在,我们将使用请求库抓取Yahoo Finance的财务数据,如下所示。
r = requests.get("https://api.scrapingdog.com/scrape?api_key=<your-api-key>&url=https://finance.yahoo.com/quote/AMZN?p=AMZN&.tsrc=fin-srch" ).text
这将为您提供该目标URLHTML代码。
现在,您必须使用BeautifulSoup解析HTML。
soup = BeautifulSoup(r,’html.parser’)
现在,在整个页面上,我们有四个“ tbody”标签。 我们对前两个感兴趣,因为我们目前不需要第三和第四个“ tbody”标签中的可用数据。
首先,我们将使用变量“ 汤”找出所有这些“身体”标签。
alldata = soup.find_all(“tbody”)
如您所见 ,前两个“ tbody ”具有8个“ tr”标签,每个“ tr”标签具有两个“ td”标签。
try :
table1 = alldata[ 0 ].find_all(“tr”)
except :
table1= None
try :
table2 = alldata[ 1 ].find_all(“tr”)
except :
table2 = None
现在,每个“ tr”标签都有两个“ td”标签。 第一个td标记由属性的名称组成,另一个具有该属性的值。 这有点像键值对。
此时,我们将在开始for循环之前声明一个列表和一个字典。
l={}
u=list()
为了简化代码,我将为每个表运行两个不同的“ for”循环。 首先是“ table1”
for i in range( 0 ,len(table1)):
try :
table1_td = table1[i].find_all(“td”)
except :
table1_td = None
l[table1_td[ 0 ].text] = table1_td[ 1 ].text
u.append(l)
l={}
现在,我们要做的是将所有td标签存储在变量“ table1_td”中。 然后,我们将第一个和第二个td标签的值存储在“字典”中。 然后,我们将字典推入列表。 由于我们不想存储重复的数据,因此我们将在最后将字典设为空。 对于“ table2”,将遵循类似的步骤。
for i in range( 0 ,len(table2)):
try :
table2_td = table2[i].find_all(“td”)
except :
table2_td = None
l[table2_td[ 0 ].text] = table2_td[ 1 ].text
u.append(l)
l={}
然后,当您打印列表“ u ”时,您将得到一个JSON响应。
{
“Yahoo finance”: [
{
“Previous Close”: “2 ,317.80”
},
{
“Open”: “ 2 ,340.00”
},
{
“Bid”: “ 0.00 x 1800 ”
},
{
“Ask”: “ 2 ,369.96 x 1100”
},
{
“Day’s Range”: “ 2 ,320.00–2,357.38”
},
{
“52 Week Range”: “ 1 ,626.03–2,475.00”
},
{
“Volume”: “ 3 ,018,351”
},
{
“Avg. Volume”: “ 6 ,180,864”
},
{
“Market Cap”: “ 1.173 T”
},
{
“Beta (5Y Monthly)”: “ 1.35 ”
},
{
“PE Ratio (TTM)”: “ 112.31 ”
},
{
“EPS (TTM)”: “ 20.94 ”
},
{
“Earnings Date”: “Jul 23 , 2020 — Jul 27, 2020”
},
{
“Forward Dividend & Yield”: “N/A (N/A)”
},
{
“Ex-Dividend Date”: “N/A”
},
{
“1y Target Est”: “ 2 ,645.67”
}
]
}
没那么神奇。 我们仅在5分钟的设置过程中就刮掉了Yahoo财务。 我们有一个python对象数组,其中包含亚马逊公司的财务数据。 这样,我们可以从任何网站上抓取数据。
结论
在本文中,我们了解了无论网站类型如何,如何使用数据抓取工具和BeautifulSoup抓取数据。
随时发表评论,问我任何事情。 您可以在Twitter和Medium上关注我。 感谢您的阅读,请按赞按钮! 👍
其他资源
有清单! 此时,您应该编写第一个Web抓取工具以从任何网站收集数据都应该感到很舒服。 以下是一些其他资源,在您的网络抓取过程中可能会有所帮助:
翻译自: https://hackernoon.com/how-to-scrape-yahoo-finance-using-python-an1l3yx0