磨刀霍霍:爬爬爬爬爬爬蟲爬起來~

寫在前面的叨叨

折騰了這麼久,我終於在喝完一聽快樂肥宅水後下定決心來學習寫爬蟲了。
目標很簡單,由於我想要爬一下「證券化率」,而後可視化輸出結果。
證券化率的基礎就是上市公司的總市值,對於證券化率其實還蠻多說法的,好比雪球的這篇文。
中國的真實證券化率是多少?
爬蟲對於證券類的分析來講,其實已是司空見慣了,可是做爲菜鳥小股民,但願本身在寫完這個爬蟲以後也對股票有更深的認識吧,而後能賺錢就更好啦~
找了一個相對好入門的案例,來做爲學習的範本。
Python爬蟲抓取東方財富網股票數據並實現MySQL數據庫存儲html

那就開工吧~

準備動做

主要使用的工具和模塊包括:Anaconda Pandas MySQLmysql

  • Anaconda是以前就安裝好了的,具體過程能夠參考這個安裝流程。
    Anaconda徹底入門指南
  • Pandas是在Anaconda中用命令安裝好的,還得摸索下這個工具。sql

    pip install pandas
  • MySQL之前寫PHP的時候,都習慣直接用Wamp打包處理了,這會兒就來摸索下單獨安裝,安裝教程參考這個。
    windows下安裝Mysql—圖文詳解
整理思路

一共是四個步驟:數據庫

  1. 用爬蟲將數據抓取到本地csv文件中
  2. 將csv文件內的數據導入到數據庫中
  3. MySQL數據庫內進行查詢

咱們今天的目標是完成第一步----由於MySQL還沒部署完畢...明天繼續~windows

爬蟲啓動
#導入須要使用到的模塊
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對應的地址,看到對應的圖形結構,紅框就是須要命中的目標。

clipboard.png

根據代碼,原做者只截取了6開頭的大盤股的list存儲入數組。
而後用GET方法獲取每一個代碼對應的股票的數據,對每組數據進行存儲。
測試代碼

將代碼放到本地跑一下,看下結果。
正常應該是會下載數據到文件夾下,可是報錯了。app

clipboard.png
應該是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....實際上是個人路徑寫錯了,而後實驗結果是這樣的~

clipboard.png

clipboard.png

未完待續~

如今就坐等爬完啦~而後安裝MySQL,而後導入數據庫。
明天來嘗試下本身複寫一下這個爬蟲~
主要涉及的內容是網頁結果和模塊方法的使用。
包括了:

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

要好好學習~

相關文章
相關標籤/搜索