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

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

内容简介:主要使用的工具和模块包括:一共是四个步骤:我们今天的目标是完成第一步----因为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()

要好好学习~


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

查看所有标签

猜你喜欢:

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

Namo Webeditor5.5一看就懂.

Namo Webeditor5.5一看就懂.

吳聲毅 / 金禾資訊 / 20040214 / NT$ 169

一看就懂系列書全以初學者的角度切入,全書以STEP BY STEP方式撰寫,並以豐富的圖片搭配教學,在最後更加上日常生活實例運用講解,一路學來一氣呵成。為了增進學習的效率更採用高級紙品全彩印刷,這麼好的書,您還在等什麼,一看就懂系列書保證是您最佳入門學習好伙伴。 本書特色: 1、一看就懂:Step by Step操作詳盡說明、讓您一看就懂 2、精選範例:精彩實務範例生動活......一起来看看 《Namo Webeditor5.5一看就懂.》 这本书的介绍吧!

JS 压缩/解压工具
JS 压缩/解压工具

在线压缩/解压 JS 代码

随机密码生成器
随机密码生成器

多种字符组合密码

正则表达式在线测试
正则表达式在线测试

正则表达式在线测试