python爬取動態數據實戰---貓眼專業版-實時票房(二)


學習python進行簡單的數據爬取(基於python 3.x)。再進行數據頁面解析之后,使用scrapy框架進行爬取數據。沒有實現自己預想的效果,着實是自己能力有限,無法靈活使用該框架。就使用自己的辦法進行數據爬取。需要用到的模塊有 urllib,json,pymysql,datatime,os

首先定義一個類:class MovieSpider(object):

在外部調用類的方法

if __name__ == "__main__":
    #數據目標地址
    DataUrl = "http://piaofang.meituan.com/second-box"
    #定義類對象
    Spider = MovieSpider()
    #調用類方法
    Spider.DownloadData(DataUrl)

定義下載數據的方法:

    def DownloadData(self, url):
        self.GetData(url)

打開數據頁面,在這里使用urllib模塊進行訪問打開頁面,返回html頁面,內容是json格式進行編輯

    def OpenPage(self, url):
        """打開數據頁面"""
        rep = urllib.request.Request(url)
        response = urllib.request.urlopen(rep)
        #讀取頁面數據信息
        html = response.read()
        return html

實現獲取數據的方法:由於數據目標是以json格式進行保存,需要json模塊進行解析獲取數據

    def GetData(self, url):
        """獲取數據"""
        #將打開的頁面數據信息進行解碼UTF-8
        html = self.OpenPage(url).decode("utf-8")
        #print(html)
        #獲取的得數據為json格式,使用json庫來進行解析獲取所需數據
        HtmlJSON = json.loads(html)
        DataJSON = HtmlJSON.get("data")
        updateInfo = DataJSON.get("updateInfo")
        ListJSON = DataJSON.get("list")
        #print(type(ListJSON))
        #print(updateInfo[-9:])
        #獲取貓眼實時統計的時間-數據展示的時間為:北京時間 12:00:00 改為 年 月 日 時 分 秒
        statisTime = datetime.datetime.now().strftime("%Y-%m-%d") + updateInfo[-9:]
        #print(statisTime)

        for ItemList in ListJSON:
            MovieData = []
            MovieData.append(ItemList["movieName"])     #影片movieName
            MovieData.append(ItemList["releaseInfo"])   #上映天數releaseInfo
            MovieData.append(ItemList["sumBoxInfo"])    #累計票房sumBoxInfo
            MovieData.append(ItemList["boxInfo"])       #綜合票房boxInfo
            MovieData.append(ItemList["boxRate"])       #票房占比boxRate
            MovieData.append(ItemList["showInfo"])      #排片場次showInfo
            MovieData.append(ItemList["showRate"])      #排片占比showRate
            MovieData.append(ItemList["avgShowView"])   #場均人次avgShowView
            MovieData.append(ItemList["avgSeatView"])   #上座率avgSeatView
            MovieData.append(statisTime)
            #print(MovieData)

            #self.SaveDataByDB(MovieData)
            self.SaveDataByFile(MovieData)
View Code

解析html獲取數據之后,使用數據庫和文件形式進行保存,使用MYSQL數據保存,需要調用pymysql模塊。

    def SaveDataByDB(self, MovieData):
        """通過MYSQL數據庫保存數據"""
        #連接數據庫
        conn = pymysql.connect(database="SpiderDataDB", host = "127.0.0.1", port = 3306, user = "root", passwd = "111111", charset="utf8")
        #設置游標
        cursor = conn.cursor()

        strSql = "insert into MaoYanMovieData values (0, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s)"
        #執行插入語句
        cursor.execute(strSql, MovieData)
        #提交事務
        conn.commit()
        #關閉連接
        cursor.close()
        conn.close()
View Code

成功執行之后可以在數據庫中查看到數據信息

 

 使用txt文件格式進行保存數據,把數據保存在py文件同級目錄下,需要用到os模塊

    def SaveDataByFile(self,MovieData):
        """通過文件形式保存數據"""
        #獲取當前項目的工作目錄
        DirPath = os.getcwd()
        #print(DirPath)
        #E:\PythonByVSCode

        #將數據保存在py文件的同一個目錄下
        FilePath = DirPath + "\\SpiderProject\\MaoYanMovieSpider\\MovieData.txt"
        with open(FilePath, 'a') as f:
            f.write(','.join(MovieData))
            f.write("\n")
View Code

執行成功之后,可以在py文件同級目錄下找到txt文件

 

 該文件中保存了所需要的數據信息,再寫入文件時 使用了逗號進行數據種類區分

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM