博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
磨刀霍霍:爬爬爬爬爬爬虫爬起来~
阅读量:7013 次
发布时间:2019-06-28

本文共 2388 字,大约阅读时间需要 7 分钟。

写在前面的叨叨

折腾了这么久,我终于在喝完一听快乐肥宅水后下定决心来学习写爬虫了。

目标很简单,因为我想要爬一下“证券化率”,然后可视化输出结果。
证券化率的基础就是上市公司的总市值,对于证券化率其实还蛮多说法的,比如雪球的这篇文。
爬虫对于证券类的分析来说,其实已经是司空见惯了,但是作为菜鸟小股民,希望自己在写完这个爬虫之后也对股票有更深的认识吧,然后能赚钱就更好啦~
找了一个相对好入门的案例,来作为学习的范本。

那就开工吧~

准备动作

主要使用的工具和模块包括:Anaconda Pandas MySQL

  • Anaconda是之前就安装好了的,具体过程可以参考这个安装流程。
  • Pandas是在Anaconda中用命令安装好的,还得摸索下这个工具。

    pip install pandas
  • MySQL以前写PHP的时候,都习惯直接用Wamp打包处理了,这会儿就来摸索下单独安装,安装教程参考这个。
整理思路

一共是四个步骤:

  1. 用爬虫将数据抓取到本地csv文件中
  2. 将csv文件内的数据导入到数据库中
  3. MySQL数据库内进行查询

我们今天的目标是完成第一步----因为MySQL还没部署完毕...明天继续~

爬虫启动
#导入需要使用到的模块import urllibimport reimport pandas as pdimport pymysqlimport os#爬虫抓取网页函数def getHtml(url):    html = urllib.request.urlopen(url).read()    html = html.decode('gbk')    return html#抓取网页股票代码函数def getStackCode(html):    s = r'
  • ' pat = re.compile(s) code = pat.findall(html) return codeUrl = 'http://quote.eastmoney.com/stocklist.html'#东方财富网股票数据连接地址filepath = 'D:\\data\\'#定义数据文件保存路径#实施抓取code = getStackCode(getHtml(Url)) #获取所有股票代码(以6开头的,应该是沪市数据)集合CodeList = []for item in code: if item[0]=='6': CodeList.append(item)#抓取数据并保存到本地csv文件for code in CodeList: print('正在获取股票%s数据'%code) url = 'http://quotes.money.163.com/service/chddata.html?code=0'+code+\ '&end=20161231&fields=TCLOSE;HIGH;LOW;TOPEN;LCLOSE;CHG;PCHG;TURNOVER;VOTURNOVER;VATURNOVER;TCAP;MCAP' urllib.request.urlretrieve(url, filepath+code+'.csv')
  • 我们看一下源代码是这样的,注释写的很清楚,我们来拆解一下。

    • 引入模块,包括pandas和re等
    • 分模块写函数

      • getHtml()用于抓取网页,读取网页源码
      • getStackCode()对抓取到的源码读取,拆解出<li></li>结构里面的链接,打开Url对应的地址,看到对应的图形结构,红框就是需要命中的目标。

    clipboard.png

    根据代码,原作者只截取了6开头的大盘股的list存储入数组。然后用GET方法获取每个代码对应的股票的数据,对每组数据进行存储。
    测试代码

    将代码放到本地跑一下,看下结果。

    正常应该是会下载数据到文件夹下,但是报错了。

    clipboard.png

    应该是request模块下的urlretrieve函数报错。
    关联语句是

    urllib.request.urlretrieve(url, filepath+code+'.csv')

    关于urlretrieve()这个方法,因为没有使用过,所以来看下详解。

    urlretrieve()用于直接将远程数据下载到本地。

    urllib.urlretrieve(url[, filename[, reporthook[, data]]])
    参数说明
    url:外部或者本地url
    filename:指定了保存到本地的路径(如果未指定该参数,urllib会生成一个临时文件来保存数据);
    reporthook:是一个回调函数,当连接上服务器、以及相应的数据块传输完毕的时候会触发该回调。我们可以利用这个回调函数来显示当前的下载进度。
    data:指post到服务器的数据。该方法返回一个包含两个元素的元组(filename, headers),filename表示保存到本地的路径,header表示服务器的响应头。

    会过来看我们的函数语句↓

    urllib.request.urlretrieve(url, filepath+code+'.csv')

    指定了地址和文件名(保存到本地的路径),所以我试试在本地新建一个600000.csv来测试下结果。

    然后发现并没有结果。
    然后发现自己干了很蠢的事情.....
    emmm....其实是我的路径写错了,然后实验结果是这样的~

    clipboard.png

    clipboard.png

    未完待续~

    现在就坐等爬完啦~然后安装MySQL,然后导入数据库。

    明天来尝试下自己复写一下这个爬虫~
    主要涉及的内容是网页结果和模块方法的使用。
    包括了:

    • request.urlopen()
    • re.compile()
    • request.urlretriev()

    要好好学习~

    转载地址:http://cqqtl.baihongyu.com/

    你可能感兴趣的文章
    session和cookie实用手记
    查看>>
    Win10 64bit GTX950 Anaconda3 环境下安装配置TensorFlow
    查看>>
    【EASYDOM系列教程】之复制节点
    查看>>
    React 服务端渲染如此轻松 从零开始构建前后端应用
    查看>>
    gradle 打包不同资源
    查看>>
    react-native创建android原生模块
    查看>>
    分享一个基于Node的名片设计网站
    查看>>
    Express + Ejs实现一个简单的WebServer
    查看>>
    40 行代码内实现一个 React.js
    查看>>
    关于5G被激烈讨论的那些争端和冲突
    查看>>
    AlphaZero进化论:从零开始,制霸所有棋类游戏
    查看>>
    .NET仓储模式高级用例
    查看>>
    如何理解 Laravel 的 Ioc 容器
    查看>>
    代码艺术家之JS
    查看>>
    Microsoft Azure Site Recovery (2) 配置虚拟机保护
    查看>>
    具有邮件功能的用户和联系人有什么区别?-Exchange2003系列之八
    查看>>
    ORACLE学习笔记--性能优化4
    查看>>
    毕啸南专栏 | 对话李开复:AI科学家的转型之路
    查看>>
    iphone: 可编辑的tableView Move&Delete
    查看>>
    linux shell “(())” 双括号运算符使用
    查看>>