设为首页收藏本站language→→ 语言切换

鸿鹄论坛

 找回密码
 论坛注册

QQ登录

先注册再绑定QQ

查看: 1176|回复: 6
收起左侧

如何使用python进行网页爬取?

[复制链接]
发表于 2020-8-6 18:09:45 | 显示全部楼层 |阅读模式
  今天将使用python抓取一个股票市场数据的重要来源。我们将为此编写一个刮板。使用该刮板,您将可以从一个平台上刮刮任何公司的股票数据。如您所知,想使事情变得简单,为此还将使用网络刮板,这将提高您的刮板效率。为什么使用这个工具?该工具将帮助我们使用数百万个旋转代理来抓取动态网站,以免被阻止。它还提供了验证码清除功能。它使用无标题的chrome抓取动态网站。
  要求
  通常,网页抓取分为两个部分:
  通过发出HTTP请求获取数据通过解析HTMLDOM提取重要数据
  库和工具
  BeautifulSoup是一个Python库,用于从HTML和XML文件中提取数据。通过请求, 您可以非常轻松地发送HTTP请求。网络抓取工具以提取目标网址的HTML代码。
  建立
  我们的设置非常简单。只需创建一个文件夹并安装BeautifulSoup和请求即可。要创建文件夹并安装库,请在给定命令下方键入。我假设您已经安装了Python3.x。
  mkdirscraper
  pipinstallbeautifulsoup4
  pipinstallrequests
  现在,使用您喜欢的任何名称在该文件夹中创建一个文件。我正在使用scraping.py。
  首先,您必须注册scrapingdogAPI。它将为您提供1000个免费积分。然后,只需在文件中导入BeautifulSoup和请求即可。像这样。
  frombs4importBeautifulSoupimportrequestswww.zpedu.com/it/
  我们要抓的东西
  这是我们将提取的字段列表:
  1.上一个收盘价
  2.打开
  3.竞标
  4.问
  5.天的范围
  6.52周范围
  7.音量
  8.平均卷
  9.市值
  10.Beta
  11.市盈率
  12.每股收益
  13.收益率
  14.预期股息和收益率
  15.除息日
  16.1y目标EST
  准备阶段
  现在,由于我们具备了准备刮板的所有要素,因此我们应该对目标URL进行GET请求以获取原始HTML数据。如果您不熟悉抓取工具,请敦促您仔细阅读其文档。现在,我们将使用请求库抓取YahooFinance的财务数据,如下所示。
  r=requests.get.text
  这将为您提供该目标URL的HTML代码。
  现在,您必须使用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=Nonetry:
  table2=alldata[1].find_all(“tr”)except:
  table2=None
  现在,每个“tr”标签都有两个“td”标签。第一个td标记由属性的名称组成,另一个具有该属性的值。这有点像键值对。
  此时,我们将在开始for循环之前声明一个列表和一个字典。
  l={}
  u=list()
  为了简化代码,我将为每个表运行两个不同的“for”循环。首先是“table1”
  foriinrange(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”,将遵循类似的步骤。
  foriinrange(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响应。
  {
  “Yahoofinance”:[
  {
  “PreviousClose”:“2,317.80”
  },
  {
  “Open”:“2,340.00”
  },
  {
  “Bid”:“0.00x1800”
  },
  {
  “Ask”:“2,369.96x1100”
  },
  {
  “Day’sRange”:“2,320.00–2,357.38”
  },
  {
  “52WeekRange”:“1,626.03–2,475.00”
  },
  {
  “Volume”:“3,018,351”
  },
  {
  “Avg.Volume”:“6,180,864”
  },
  {
  “MarketCap”:“1.173T”
  },
  {
  “Beta(5YMonthly)”:“1.35”
  },
  {
  “PERatio(TTM)”:“112.31”
  },
  {
  “EPS(TTM)”:“20.94”
  },
  {
  “EarningsDate”:“Jul23,2020—Jul27,2020”
  },
  {
  “ForwardDividend&Yield”:“N/A(N/A)”
  },
  {
  “Ex-DividendDate”:“N/A”
  },
  {
  “1yTargetEst”:“2,645.67”
  }
  ]
  }
  没那么神奇。我们仅在5分钟的设置过程中就刮掉了Yahoo财务。我们有一个python对象数组,其中包含亚马逊公司的财务数据。这样,我们可以从任何网站上抓取数据。

发表于 2021-1-20 13:46:58 | 显示全部楼层
很好的资料,感谢分享。
沙发 2021-1-20 13:46:58 回复 收起回复
回复 支持 反对

使用道具 举报

发表于 2021-5-28 22:07:53 | 显示全部楼层
感谢楼主的分享
板凳 2021-5-28 22:07:53 回复 收起回复
回复 支持 反对

使用道具 举报

发表于 2021-7-2 10:27:54 | 显示全部楼层

感谢楼主的分享!~
地板 2021-7-2 10:27:54 回复 收起回复
回复 支持 反对

使用道具 举报

发表于 2021-7-2 10:32:40 | 显示全部楼层
直接复制粘贴?
5# 2021-7-2 10:32:40 回复 收起回复
回复 支持 反对

使用道具 举报

发表于 2021-11-11 17:07:43 | 显示全部楼层
感谢分享,学习学习
6# 2021-11-11 17:07:43 回复 收起回复
回复 支持 反对

使用道具 举报

发表于 2021-11-11 17:07:50 | 显示全部楼层
感谢分享,学习学习
7# 2021-11-11 17:07:50 回复 收起回复
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 论坛注册

本版积分规则

QQ|Archiver|手机版|小黑屋|sitemap|鸿鹄论坛 ( 京ICP备14027439号 )  

GMT+8, 2024-3-28 17:09 , Processed in 0.059320 second(s), 9 queries , Redis On.  

  Powered by Discuz!

  © 2001-2024 HH010.COM

快速回复 返回顶部 返回列表