国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

運(yùn)用Python網(wǎng)絡(luò)爬蟲抓取金融衍生品數(shù)據(jù)庫的經(jīng)典案例

89542767 / 681人閱讀

  從行業(yè)角度來說,通過一步一步剖析,目標(biāo)就是簡易,新手入門requests網(wǎng)絡(luò)爬蟲及新手入門pandas數(shù)據(jù)剖析就能完成,文中關(guān)鍵為大家介紹Python網(wǎng)絡(luò)爬蟲抓取金融衍生品數(shù)據(jù)庫的經(jīng)典案例,感興趣的小伙伴一起了解一下吧


  哈嘍大家好政胤今日教給大家抓取金融衍生品數(shù)據(jù)和信息


  每日任務(wù)介紹

01.png

  最先,顧客原消費(fèi)是獲得https://hq.smm.cn/copper網(wǎng)站里的價(jià)錢數(shù)據(jù)和信息(注:獲得的是平臺上的公開數(shù)據(jù)),如圖所示:


  若以此網(wǎng)站為主要目標(biāo),就需要解決問題是“登陸”客戶,然后將價(jià)錢剖析為報(bào)表開展導(dǎo)出就可以。可是,事實(shí)上顧客主要目標(biāo)是獲得“滬銅CU2206”的歷史價(jià)格查詢,盡管此網(wǎng)站也是有給出的數(shù)據(jù),但需要“VIP”才能夠?yàn)g覽,而VIP必須充錢...


  數(shù)據(jù)的價(jià)值!!!


  因?yàn)椋蛻魸M意度僅僅只是“滬銅CU2206”一種期貨歷史價(jià)格查詢,充錢VIP性價(jià)比低,因而,具體的目標(biāo)和任務(wù)變成怎樣獲得的歷史價(jià)格查詢,總體目標(biāo)變成各大網(wǎng)站有發(fā)布給出的數(shù)據(jù)的網(wǎng)站地址。而最終解決此問題,是有求于無所不能的搜索引擎^_^。發(fā)現(xiàn)了適宜的網(wǎng)址,且讀取數(shù)據(jù)難度系數(shù)也基本降到最低標(biāo)準(zhǔn)難度系數(shù)。

