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

该文件中保存了所需要的数据信息,再写入文件时 使用了逗号进行数据种类区分

