磨刀霍霍:爬爬爬爬爬爬虫爬起来~

栏目: Python · 发布时间: 6年前

内容简介:主要使用的工具和模块包括:一共是四个步骤:我们今天的目标是完成第一步----因为MySQL还没部署完毕...明天继续~

写在前面的叨叨

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

目标很简单,因为我想要爬一下“证券化率”,然后可视化输出结果。

证券化率的基础就是上市公司的总市值,对于证券化率其实还蛮多说法的,比如雪球的这篇文。

中国的真实证券化率是多少?

爬虫对于证券类的分析来说,其实已经是司空见惯了,但是作为菜鸟小股民,希望自己在写完这个爬虫之后也对股票有更深的认识吧,然后能赚钱就更好啦~

找了一个相对好入门的案例,来作为学习的范本。

Python爬虫抓取东方财富网股票数据并实现 MySQL 数据库存储

那就开工吧~

准备动作

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

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

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

整理思路

一共是四个步骤:

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

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

爬虫启动

#导入需要使用到的模块
import urllib
import re
import pandas as pd
import pymysql
import os

#爬虫抓取网页函数
def getHtml(url):
    html = urllib.request.urlopen(url).read()
    html = html.decode('gbk')
    return html

#抓取网页股票代码函数
def getStackCode(html):
    s = r'<li><a target="_blank" href="http://quote.eastmoney.com/\S\S(.*?).html">'
    pat = re.compile(s)
    code = pat.findall(html)
    return code
Url = '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对应的地址,看到对应的图形结构,红框就是需要命中的目标。

磨刀霍霍:爬爬爬爬爬爬虫爬起来~

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

测试代码

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

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

磨刀霍霍:爬爬爬爬爬爬虫爬起来~

应该是request模块下的 urlretrieve 函数报错。

关联语句是

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

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

Python urllib模块urlopen()与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....其实是我的路径写错了,然后实验结果是这样的~

磨刀霍霍:爬爬爬爬爬爬虫爬起来~

磨刀霍霍:爬爬爬爬爬爬虫爬起来~

未完待续~

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

明天来尝试下自己复写一下这个爬虫~

主要涉及的内容是网页结果和模块方法的使用。

包括了:

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

要好好学习~


以上所述就是小编给大家介绍的《磨刀霍霍:爬爬爬爬爬爬虫爬起来~》,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 码农网 的支持!

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

The Art of UNIX Programming

The Art of UNIX Programming

Eric S. Raymond / Addison-Wesley / 2003-10-3 / USD 54.99

Writing better software: 30 years of UNIX development wisdom In this book, five years in the making, the author encapsulates three decades of unwritten, hard-won software engineering wisdom. Raymond b......一起来看看 《The Art of UNIX Programming》 这本书的介绍吧!

RGB转16进制工具
RGB转16进制工具

RGB HEX 互转工具

RGB HSV 转换
RGB HSV 转换

RGB HSV 互转工具

RGB CMYK 转换工具
RGB CMYK 转换工具

RGB CMYK 互转工具