02.png

  處理流程


  1.網(wǎng)頁搜索網(wǎng)絡(luò)資源:這一步是所有每日任務(wù)完備的最難題(詳細(xì)不會(huì)太難),但是這里賣個(gè)關(guān)子,全篇不發(fā)布最后尋找網(wǎng)站,大伙兒試一試能不能獲取到,及其耗費(fèi)多久^_^。


  2.解析網(wǎng)站要求,最后尋找網(wǎng)站經(jīng)剖析后,發(fā)覺讀取數(shù)據(jù)可以通過get的方法遞交主要參數(shù)。而要求的主要參數(shù)如下所示:/price?starttime=1638545822&endtime=1654357022&classid=48,看了就知有起始時(shí)間、截止時(shí)間的時(shí)間格式,及其商品id。再剖析headers,竟然連cookie都不用,表明并沒有流量劫持!并沒有流量劫持!并沒有流量劫持!不得不承認(rèn)人品大爆發(fā)!


  3.剖析回應(yīng)數(shù)據(jù)和信息:因?yàn)榛貞?yīng)信息是整齊的json格式數(shù)據(jù)和信息,使用pandas的read_json立即可以獲得dataframe格式的信息,該流程也從未有過難度系數(shù)。


  代碼編寫


  #author:zheng yin
  #contact:1278420339 qq.com
  """
  1.這是爬取滬銅的程序
  2.該網(wǎng)站滬銅當(dāng)月的數(shù)據(jù)實(shí)際請求地址是:'(實(shí)際網(wǎng)址)/price?starttime={starttime}&endtime={endtime}&classid={classid}'
  2.1.starttime為起始日期的時(shí)間戳
  2.2.endtime為結(jié)束日期的時(shí)間戳
  2.3.classid為查詢商品的id
  3.該網(wǎng)址可以直接發(fā)起請求獲取數(shù)據(jù)
  我是政胤期待你的關(guān)注
  """
  import time
  from datetime import datetime
  import pathlib as pl
  import requests
  import pandas as pd
  class Spider:
  """
  爬取網(wǎng)站數(shù)據(jù)的爬蟲對象
  """
  def __init__(self,starttime:str=None,endtime:str=None,classid:int=48):
  """
  初始化對象屬性
  :param starttime:數(shù)據(jù)的起始日期,文本日期格式,示例2022-1-1
  :param endtime:數(shù)據(jù)的結(jié)束日期,文本日期格式,示例2022-1-1
  :param classid:商品id,默認(rèn)48
  """
  self.classid=classid#商品id
  self.data=pd.DataFrame()#初始化空dataframe
  self.data_file=pl.Path('./data/hutong.xlsx')#爬取的數(shù)據(jù)存儲文件
  #列名字典
  self.cols_dict={
  'createtime':'日期',
  'classid':'商品',
  'start':'開盤',
  'end':'收盤',
  'min':'最低',
  'max':'最高',
  'move':'漲跌',
  'move_percent':'漲跌百分比'
  }
  #商品id字典
  self.classid_dict={
  48:'CU2206'
  }
  #獲取爬取的開始時(shí)間與結(jié)束時(shí)間
  self.starttime,self.endtime=self.make_starttime_endtime(starttime=starttime,endtime=endtime)
  #初始化需要爬取的url
  self.url='(實(shí)際地址)/price?starttime={starttime}&endtime={endtime}&classid={classid}'
  #初始化headers
  self.headers={
  'User-Agent':'Mozilla/5.0(Windows NT 10.0;Win64;x64)AppleWebKit/537.36(KHTML,like Gecko)Chrome/99.0.4844.51 Safari/537.36',
  'Accept':'text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9',
  'Accept-Encoding':'gzip,deflate,br',
  'Accept-Language':'zh-CN,zh;q=0.9',
  }
  def make_starttime_endtime(self,starttime:str,endtime:str):
  """
  制作起始日期,邏輯如下;
  1.如果有傳入日期,則根據(jù)傳入的日期,定義起始日期與結(jié)束日期
  2.如果未傳入?yún)?shù),則根據(jù)讀取到的歷史數(shù)據(jù)文件中的最大日期作為起始日期、以當(dāng)前日期為結(jié)束日期
  3.如果未讀取到歷史數(shù)據(jù)文件,或文件中的最大日期為空,則以2021-1-1作為起始日期,以當(dāng)前日期作為結(jié)束日期
  :param starttime:數(shù)據(jù)的起始日期,文本日期格式,示例2022-1-1
  :param endtime:數(shù)據(jù)的結(jié)束日期,文本日期格式,示例2022-1-1
  :return:
  """
  self.read_data()#讀取歷史爬取數(shù)據(jù)
  now=datetime.now()#獲取當(dāng)前時(shí)間的時(shí)間戳整數(shù)部分
  if endtime:#如果非空
  year,month,day=endtime.split('-')
  endtime=int(now.replace(year=int(year),month=int(month),day=int(day)).timestamp())
  else:
  endtime=int(now.timestamp())
  if starttime:
  year,month,day=starttime.split('-')
  starttime=int(now.replace(year=int(year),month=int(month),day=int(day)).timestamp())
  else:
  starttime=self.data['日期'].max()
  if pd.isnull(starttime):#如果開始日期是空值
  starttime=int(now.replace(year=2021,month=1,day=1).timestamp())
  else:
  starttime=int(
  now.replace(year=starttime.year,month=starttime.month,day=starttime.day).timestamp())
  return starttime,endtime
  def read_data(self):
  """
  讀取歷史數(shù)據(jù)
  :return:
  """
  if self.data_file.is_file():#如果歷史數(shù)據(jù)文件存在
  self.data=pd.read_excel(self.data_file)
  self.data['日期']=self.data['日期'].map(lambda x:x.date())
  else:#如果歷史數(shù)據(jù)文件不存在,那么初始化一個(gè)只有列名的dataframe,
  self.data=pd.DataFrame(self.cols_dict.values()).set_index(0).T
  def crawl_data(self):
  """
  爬取數(shù)據(jù)
  :return:
  """
  retry_times=0
  while retry_times<10:#重試10次
  try:
  res=requests.get(
  self.url.format(starttime=self.starttime,endtime=self.endtime,classid=self.classid),
  headers=self.headers,timeout=30)
  if res.status_code==200:#如果返回狀態(tài)至為200,進(jìn)行后續(xù)數(shù)據(jù)加工
  data=pd.read_json(res.text)#json格式轉(zhuǎn)換為dataframe
  data['createtime']=data['createtime'].map(lambda x:datetime.fromtimestamp(x).date())#時(shí)間戳日期轉(zhuǎn)換為日期
  data.rename(columns=self.cols_dict,inplace=True)#重命名列
  data=data[self.cols_dict.values()]#截取需要的列
  data['商品']=self.classid_dict.get(self.classid,'未知商品,請維護(hù)classid_dict字典')#轉(zhuǎn)換商品名
  data.sort_values(by=['商品','日期'],ascending=True,inplace=True)#按日期升序排序
  return data
  else:
  retry_times+=1
  print(f'返回狀態(tài)碼是{res.status_code},等待5秒后重新發(fā)起請求')
  time.sleep(5)
  except Exception as e:
  retry_times+=1
  print(f'請求發(fā)生錯(cuò)誤,等待5秒后重新發(fā)起請求,錯(cuò)誤信息:{e}')
  time.sleep(5)
  print('發(fā)起10次請求均未能獲得數(shù)據(jù)')
  return pd.DataFrame()
  def concat_and_write_data(self,data:pd.DataFrame):
  """
  合并數(shù)據(jù),并將數(shù)據(jù)寫入文件
  :param data:傳入需要合并的數(shù)據(jù)
  :return:
  """
  self.data=pd.concat([self.data,data])#合并數(shù)據(jù)
  self.data=self.data.drop_duplicates(['日期','商品'],keep='last')#數(shù)據(jù)根據(jù)商品名稱與日期進(jìn)行去重,每次保留最新的記錄
  if not self.data_file.parent.is_dir():#檢查數(shù)據(jù)文件的目錄是否存在,如不存在則創(chuàng)建新目錄
  self.data_file.parent.mkdir()
  self.data.to_excel(self.data_file,index=False,encoding='utf-8')#輸出數(shù)據(jù)為excel格式
  def run(self):
  """
  運(yùn)行程序
  :return:
  """
  data=spider.crawl_data()#運(yùn)行爬取
  if len(data)>0:#如果爬取到的數(shù)據(jù)不為空
  self.concat_and_write_data(data)
  start=str(datetime.fromtimestamp(self.starttime))[:10]
  end=str(datetime.fromtimestamp(self.endtime))[:10]
  print(f'{start}至{end}數(shù)據(jù)爬取任務(wù)完成')
  def pivot_data(self):
  """
  將數(shù)據(jù)轉(zhuǎn)換為透視表式的格式
  :return:
  """
  data=self.data.copy()
  data['年月']=data['日期'].map(lambda x:f'{str(x)[:7]}')
  data['日']=data['日期'].map(lambda x:x.day)
  data=data.pivot_table(values='收盤',index='日',columns='年月',aggfunc='sum')
  data_mean=data.mean().to_frame().T
  data_mean.index=['平均值']
  data=pd.concat([data,data_mean])
  data.to_excel(self.data_file.parent.parent/'data.xlsx',encoding='utf-8')
  if __name__=='__main__':
  spider=Spider()
  spider.run()
  spider.pivot_data()
  print(spider.data)


  因?yàn)榫W(wǎng)址并沒有流量劫持,且主要參數(shù)簡易,事實(shí)上任務(wù)通常是整體規(guī)劃一下下怎樣設(shè)計(jì)增量同步數(shù)據(jù)和信息的操作流程,詳細(xì)編碼如下所示:


  匯總


  從行業(yè)角度來說,通過一步一步剖析,目標(biāo)就是簡易,新手入門requests網(wǎng)絡(luò)爬蟲及其新手入門pandas數(shù)據(jù)剖析就能完成(唯一難度系數(shù)在找到更好的總體目標(biāo))。可是換一個(gè)角度,從經(jīng)濟(jì)效益來說,也是非常有用的,即減少了某網(wǎng)站高額的服務(wù)年費(fèi)(注:也不是說服務(wù)年費(fèi)不值,僅僅局限于要求僅僅只是CU2206一種數(shù)據(jù)和信息處時(shí),性價(jià)比高過低),同時(shí)也防止了人工控制的繁雜,及其由此產(chǎn)生的不正確。用極小的培訓(xùn)成本就可以解決極大地難題


  綜上所述,這篇文章就給大家解答到這里了,希望可以給大家?guī)韼椭?/p>

