为了和艺恩网的数据作比较,让结果更精确,在昨天又写了一个时光网信息的爬取,这次的难度比艺恩网的大不少,话不多说,先放代码


# -*- coding:utf-8 -*-
from __future__ import print_function
import urllib2
import re

print(u"电影;首日票房;首周票房;时光评分;评分人数;总票房")
pre_url="http://movie.mtime.com/boxoffice/?area=china&type=MovieRankingHistory&category=all&page="
'''3&display=list&timestamp=1496903738364&version=07bb781100018dd58eafc3b35d42686804c6df8d&dataType=json'''
for index in range(10):
aft_url=str(index)+"&display=list&timestamp=1496903738364&version=07bb781100018dd58eafc3b35d42686804c6df8d&dataType=json"
url=pre_url+aft_url
response = urllib2.urlopen(url)
pageCode=response.read().decode('utf-8')
pattern = re.compile(u"h3><a[^>]*>([^<]+)(?:.+?首日<strong>([^<]+)(?:.+?首周<strong>([^<]+))?)?.*?point[^>]*>(\d)<em>.(\d).*?<p>(.*?)人.*?totalnum[^>]*><strong>([^<]+).*?", re.S)
divide = re.compile("(<\/div><\/div>.*?none\S\S>[^p]*p>)", re.S)
items=re.findall(divide, pageCode)
for item in items:
iitems=re.findall(pattern, item)
for iitem in iitems:
print(iitem[0], end=';')
if(iitem[1]==''):
print('', end=';')
elif(float(iitem[1])>=100):
print(float(iitem[1])/10000.0, end=';')
else:
print(iitem[1], end=';')
if (iitem[2] == ''):
print('', end=';')
elif (float(iitem[2]) >= 100):
print(float(iitem[2])/10000.0, end=';')
else:
print(iitem[2], end=';')
print(iitem[3], end='.')
print(iitem[4], end=';')
print(iitem[5], end=';')
print(iitem[6]+u'亿', end=';')
print('') 

时光网信息爬取的难点主要在于他的正则不好写

大部分电影首日票房与首周票房都有

部分电影有首日票房,没有首周票房

还有一部分电影首日票房首周票房都没有

比较好的解决办法就是在网页中将十部电影的代码分开,分别处理

如果不这么办就会出现本部电影捕获到下一部电影的票房的情况,紧接着下一部电影的信息会覆盖该部电影的信息,同时,下一部电影也将消失,等于少捕获了一部电影

所以就要在正则中采取"有则捕获,无则略过"的策略

主要做法是使用(?:(xxx))?yyy(zzz)的方法在寻找下一捕获目标选择性的对不知道是否存在的目标进行捕获

由于不会存在有首周无首日的情况,所以采取了(?:(首日)(?:(首周))?)?的策略

由于python2对中文编码的支持比较差,正则写出来始终有小bug,但在regex101中就能通过,后来在正则两边加入了u'  ',才豁然开朗

