爬虫项目3 - 股票数据爬取

  • 步骤

步骤

  1. 爬取股票名和股票列表,使用gucheng网进行爬取,网址:
    https://hq.gucheng.com/gpdmylb.html
import requests
import re
import csv
from bs4 import BeautifulSoup
import pandas as pddef parse_html(url,headers):try:res = requests.get(url=url,headers=headers)return res.content.decode('utf-8')except:return Nonedef get_stock_list(url,headers):html = parse_html(url,headers)soup = BeautifulSoup(html,'lxml')ll = soup.find_all('a')#print(ll)res = []for item in ll:try:pattern = re.compile('<a href="https://hq.gucheng.com/(.*?)/">(.*?)\(.*?</a>',re.S) res.append(re.findall(pattern,str(item))[0])except:continuereturn resdef main():url = 'https://hq.gucheng.com/gpdmylb.html'headers = {'User-Agent':"Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/55.0.2883.87 Safari/537.36"}stocks = get_stock_list(url,headers)print(stocks)for item in stocks: # 将股票名,股票代码保存到本地with open('./stocklist.csv','a',encoding='utf-8') as file:writer = csv.writer(file)writer.writerow(item)if __name__ == '__main__':main()
  1. 加载已经保存的股票列表,进行历史数据爬取,本来想进行网页爬取,后来发现使用selenium进行模拟操作会更简单一点,因此使用如下方法:

    • 首先进入http://quotes.money.163.com/trade/lsjysj_000002.html?year=2010&season=1。加粗部分为股票代码
    • 接着尝试使用selenium模块进行模拟的下载操作:点击“下载数据” -> 输入“起始日期” -> 输入“截止日期” -> 点击“下载”,如下:
    • 最后将数据存入本地,因为总股数在3600股左右,所以选择手动分批次下载,这部分代码可以调整。
def load_csv(start_ind,end_ind):# start_ind: start stock index# end_ind: end stock indexstocklist = pd.read_csv('./stocklist.csv')stocklist['Code']=stocklist['Code'].apply(lambda x: x[2:])return stocklist['Code'].tolist()[start_ind:end_ind]def get_stock_history_data(stocklist, start_date='2010-01-01',end_date='2020-12-01'):# take all data of stocks from 2010-01-01 to 2020-12-01 can adjust according to demandif not stocklist:returnbro = webdriver.Chrome()bro.maximize_window()time.sleep(1)for stock in stocklist:try:bro.get("http://quotes.money.163.com/trade/lsjysj_{}.html?".format(stock))time.sleep(random.choice([1, 2]))bro.find_element_by_id("downloadData").click()time.sleep(random.choice([1, 2]))bro.find_element_by_name('date_start_value').clear()bro.find_element_by_name('date_start_value').send_keys(start_date)time.sleep(random.choice([1, 2]))bro.find_element_by_name('date_end_value').clear()bro.find_element_by_name('date_end_value').send_keys(end_date)time.sleep(random.choice([1, 2]))bro.find_element_by_css_selector('a.blue_btn.submit').click()# bro.find_element_by_xpath("//*[@action name='tradeData']/div[3]/a").click()time.sleep(10)except:print("Stock {} don't exist".format(stock))def main():stocks = load_csv(200,500)#print(stocks)get_stock_history_data(stocks)if __name__ == '__main__':main()
  1. 至此全部股票数据2010-2020的数据就已下载完毕,现在开始将所有下载的csv存入数据库进行整合使用。
  • 将数据存成不同的部分:

  • 将每部分数据分别存入mysql:

import pymysql
import pandas as pd
import osdef save_mysql(file_path,part):try:df = pd.read_csv(file_path, sep=',', encoding='utf-8')except:df = pd.read_csv(file_path, sep=',', encoding='GBK')#处理一些特殊值,这部分视情况而定df['股票代码'] = df['股票代码'].apply(lambda x:x.strip('\''))df['涨跌额'] = df['涨跌额'].apply(lambda x: float(x) if x!='None' else 0)df['涨跌幅'] = df['涨跌幅'].apply(lambda x: float(x) if x!='None' else 0)conn = pymysql.connect(host='localhost',user='root',passwd= 'yoursqlpassword',db='dbname',port=3306,charset='utf8')# 获得游标cur = conn.cursor()# 创建插入sql语句,需先在mysql中建立相应的表(stocks_part1),定义列名以及列的类型。query = 'insert into stocks_part%i'%(part)+'(Date,Stock_cd,CompanyName,Close,High,Low,Open,LastOpen,ChgAmt,ChgPct,Turnover,Volume,TotalTransAmt,TotalValue,LiquidValue)values(%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s)'for row,item in df.iterrows():try:date = item[0]cd = item[1]name = item[2]close = item[3]high = item[4]low = item[5]open = item[6]lastopen = item[7]chgamt = item[8]chgpct = item[9]turnover = item[10]volume = item[11]totaltransamt = item[12]totalvalue = item[13]liquidvalue = item[14]values = (date, cd, name, close, high, low, open, lastopen, chgamt, chgpct, turnover, volume, totaltransamt,totalvalue, liquidvalue)# 执行sql语句cur.execute(query, values)except:continue# close关闭文档cur.close()# commit 提交conn.commit()# 关闭MySQL链接conn.close()# 显示导入多少行rows = len(df)try:print('导入%s %i 行数据到MySQL数据库!'%(cd,rows))except:print('无股票代码 出错')def main():#分步读取后写入MYSQL,手动选取partpath = './stocks_data/part'part = 1folder_path = os.path.join(path + str(part))for file in os.listdir(folder_path):file_path = os.path.join(folder_path, file)if not os.path.isdir(file_path) and file.endswith('.csv'):#print(file_path)save_mysql(file_path, part)if __name__ == '__main__':main()
  • 进入mysql workbench中将不同的stocks_part表union起来可以得到我们的总表。
    举例查看2010-2020开盘价最高的股票:

    看的出来基本符合事实。