文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請注明本文地址:http://m.specialneedsforspecialkids.com/yun/128853.html

相關(guān)文章

  • 為什么去中心化兌換協(xié)議很重要

    摘要:此外,還有一類行為,只有去中心化兌換協(xié)議才能做到。最后,去中心化兌換協(xié)議可以立刻自動(dòng)支持新的代幣。去中心化兌換要求用戶管理自己基金的安全性,而相關(guān)工具目前尚不成熟。 原文:https://medium.com/@FEhrsam/w... 今天,去中心化兌換(decentralized exchange)仍處于早期,但是幾年后,它很可能會(huì)是區(qū)塊鏈生態(tài)中不可或缺的一環(huán)。 首先,去中心化兌...

    Olivia 評論0 收藏0
  • 研究人員:云相互依存可能導(dǎo)致“云崩潰”

    摘要:補(bǔ)充說,每一個(gè)這類不同的云組件通常都是由單獨(dú)的一家公司來維護(hù)和部署的,出于競爭的考慮,這些公司往往會(huì)盡可能少地披露其服務(wù)的內(nèi)部運(yùn)營細(xì)節(jié)。是下周將在波士頓召開的更大范圍的展會(huì)的一個(gè)分會(huì)場。 當(dāng)云計(jì)算越來越成為主流之時(shí),各種嚴(yán)重的運(yùn)營崩潰事故就可能出現(xiàn),因?yàn)樵谠浦校K端用戶和廠商的各種東西都在一起混搭、匹配或捆綁著,這就是一位研究人員所撰寫的一篇新論文的主張,該論文將在下周于美國波士頓召開的U...

    B0B0 評論0 收藏0

發(fā)表評論

0條評論

最新活動(dòng)
閱讀需要支付1元查看
<