使用python进行网页爬取

在本文中,我们将使用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抓取数据。

随时发表评论,问我任何事情。 您可以在TwitterMedium上关注我。 感谢您的阅读,请按赞按钮! 👍

其他资源

有清单! 此时,您应该编写第一个Web抓取工具以从任何网站收集数据都应该感到很舒服。 以下是一些其他资源,在您的网络抓取过程中可能会有所帮助:

网络抓取代理列表

服务 清单

网页抓取工具

BeautifulSoup文档

Scrapingdog文档

网页抓取指南

翻译自: https://hackernoon.com/how-to-scrape-yahoo-finance-using-python-an1l3yx0

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值