python爬取动态数据实战---猫眼专业版-实时票房(二)

匿名 (未验证) 提交于 2019-12-02 22:51:30

学习python进行简单的数据爬取(基于python 3.x)。再进行数据页面解析之后,使用scrapy框架进行爬取数据。没有实现自己预想的效果,着实是自己能力有限,无法灵活使用该框架。就使用自己的办法进行数据爬取。需要用到的模块有 urllib,json,pymysql,datatime,os

在外部调用类的方法

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

成功执行之后可以在数据库中查看到数据信息

    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文件

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!