爬虫项目3 - 股票数据爬取相关推荐

  1. 【爬虫入门】股票数据爬取

    需修改output_file变量 东方财富网 + 腾讯证券 import re import requests import traceback from bs4 import BeautifulSo ...

  2. python如何爬虫股票数据_简单爬虫:东方财富网股票数据爬取(python_017)

    需求:将东方财富网行情中心的股票数据爬取下来,包括上证指数.深圳指数.上证A股.深圳A股.新股.中小板.创业板 等 一.目标站点分析 东方财富网的行情中心页面包含了所有股票信息.在左侧的菜单栏中包含了 ...

  3. 使用python进行股票数据爬取中的时间限制和策略

    股票数据爬取中的时间限制和策略 在进行股票数据爬取时,时间限制和策略是非常重要的考虑因素.本文将介绍两个与此相关的函数:is_trade_day()和stock_work_day(). is_trad ...

  4. php 爬取股票数据库,爬虫框架Scrapy实战一——股票数据爬取

    简介 目标: 获取上交所和深交所所有股票的名称和交易信息. 输出: 保存到文件中. 技术路线:Scrapy爬虫框架 语言: python3.5 由于在上一篇博客中已经介绍了股票信息爬取的原理,在这里不 ...

  5. python爬虫案例-陶瓷公司数据爬取

    用requests爬取要注意HTTPConnectionPool(host=xxx, port=xxx): Max retries exceeded with url...异常,出现这个异常的解决方法 ...

  6. Python爬虫 —— 以北京天气数据爬取为例

    本文以北京天气为例讲解数据爬取的整个流程,不涉及网络爬虫的原理,直接讲爬取代码怎么写! 1.首先找到你要爬取的网站url:'http://www.tianqihoubao.com/lishi/beij ...

  7. python爬虫实例——某二手车数据爬取

    某二手车网站数据爬取 要求: 找到所要爬取的网站网址(url): 今天案例的网址(url):https://www.guazi.com/gy/dazhong/o1/#bread. 观察网站,点开检查, ...

  8. java爬虫实现百度地图数据爬取

    本次项目主要实现百度地图地点检索功能的数据爬取,可以获得检索的相关信息.主要是采用百度地图API接口实现,采用的是servlet,数据库采用的是mybatis.话不多说,上代码. 1.DAO层数据 p ...

  9. Python爬虫|高德地图地铁数据爬取与制图

    目录 一.高德地图数据爬取 1.爬取思路 2.python核心代码 二.Arcmap制图 一.高德地图数据爬取 1.爬取思路 首先,谷歌浏览器打开高德地图官网,点击上方菜单栏地铁进入地铁线路网站如下, ...

最新文章

  1. SVO中 Inverse Compositional Image Alignment方法的学习笔记
  2. win10玩cf不能全屏_游戏莫名卡顿四招搞定!Win10游戏优化教程
  3. linux xargs命令的使用及其与exec、管道的区别
  4. 【学术相关】11 个好用的科研工具推荐!工作效率提升 max!
  5. virtualbox cannot access the kernel driver的解决办法
  6. redis-full-check
  7. Docker学习七:使用docker搭建Hadoop集群
  8. C# webservice 配置总结
  9. 系统学习机器学习之非参数方法
  10. Python,入门1
  11. SQL盲注(原理概述、分类)
  12. 计算机网络技术基础第二章答案,计算机网络技术基础各章节综合练习题及答案...
  13. linux下启动tlq命令,tlq tonglink/q 常用管理方法
  14. 装mysql电脑网卡不见了_电脑本地连接不见了,教您怎么解决
  15. 作为兼并重组的重要方式之一,企业合并、分立的具体形式?
  16. docker的安装和部署
  17. 不需要个人信息的云服务器,那些云服务器不需要实名
  18. 电脑连接wifi找不到服务器,为什么电脑连不上wifi显示没有有效的ip配置
  19. Opencv中3D显示模块viz安装
  20. squid服务的应用[转]

热门文章

  1. [转贴] 扫盲转贴:Rootkit技术发展史
  2. 结合 Whisper + Stable-diffusion 的语音生成图像任务
  3. 迪文串口屏(DMG10600C101-03WTC)的通讯测试
  4. 学校运动会广播稿计算机,学校运动会广播稿
  5. 网络编程培训之七 实现Traceroute
  6. 【LOJ2867】「IOI2018」高速公路收费
  7. 大疆校招和社招 各岗位内推码--更新20220717
  8. 干货分享!华为模拟器Web配置防火墙
  9. 记录重新安装微软商店过程
  10. 编译原理 第二章 程序设计语言及其文法