楼主: ipony
4286 11

[问答] 爬虫高手请进 [推广有奖]

善护念

已卖:86份资源

副教授

59%

还不是VIP/贵宾

-

TA的文库  其他...

金融投资圈

威望
0
论坛币
656 个
通用积分
466.1955
学术水平
40 点
热心指数
46 点
信用等级
22 点
经验
109561 点
帖子
690
精华
0
在线时间
892 小时
注册时间
2011-9-15
最后登录
2025-12-19

楼主
ipony 发表于 2017-9-15 22:57:31 |AI写论文
100论坛币
目标网址:http://www.100ppi.com/sf/
生意社网站上每天都会更新各大品种的现货价格与期货价格,如何能把指定日期的现货价格数据与期货价格数据爬取下来,并保存成xlsx或者csv格式,请各位大神帮忙给爬虫一下。如能成功爬取指定日期的数据,论坛币可再增加,在此先表示感谢。
爬取完成后保存的格式如下:
商品现货价格 近月代码近月价格基差1主力代码主力价格 基差2 交易所


关键词:现货价格 期货价格 xlsx HTTP 指定日
经常帮助众生,你的福报不求自来!

沙发
fengxingliulizi 发表于 2017-9-15 22:57:32
  1. import requests
  2. import re
  3. import pandas as pd

  4. model = '<tr  align="center"  bgcolor="#fafdff">.*?target=_blank>(.*?)</a>'\
  5.       + '.*?<td>(.*?)</td>'\
  6.       + '.*?<td>(.*?)</td>'\
  7.       + '.*?<td>(.*?)</td>'\
  8.       + '.*?<font color=.*?>(.*?)</font>'\
  9.       + '.*?<font color=.*?>(.*?)</font>'\
  10.       + '.*?<td>(.*?)</td>'\
  11.       + '.*?<td>(.*?)</td>'\
  12.       + '.*?<font color=.*?>(.*?)</font>'\
  13.       + '.*?<font color=.*?>(.*?)</font>'

  14. pattern = re.compile(model, re.S)

  15. col = ['商品','现货价格','近月代码','近月价格','基差1_1','基差1_2','主力代码',
  16.        '主力价格','基差2_1','基差2_2']

  17. def getURLdata(date, excelpath=None):
  18.     #date = '2017-09-14'
  19.     url = r'http://www.100ppi.com/sf/day-{}.html'.format(date)
  20.     html = requests.get(url)
  21.     text = html.text
  22.    
  23.     #交易所
  24.     markets = ['上海期货交易所', '郑州商品交易所', '大连商品交易所']
  25.     mktlist = []
  26.     for mkt in markets:
  27.         mktlist.append(text.find(mkt))
  28.    
  29.     df = pd.DataFrame()
  30.     for i in range(3):
  31.         if i == 2:
  32.             end = len(text)
  33.         else:
  34.             end = mktlist[i+1]
  35.         
  36.         start = mktlist[i]
  37.         dataone = re.findall(pattern, text[start:end])
  38.         dfone = pd.DataFrame(dataone, columns=col)
  39.         dfone['交易所'] = markets[i]
  40.         df = df.append(dfone)
  41.    
  42.     #删除"&nbsp;"
  43.     for k in ['现货价格','近月代码','近月价格','主力代码','主力价格']:
  44.         df[k] = df[k].apply(lambda x: x.replace("&nbsp;", ''))
  45.    
  46.     #保存excel
  47.     if excelpath is None:
  48.         excelpath = r'D:\{}.xlsx'.format(date)

  49.     df.to_excel(excelpath, index=False)
  50.    
  51. if __name__ == '__main__':
  52.     #请设置日期和excel保存地址
  53.     date = '2017-09-13'
  54.     excelpath = None
  55.    
  56.     getURLdata(date, excelpath)
复制代码


已有 2 人评分经验 论坛币 学术水平 热心指数 信用等级 收起 理由
刘彦楼 + 100 + 5 + 5 + 5 热心帮助其他会员
残阳_等待 + 100 + 100 + 3 + 3 热心帮助其他会员

总评分: 经验 + 200  论坛币 + 100  学术水平 + 8  热心指数 + 8  信用等级 + 5   查看全部评分

藤椅
xugonglei 发表于 2017-9-15 23:28:22
如果有iFind,上面可以直接下载生意社的数据。

板凳
ipony 发表于 2017-9-16 10:30:13 来自手机
xugonglei 发表于 2017-9-15 23:28
如果有iFind,上面可以直接下载生意社的数据。
iFind得花钱吧,这个是同花顺出的一个跟wind类似的产品。

报纸
ipony 发表于 2017-9-16 11:11:44
xugonglei 发表于 2017-9-15 23:28
如果有iFind,上面可以直接下载生意社的数据。
iFind上面主要是库存数据,估计都是从交易所爬取的。没有现货价格与基差数据。

地板
xugonglei 发表于 2017-9-16 18:32:44
ifind的确是付费的

ifind有日度价格数据的历史记录,我就是用这个的。

7
abceddsd 发表于 2017-9-17 19:34:16
此贴还有效么?有的话就写一个

8
残阳_等待 发表于 2017-9-18 10:24:51
fengxingliulizi 发表于 2017-9-18 10:08
你可以呀,这么快回复了

9
fengxingliulizi 发表于 2017-9-18 16:56:21
残阳_等待 发表于 2017-9-18 10:24
你可以呀,这么快回复了
我上班第一件事是先逛人大论坛,再逛知乎。
我下班的倒数第几件事是再逛人大论坛,逛知乎。

10
ipony 发表于 2017-9-18 17:25:36
fengxingliulizi 发表于 2017-9-15 22:57
非常感谢大神,已经将您的答案设置为最佳答案,谢谢!

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

本版微信群
加好友,备注cda
拉您进交流群
GMT+8, 2025-12-29 20:08