时光网内地影视票房Top100爬取

Posted FlyingCode

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了时光网内地影视票房Top100爬取相关的知识,希望对你有一定的参考价值。

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


# -*- 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)
#print(pageCode)
for item in items:
#print(item)
iitems=re.findall(pattern,item)
for iitem in iitems:
print(iitem[0], end=‘;‘)
print(iitem[1], end=‘;‘)
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爬取的主要内容,如果未能解决你的问题,请参考以下文章

Python爬虫获取猫眼Top100电影信息(上)

数据分析 │ 基于聚类算法的电影票房分析

回答好的,追加200分,推荐票房过亿的电影或你认为最好的电影

猫眼经典影片库的爬取

Python一键获取日漫Top100榜单电影信息

Python一键获取日漫Top100榜单电影信息