學習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)
解析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()
成功執行之后可以在數據庫中查看到數據信息

使用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")
執行成功之后,可以在py文件同級目錄下找到txt文件

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