时光网内地影视票房Top100爬取的更多相关文章

  1. 一起学爬虫——通过爬取豆瓣电影top250学习requests库的使用

    学习一门技术最快的方式是做项目,在做项目的过程中对相关的技术查漏补缺. 本文通过爬取豆瓣top250电影学习python requests的使用. 1.准备工作 在pycharm中安装request库 ...

  2. python爬取糗事百科段子

    初步爬取糗事百科第一页段子(发布人,发布内容,好笑数和评论数) #-*-coding:utf--*- import urllib import urllib2 import re page = url ...

  3. 模拟登陆并爬取Github

    因为崔前辈给出的代码运行有误,略作修改和简化了. 书上例题,不做介绍. import requests from lxml import etree class Login(object): def ...

  4. 使用for或while循环来处理处理不确定页数的网页数据爬取

    本文转载自以下网站: Python For 和 While 循环爬取不确定页数的网页  https://www.makcyun.top/web_scraping_withpython16.html 需 ...

  5. 使用BeautifulSoup和正则表达式爬取时光网不同地区top100电影并使用Matplotlib对比

    还有一年多就要毕业了,不准备考研的我要着手准备找实习及工作了,所以一直没有更新. 因为Python是自学不久,发现很久不用的话以前学过的很多方法就忘了,今天打算使用简单的BeautifulSoup和一 ...

  6. 艺恩网内地总票房排名Top100信息及其豆瓣评分详情爬取

    前两天用python2写的一个小爬虫 主要实现了从http://www.cbooo.cn/Alltimedomestic这么个网页中爬取每一部电影的票房信息等,以及在豆瓣上该电影的评分信息 代码如下 ...

  7. PYTHON 爬虫笔记八:利用Requests+正则表达式爬取猫眼电影top100(实战项目一)

    利用Requests+正则表达式爬取猫眼电影top100 目标站点分析 流程框架 爬虫实战 使用requests库获取top100首页: import requests def get_one_pag ...

  8. 爬虫系列(1)-----python爬取猫眼电影top100榜

    对于Python初学者来说,爬虫技能是应该是最好入门,也是最能够有让自己有成就感的,今天在整理代码时,整理了一下之前自己学习爬虫的一些代码,今天先上一个简单的例子,手把手教你入门Python爬虫,爬取 ...

  9. 一起学爬虫——使用xpath库爬取猫眼电影国内票房榜

    之前分享了一篇使用requests库爬取豆瓣电影250的文章,今天继续分享使用xpath爬取猫眼电影热播口碑榜 XPATH语法 XPATH(XML Path Language)是一门用于从XML文件中 ...

随机推荐

  1. 微信小程序API接口封装

    @ 目录 一,让我们看一下项目目录 二,让我们熟悉一下这三个文件目的(文件名你看着办) 三,页面js中如何使用 今天的API的封装,我们拿WX小程序开发中,对它的API (wx.request)对这个 ...

  2. 关于linux7.x系列下的 systemd 的理解

    历史上Linux的启动一直采用init进程,下面的命令用来启动服务. $ sudo /etc/init.d/apache2 start #或者 $ service apache2 start 这种方法 ...

  3. nohup java -jar xx.jar & ,关闭窗口后退出进程

    nohup java -jar dw-report..jar > dw-report.log  & 自动退出命令在后台运行 xx.jar程序 明明已经加了"&" ...

  4. Linux部署Apollo+.Net Core简单使用

    Apollo官方网站非常详细,以下只是本人学习过程的整理 一.概念 Apollo(阿波罗)是一款可靠的分布式配置管理中心,能够集中化管理应用不同环境.不同集群的配置,配置修改后能够实时推送到应用端,并 ...

  5. 【Go语言细节】反射

    什么是反射 维基百科上反射的定义: 在计算机科学中,反射是指计算机程序在运行时(Run time)可以访问.检测和修改它本身状态或行为的一种能力.用比喻来说,反射就是程序在运行的时候能够"观 ...

  6. Vue.js教程 2.体验Vue

    Vue.js教程 2.体验Vue <!DOCTYPE html> <html lang="en"> <head> <meta charse ...

  7. .NET Conf 2021 正在进行中,带你看一看微软带来了什么内容

    今年最大的.NET活动正在进行, 可以通过Channel9 https://channel9.msdn.com/Events/dotnetConf/2021 看具体的Session .微软和社区一直在 ...

  8. MQ限流应用

    业务背景:系统中需要发送邮件给用户!实现是javamail发送 问题:某天,发现有些用户并未收到邮件排查: 1,登录发件箱,发现如下图:大量邮件发送失败,大部分是发送频率过高导致邮箱外发功能被限制 3 ...

  9. SpringCloud config native 配置

    1.概述 最近项目使用springCloud 框架,使用config搭建git作为配置中心. 在私有化部署中,出现很多比较麻烦的和鸡肋的设计. 每次部署都需要安装gitlab 有些环境安装完gitla ...

  10. 25.A Famous Music Composer

    描述 Mr. B is a famous music composer. One of his most famous work was his set of preludes. These 24 p ...