写一个shell脚本利用wget抓取股票历史数据
今天,大数据部老大交给我一项任务——抓取股票历史数据。于是乎,我自行在网上找了一下,发现wget真真是一个非常强大的linux下载工具。我已经被深深震撼到了。下面叙述今天的一些过程,还是比较坎坷的。
首先,我利用公司现在存在的股票数据,使用hive查询所有的股票代码并导入本地:
hive -e "use stock;select distinct secucode from t_stock_tick_shsz where type='sz';" >> sz_secucode.txt hive -e "use stock;select distinct secucode from t_stock_tick_shsz where type='sh';" >> sh_secucode.txt
PS:上面这一步骤,因为一个小小的问题——开始没有加关键字distinct,结果导致后期抓取数据抓到一大堆重复的股票代码的数据。
刚开始想偷懒,想要一句一句地粘贴wget,但是,股票代码太多了,所以还是写脚本吧,shell脚本如下:
#下载上海交易所股票历史记录
#!/bin/bash
for I in `cat sh_secucode.txt`
do
wget --user-agent="Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US) AppleWebKit/534.16 (KHTML, like Gecko) Chrome/10.0.648.204 Safari/534.16" \
-nv --tries= --timeout= -O /home/bigdata/script/zj/sh_history/history_data/$I.csv http://quotes.money.163.com/service/chddata.html?code=0$I&end=20130430
sleep 1s
done #下载深圳交易所股票历史记录
#!/bin/bash
for I in `cat sz_secucode.txt`
do
wget --user-agent="Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.9.2.3) Gecko/20100401 Firefox/3.6.3 (.NET CLR 3.5.30729)" \
-nv --tries= --timeout= -O /home/bigdata/script/zj/sz_history/history_data/$I.csv http://quotes.money.163.com/service/chddata.html?code=1$I&end=20130430
sleep 1s
done
PS:说一下上面这段代码,为什么在wget有user-agent这个参数?玩过爬虫的同学肯定都知道,当你频繁下载一个网站的东东,这个网站会识别出这是一个爬虫程序,于是就拒绝你下载他家的资源了,所以要设置一个代理,伪装成一个浏览器下载文件,这样被发现的概率就笑了。还有,为什么要加一个sleep?这是因为有可能有的文件比较大,可能在几毫秒之内没有下载完就被挂停了。当然了,我这边的每个文件也就几百K,所以1s也足够了。
最后,运行脚本,写这篇文章的时候,脚本还在运行中,希望顺利!O(∩_∩)O
写一个shell脚本利用wget抓取股票历史数据的更多相关文章
- 利用wget 抓取 网站网页 包括css背景图片
利用wget 抓取 网站网页 包括css背景图片 wget是一款非常优秀的http/ftp下载工具,它功能强大,而且几乎所有的unix系统上都有.不过用它来dump比较现代的网站会有一个问题:不支持c ...
- 在linux写一个shell脚本用maven git自动更新代码并且打包部署
服务器上必须安装了git maven jdk 并且配置好环境变量 实际服务器中可能运行着多个Java进程,所以重新部署的时候需要先停止原来的java进程,写一个按照名称杀死进程的脚本 kill.sh ...
- ubuntu中写一个shell脚本的过程
gedit hello.sh ,然后输入 #!/bin/bash echo "Hello world!" chmod +x hello.sh ./hello.sh
- 向大家分享一个shell脚本的坑
打算在跳板机上写一个shell脚本,批量检查远程服务器上的main进程是否在健康运行中. 先找出其中一台远程机器,查看main进程运行情况 [root@two002 tmp]# ps -ef|grep ...
- 利用wireshark抓取远程linux上的数据包
原文发表在我的博客主页,转载请注明出处. 前言 因为出差,前后准备总结了一周多,所以博客有所搁置.出差真是累人的活计,不过确实可以学习到很多东西,跟着老板学习做人,学习交流的技巧.入正题~ wires ...
- 如何手动写一个Python脚本自动爬取Bilibili小视频
如何手动写一个Python脚本自动爬取Bilibili小视频 国庆结束之余,某个不务正业的码农不好好干活,在B站瞎逛着,毕竟国庆嘛,还让不让人休息了诶-- 我身边的很多小伙伴们在朋友圈里面晒着出去游玩 ...
- 写一个shell,自动执行jmeter测试脚本
贡献一个自己写的shell脚本,很简单,但又可以高效率的自动执行jmeter压测脚本. #!/bin/bash #author:zhangyl #version:V1 #该脚本放置于压测脚本的上一层目 ...
- 利用Crowbar抓取网页异步加载的内容 [Python俱乐部]
利用Crowbar抓取网页异步加载的内容 [Python俱乐部] 利用Crowbar抓取网页异步加载的内容 在做 Web 信息提取.数据挖掘的过程中,一个关键步骤就是网页源代码的获取.但是出于各种原因 ...
- 写一个python脚本监控在linux中的进程
在虚拟机中安装Linux中的CentOS7系统 https://baijiahao.baidu.com/s?id=1597320700700593557&wfr=spider&for= ...
随机推荐
- iptables 开放端口
#iptables -A INPUT -p tcp --dport 5000 -j ACCEPT #service iptables save
- Thread的start和run的区别
最近看到一个题目,代码如下: public static void main(String args[]) { Thread t = new Thread() { public void run() ...
- org.hibernate.UnknownEntityTypeException: Unable to locate persister: com.hibernate2.pojo.News at org.hibernate.internal.SessionFactoryImpl.locateEntityPersister(SessionFactoryImpl.java:797)
使用的是hibernate5的方法: ServiceRegistry serviceRegistry = new StandardServiceRegistryBuilder().applySetti ...
- [C/C++] C++ Primer学习笔记
记录下自己掌握不清楚的概念和用法... Day 1 endl:具有输出换行的效果,并刷新与设备相关联的缓冲区. 注:在调试程序过程中插入的输出语句都应刷新输出流,否则可能会造成程序崩溃,将会导致程序出 ...
- P4645 [COCI2006-2007 Contest#3] BICIKLI
题意翻译 给定一个有向图,n个点,m条边.请问,1号点到2号点有多少条路径?如果有无限多条,输出inf,如果有限,输出答案模10^9的余数. 两点之间可能有重边,需要看成是不同的路径. 题目描述 A ...
- 利用Eric+Qt Designer编写倒计时时钟
[前言]前几日通过编写命令行通讯录,掌握了Python的基本语法结构,于是开始向更高水平冲击,利用Eric与Qt Designer 编写一个带界面的小程序.本次实操中也确实遇到了不少问题,通过学习也都 ...
- 【刷题】LOJ 2480 「CEOI2017」One-Way Streets
题目描述 给定一张 \(n\) 个点 \(m\) 条边的无向图,现在想要把这张图定向. 有 \(p\) 个限制条件,每个条件形如 \((xi,yi)\) ,表示在新的有向图当中,\(x_i\) 要能够 ...
- 【刷题】洛谷 P4234 最小差值生成树
题目描述 给定一个标号为从 \(1\) 到 \(n\) 的.有 \(m\) 条边的无向图,求边权最大值与最小值的差值最小的生成树. 输入输出格式 输入格式: 第一行两个数 \(n, m\) ,表示图的 ...
- HNOI/AHOI2018题解
作为一名高二老年选手来补一下我省去年的省选题. D1T1:寻宝游戏 按顺序给出\(n\)个\(m\)位的二进制数\(a_i\),再在最前方添一个\(0\), 给出\(q\)次询问,每次询问给出一个同样 ...
- HDU.2516 取石子游戏 (博弈论 斐波那契博弈)
HDU.2516 取石子游戏 (博弈论 斐波那契博弈) 题意分析 简单的斐波那契博弈 博弈论快速入门 代码总览 #include <bits/stdc++.h> #define nmax ...