免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 2103 | 回复: 1
打印 上一主题 下一主题

截取猫眼票房数据到mongodb [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2015-08-25 11:04 |只看该作者 |倒序浏览
第一次写python,模仿别人的抓取代码修改的。把猫眼电影数据抓到本地的mongodb中去,本机设置每半小时执行一次调用bat脚本,可以基于数据查看前十票房变化,分析其他问题。个人爱好,很粗糙请见谅。.
[Python]代码
  1. import re
  2. import urllib.request
  3. import time
  4. import pymongo

  5. def GetHtmlCode(url):
  6.     page=urllib.request.urlopen(url)
  7.     htmlCode=page.read().decode('utf-8')
  8.     #fileObj=open('C:\\Users\\Jason\\Desktop\\wy.txt','w',encoding='utf-8')
  9.     #fileObj.write(htmlCode)
  10.     #fileObj.close()
  11.     hc=htmlCode
  12.     return hc
  13.      
  14. class MovieData:
  15.     MovieName=''
  16.     MovieMoney=''
  17.     MovieMP=''
  18.     MovieDP=''
  19.     MovieAllMoney=''
  20.     def __init__(self,mn,mm,mmp,mdp,mam):
  21.         self.MovieName=mn
  22.         self.MovieMoney=mm
  23.         self.MovieMP=mmp
  24.         self.MovieDP=mdp
  25.         self.MovieAllMoney=mam
  26.     def print(self):
  27.         tm1=time.strftime('%Y-%m-%d  %H:%M:%S')
  28.         tm2=str(tm1)
  29.         print('电影名称: %s \n 票房: %s万元 \n 票房占比: %s \n 屏幕占比: %s \n 总收入: %s万元 \n 收集时间 is : %s '%(self.MovieName,self.MovieMoney,self.MovieMP,self.MovieDP,self.MovieAllMoney,tm2))
  30.         #return ('电影名称: %s \n 票房: %s万元 \n 票房占比: %s \n 屏幕占比: %s \n 总收入: %s万元 \n 收集时间 is : %s '%(self.MovieName,self.MovieMoney,self.MovieMP,self.MovieDP,self.MovieAllMoney,tm2))
  31.     def get(self):
  32.         tm1=time.strftime('%Y-%m-%d  %H:%M:%S')
  33.         tm2=str(tm1)
  34.         return ('电影名称: %s \n 票房: %s万元 \n 票房占比: %s \n 屏幕占比: %s \n 总收入: %s万元 \n 收集时间 is : %s '%(self.MovieName,self.MovieMoney,self.MovieMP,self.MovieDP,self.MovieAllMoney,tm2))
  35. def GetDataBlock(pagecode):
  36.     DataBlock_re = r'<ul class="canTouch[\s\S]+?</ul>'
  37.     DBre=re.compile(DataBlock_re)
  38.     DBList=re.findall(DBre, pagecode)
  39.     #print(DBList[0])
  40.     #num=0
  41.     #for i in DBList:
  42.     #    num=num+1
  43.     #    print(str(num)+'----------------------')
  44.     #   print(i)
  45.     return DBList
  46. def MakeDataInfo(block):
  47.     b1_re=r'<li class=\'c1\'>[\s\S]+?</li>'
  48.     b1=re.search(b1_re, block).group()
  49.     b1=re.sub(r'<li[\s\S]+?<b>','',b1)
  50.     b1=re.sub(r'</b>[\s\S]+?</li>','',b1)
  51.     #print(b1)
  52.     b2_re=r'<li class="c2">[\s\S]+?</li>'
  53.     b2=re.search(b2_re, block).group()
  54.     b2=re.sub(r'<li[\s\S]+?<b>','',b2)
  55.     b2=re.sub(r'</b>[\s\S]+?</li>','',b2)
  56.     #print(b2)   
  57.     b3_re=r'<li class="c3">[\s\S]+?</li>'
  58.     b3=re.search(b3_re, block).group()
  59.     b3=re.sub(r'<li class="c3">','',b3)
  60.     b3=re.sub(r'</li>','',b3)
  61.     #print(b3)
  62.     b4_re=r'<li class="c4">[\s\S]+?</li>'
  63.     b4=re.search(b4_re, block).group()
  64.     b4=re.sub(r'<li class="c4">','',b4)
  65.     b4=re.sub(r'</li>','',b4)
  66.     # print(b4)
  67.     b5_re=r'<li class="c5">[\s\S]+?</li>'
  68.     b5=re.search(b5_re, block).group()
  69.     b5=re.sub(r'<li class="c5">','',b5)
  70.     b5=re.sub(r'<span[\s\S]+?</li>','',b5)
  71.     b5=re.search(r'[\d]+', b5).group()
  72.     #print(b5)
  73.     return MovieData(b1,b2,b3,b4,b5)
  74.      
  75. client=pymongo.MongoClient('localhost',27017)
  76. db=client.test  
  77. def insert(name,income,rate1,rate2,alincome,time):
  78.     db.movie.insert_one({"name":name,"income":income,"mrate":rate1,"drate":rate2,"allincome":alincome,"time":time})
  79.    
  80.      
  81. tm1=time.strftime('%Y-%m-%d  %H:%M:%S')
  82. tm2=str(tm1)
  83. pc=GetHtmlCode('http://piaofang.maoyan.com/')
  84. #print(pc)a
  85. bl=GetDataBlock(pc)
  86. mdata=''
  87. for i in bl:
  88.     mv=MakeDataInfo(i)
  89.     insert(mv.MovieName,mv.MovieMoney,mv.MovieMP,mv.MovieDP,mv.MovieAllMoney,tm2)
  90.     #insert(mv,tm2)
  91.     mv.print()
  92.     mdata=mdata+mv.get()
  93. fileObj=open('C:\\Users\\Jason\\Desktop\\wy.txt','a',encoding='utf-8')
  94. fileObj.write(mdata)
  95. fileObj.close()
复制代码

论坛徽章:
0
2 [报告]
发表于 2015-08-31 14:10 |只看该作者
需要这么复杂吗?
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP