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


# -*- 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. vue.js+elementUI文件上传、文件导入、文件下载

    1.文件下载 <el-button plain @click ="exportVmExcel()" size='mini' icon="el-icon-downlo ...

  2. Zabbix webhook 自定义报警媒介

    场景一:使用企业微信机器人报警 图中的token是:在群组中添加机器人,机器人的webhook地址的key var Wechat = { token: null, to: null, message: ...

  3. LINUX系统新增及自动挂载硬盘-九五小庞

    Linux系统下,添加新硬盘后,自动挂载的方法   1,列出所有硬盘,找到需要挂载的硬盘,例如/dev/vdb.输入: fdisk -l   2,查看硬盘是不是已经被挂载.一个硬盘不能重复挂载,已经挂 ...

  4. 文件与文件系统的压缩与打包 tar gzip bzip2

    1:linux下常见的压缩文件后缀: .gz .zip .bz2 打包后的: .tar.gz .tar.zip .tar.bz2 2:gzip: 压缩:gzip file 解压:gunzip file ...

  5. 在idea中使用eclipse的快捷键

    settings -> keymap 常用 单行注释 Ctrl + / 多行注释 Ctrl + Shift + / 待更新 不常用(但方便) 撤销 Ctrl + Z 反撤销 Ctrl + Y 查 ...

  6. mysql8版本以上重置密码

    1.打开命令窗口cmd,输入命令:net stop mysql,停止MySQL服务, 2.开启跳过密码验证登录的MySQL服务, 输入命令 : mysqld --console --skip-gran ...

  7. 羽夏看Win系统内核——系统调用篇

    写在前面   此系列是本人一个字一个字码出来的,包括示例和实验截图.由于系统内核的复杂性,故可能有错误或者不全面的地方,如有错误,欢迎批评指正,本教程将会长期更新. 如有好的建议,欢迎反馈.码字不易, ...

  8. IDEA 设置Java项目使用的JDK版本 最全篇

    1. File -> Project Setting -> Project : 2. File ->Project Setting -> Modules 3. File -&g ...

  9. Swift-技巧(六)设置按钮状态并更改

    摘要 按钮是一个宝藏控件,可以在设置的时候就对不同的状态添加图片.文本,甚至更改背景.在不同的展示场景中更改到不同的状态显示就好.恰恰是如何更改状态着实让我懵了一阵,所以记录一下过程.如果没有兴趣了解 ...

  10. 十本你不容错过的Docker入门到精通书籍推荐

    前言: 最近有许多小伙伴私信让我推荐几本关于Docker学习的书籍,今天花了一下午的时间在网上查阅了一些资料和结合自己平时工作中的一些学习参考资料书籍写下了这篇文章.注意以下书籍都是十分优秀的Dock ...