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

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


# -*- coding:utf-8 -*-from __future__ import print_functionimport urllib2import 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‘  ‘,才豁然开朗

时间: 2024-10-24 23:11:23

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

多线程爬取小说时如何保证章节的顺序

前言 爬取小说时,以每一个章节为一个线程进行爬取,如果不加以控制的话,保存的时候各个章节之间的顺序会乱掉. 当然,这里说的是一本小说保存为单个txt文件,如果以每个章节为一个txt文件,自然不会存在这种情况. 不仅仅是小说,一些其他的数据在多线程爬取时也有类似情况,比如: 漫画:漫画其实是由大量图片组成,一般一本漫画会保存为一个pdf文件,在此过程要保证图片的顺序. 视频:现在网络上的视频大部分是由多个ts文件拼合,最后保存为一个mp4文件,要保证ts文件的顺序. 它们都有一个共同的特点,那就是

用python爬取亚马逊物品列表

1. 仔细分析亚马逊查询详细界面可以看出来,主要关键部分有三个地方,这三个地方分别控制了查询列表的页面和关键字,所以修改这几个参数可以改变列表页数以及模糊查询的结果 http://www.amazon.cn/s/ref=sr_pg_3?rh=n%3A658390051%2Ck%3Aphp&page=3&keywords=Java&ie=UTF8&qid=1459478790 2. 通过基础链接以及正则表达式匹配的方法进行替换的方式改变爬取页面,注意由于使用了正则表达式匹配,

python爬取糗事百科段子

初步爬取糗事百科第一页段子(发布人,发布内容,好笑数和评论数) 1 #-*-coding:utf-8-*- 2 import urllib 3 import urllib2 4 import re 5 page = 1 6 url ='http://www.qiushibaike.com/hot/page/'+str(page) #第一页URL 7 headers={'User-Agent':'Mozilla/5.0 (Windows NT 6.1; WOW64; rv:43.0) Gecko/

多线程爬取百度百科

前言:EVERNOTE里的一篇笔记,我用了三个博客才学完...真的很菜...百度百科和故事网并没有太过不一样,修改下编码,debug下,就可以爬下来了,不过应该是我爬的东西太初级了,而且我爬到3000多条链接时,好像被拒绝了...爬取速度也很慢,估计之后要接触一些优化或者多进程,毕竟python是假的多线程.本博客参照代码及PROJECT来源:http://kexue.fm/archives/4385/ 源代码: 1 #! -*- coding:utf-8 -*- 2 import reques

爬虫实例——爬取淘女郎的相册(通过谷歌浏览器的开发者工具找出规律快速爬取)

用正常的方式(selenium.PhantomJS.BeautifulSoup)爬取淘女郎相册不仅困难,效率很低,而且很容易卡死. 我通过谷歌浏览器的开发者工具找出每个页面的规律,快速获取每张照片的链接,再下载,这样效率就很高了. 过程 首页很简单,没有采用JS渲染,直接用requests就能获取完整的源代码,没什么说的. 淘女郎首页采用了JS渲染,直接用requests是获取不到完整的源代码的,此时可以打开谷歌浏览器的开发者工具,主要看“Network”,筛选出“XHR”,如下图: 从上图可知

爬虫练习五:多进程爬取股市通股票数据

在上网查阅一些python爬虫文章时,看见有人分享了爬取股票的交易数据,不过实现得比较简单.这里就做个小练习,从百度股票批量爬取各股票的交易信息. 文章出处为:Python 爬虫实战(2):股票数据定向爬虫. 爬取数据:每个股票的日度交易数据 爬取来源:百度股市通 python版本:3.6.6 时间:20190115 1. 找到日度数据url 以中化国际的日K数据为例,通过分析网页,我们可以发现,日度交易数据是通过接口的形式获取的. 获取的url为:https://gupiao.baidu.co

requests+re(正则)之猫眼top100排名信息爬取

这篇博客介绍怎么爬取猫眼top100的排名,网址,评分等.使用的是爬虫技术最基础的requests请求加re(正则)提取. 有时候我们看电影会不知道看什么电影比较好,一般打开电影排名,还得一下下的点击到电影排行页面.所以就有了这个爬虫,直接就能得到猫眼的电影排名和他的网址,岂不乐哉. 我们先打开到猫眼的top100页面:https://maoyan.com/board/4? 然后点击到第二页:https://maoyan.com/board/4?offset=10 点击第三页:https://m

使用requests爬取猫眼电影TOP100榜单

Requests是一个很方便的python网络编程库,用官方的话是"非转基因,可以安全食用".里面封装了很多的方法,避免了urllib/urllib2的繁琐. 这一节使用requests库对猫眼电影的TOP100榜进行抓取. 1 获得页面. 首先确定要爬取的url为http://maoyan.com/board/4,通过requests模块,打印出页面的信息 def get_a_page(url): try: response = requests.get(url) if respon

1-2 爬取猫眼票房网上的电影票房信息

1 piaofang.py 2 #-*- coding:utf-8 -*- 3 ''' 4 该脚本可以抓取猫眼票房网站上的电影票房数据 5 使用的数据为豆瓣上爬取的电影,见文件:doubanMovies_IMDBScore.csv 6 ''' 7 import requests 8 import lxml.html 9 import time 10 from pandas import DataFrame 11 import pandas as pd 12 13 headers={'User-A