前两天用python2写的一个小爬虫

主要实现了从http://www.cbooo.cn/Alltimedomestic这么个网页中爬取每一部电影的票房信息等,以及在豆瓣上该电影的评分信息

代码如下

# -*- coding:utf-8 -*-
from __future__ import print_function
import urllib2
import re
'''
TODO:error 10060
'''
def fixEnglishName(name):
ooo=re.compile("ö")
space=re.compile("·")
if(len(space.findall(name))!=0):
nameTmp=re.sub("·"," ",name)
if(len(ooo.findall(nameTmp))!=0):
nameTtmp=re.sub("ö","o",nameTmp)
return nameTtmp
return nameTmp
if(len(ooo.findall(name))!=0):
nameTttmp=re.sub("ö","o",name)
return nameTttmp
return name
print(u'影片名;影片类型;国家及地区;总票房;平均票价;上映日期;场均人次;导演;主演;制作公司;发行公司;豆瓣评分 评论数;5星百分比;4星百分比;3星百分比;2星百分比;1星百分比')
pre_url="http://www.cbooo.cn/BoxOffice/getInland?pIndex="
for index in range(5):
aft_url=str(index+1)+"&t=0"
url=pre_url+aft_url
response = urllib2.urlopen(url)
pageCode=response.read().decode('utf-8')
pattern=re.compile(".*?ID\":\"(.*?)\",\".*?\":\"(.*?)\",\".*?\":\"(.*?)\",\".*?\":\"(.*?)\",\".*?\":\"(.*?)\",\".*?rice\":\"(.*?)\",\".*?\":\"(.*?)\",\".*?\":\"(.*?)\"",re.S)
items=re.findall(pattern, pageCode)
#pageFilms = []
'''item[0]:id,item[1]:名字,item[2]:类型,item[3]:国家及地区,item[4]:总票房,item[5]:平均票价,item[6]:上映日期,item[7]:场均人次'''
for item in items:
print(item[1]+";"+item[2]+";"+item[3]+";"+item[4]+";"+item[5]+";"+item[6]+";"+item[7],end=";")
#pageFilms.append([item[0].strip(),item[1].strip(),item[2].strip(),item[3].strip(),item[4].strip(),item[5].strip(),item[6].strip(),item[7].strip()])
filmUrl='http://www.cbooo.cn/m/'+str(item[0])
'''filmUrl:艺恩网电影页面'''
filmResponse=urllib2.urlopen(filmUrl)
filmPageCode=filmResponse.read().decode('utf-8')
#filmPattern=re.compile("onerror=\".*?\"borbg.pad02\".*?title=\"(.*?)\">.*?title=\"(.*?)\">.*?<dt>.*?title=\"(.*?)\">.*?<dt>.*?title=\"(.*?)\">",re.S)
filmPattern = re.compile(
"onerror=\".*?\"borbg.pad02\".*?title=\"(.*?)\">.*?<dd>.*?title=\"(.*?)\">.*?<dt>.*?title=\"(.*?)\">.*?<dt>.*?title=\"(.*?)\">",
re.S)
filmItems=re.findall(filmPattern,filmPageCode)
replaceSpace = re.compile("·")
for filmItem in filmItems:
print(fixEnglishName(filmItem[0]),end=';')
print(fixEnglishName(filmItem[1]),end=';')
print(filmItem[2],end=';')
print(filmItem[3],end=';')
dbTotal_Url="https://movie.douban.com/j/subject_suggest?q="+item[1]#电影名搜索链接
dbResponse = urllib2.urlopen(dbTotal_Url.encode("utf-8"))
dbCode = dbResponse.read().decode('utf-8')
dbTmp = re.sub(re.compile("\\\/"), "/", dbCode)
dbPattern = re.compile("url\":\"(.*?)\",\"", re.S)
dbItems = re.findall(dbPattern, dbTmp)
for dbItem in dbItems:
'''访问该页面并提取评分,评论数'''
dbFilmResponse=urllib2.urlopen(dbItem.strip())
dbFilmPageCode=dbFilmResponse.read().decode('utf-8')
dbFilmPattern=re.compile("property=\"v:average\">(.*?)<.*?votes\">(.*?)<.*?rating_per\">(.*?)%.*?rating_per\">(.*?)%.*?rating_per\">(.*?)%.*?rating_per\">(.*?)%.*?rating_per\">(.*?)%",re.S)
dbFilmItems=re.findall(dbFilmPattern,dbFilmPageCode)
'''dbFilmItem[0]:评分,dbFilmItem[1]:评论数,dbFilmItem[2]:5星百分比,dbFilmItem[3]:4星百分比,dbFilmItem[4]:3星百分比,dbFilmItem[5]:2星百分比,dbFilmItem[6]:1星百分比'''
for dbFilmItem in dbFilmItems:
for x in range(7):
print(dbFilmItem[x],end=';')
break
print ('')
'''换行'''

爬取过程还算顺利,期间遇到了一些小麻烦:

一部分导演的名字带有空格,由于编码的问题输出结果会变成·

《一条狗的使命》的导演莱塞·霍尔斯道姆先生的英文名中某个奇怪字符(貌似是瑞典字符?)会输出成为&amp;amp;#246;

以上都通过fixEnglishName函数进行了转化.

由于输出后的结果想要直接拿到excel里使用,为了进行输出格式的控制,通过from __future__ import print_function

将print xxx 替换为 print(xxx,end='xx'),其中第二个参数省略则默认是换行

豆瓣信息的获取是从艺恩网捕获到电影名后放入豆瓣电影搜索,再进入详情页获得

关于最上面的'''todo''',找我做这个小爬虫的同学在运行我程序的时候经常会出现error10060,本来想通过多次请求连接解决来着,但是写完后我这里已经有了完整的数据了,就不需要再对本程序进行完善了

 

艺恩网内地总票房排名Top100信息及其豆瓣评分详情爬取的更多相关文章

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

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

  2. Python的scrapy之爬取顶点小说网的所有小说

    闲来无事用Python的scrapy框架练练手,爬取顶点小说网的所有小说的详细信息. 看一下网页的构造: tr标签里面的 td 使我们所要爬取的信息 下面是我们要爬取的二级页面 小说的简介信息: 下面 ...

  3. 爬取猫眼电影TOP100

    本文所讲的爬虫项目实战属于基础.入门级别,使用的是Python3.5实现的. 本项目基本目标:在猫眼电影中把top100的电影名,排名,海报,主演,上映时间,评分等爬取下来 爬虫原理和步骤 爬虫,就是 ...

  4. Node.js爬虫-爬取慕课网课程信息

    第一次学习Node.js爬虫,所以这时一个简单的爬虫,Node.js的好处就是可以并发的执行 这个爬虫主要就是获取慕课网的课程信息,并把获得的信息存储到一个文件中,其中要用到cheerio库,它可以让 ...

  5. 用go语言爬取珍爱网 | 第三回

    前两节我们获取到了城市的URL和城市名,今天我们来解析用户信息. 用go语言爬取珍爱网 | 第一回 用go语言爬取珍爱网 | 第二回 爬虫的算法: 我们要提取返回体中的城市列表,需要用到城市列表解析器 ...

  6. 爬取百度网盘资源报user is not authorized, hitcode:119

    爬取百度网盘资源报user is not authorized, hitcode:119 一.总结 一句话总结: 可能是百度网盘禁止非客户端环境下载大文件,所以将请求头改为客户端:'User-Agen ...

  7. # [爬虫Demo] pyquery+csv爬取猫眼电影top100

    目录 [爬虫Demo] pyquery+csv爬取猫眼电影top100 站点分析 代码君 [爬虫Demo] pyquery+csv爬取猫眼电影top100 站点分析 https://maoyan.co ...

  8. 2015年度新增开源软件排名TOP100

    2015年度新增开源软件排名TOP100 本榜单包含2015年开源中国新收录的软件中,根据软件本身的关注度.活跃程度进行排名前100名的软件.从这份榜单中或许可以了解到最新业界的趋势. 1.Switc ...

  9. Python爬取中国票房网所有电影片名和演员名字,爬取齐鲁网大陆所有电视剧名称

    爬取CBO中国票房网所有电影片名和演员名字 # -*- coding: utf-8 -*- # 爬取CBO中国票房网所有电影片名 import json import requests import ...

随机推荐

  1. nginx + tomcat 实现负载均衡

    1.环境准备 服务器A上安装 nginx 作为代理服务器 服务器B上安装 tomcat,~/webapps 下创建 /test目录,创建 /index.html 内容为T1(生产环境中一般是一样的wa ...

  2. echarts 让轴自适应数据为小数整数

    echarts 让轴自适应数据为小数整数,以解决y轴数值重复的问题 工作中突然遇到这个问题 试了一下用formatter自适应  ok  在yAxis中提阿尼按键属性 axisLabel 1 axis ...

  3. Vue 基础自查——条件渲染和列表渲染

    v-if和v-show的区别是什么? v-if和v-for为什么不能一起用? v-for中的key有什么作用? 1 v-if 和 v-show 1.1 作用 都用来控制元素的显示和隐藏 1.2 控制元 ...

  4. C++11 多线程同步 互斥锁 条件变量

    在多线程程序中,线程同步(多个线程访问一个资源保证顺序)是一个非常重要的问题,Linux下常见的线程同步的方法有下面几种: 互斥锁 条件变量 信号量 这篇博客只介绍互斥量和条件变量的使用. 互斥锁和条 ...

  5. Cookie、Session、localStorage、sessionStorage区别和用法

    Cookie 在学习一个新知识点前,我们应该明白自己的学习目标,要带着疑问去学习,该小节须要了解 Cookies 什么是cookie,cookie的作用 cookie的工作机制,即cookie是运作流 ...

  6. 计算机网络tcp

    tcp/ip协议 什么是这个协议:计算机与网络设备之间通信的时候,两者需要使用相同的语言,如何侦察到对方,如何传输,谁先传输,都需要规定有一系列的协议,而tcp/ip协议则是这样的一种 tcp/ip的 ...

  7. 编译静态库的方式使用spdlog和fmt

    前言 spdlog++库,而且支持header only方式,但header only的使用方式会造成编译时长增加,所以这里简单描述一下,其编译静态库的方式. 又因为spdlog还依赖另一个开源库fm ...

  8. [python]django关闭debug

    1.版本声明 python3.6.5 django2.0.6 2.打开项目-setting setting.py中DEBUG默认是等于True,这样的话当访问接口存在错误会直接展示项目的所有配置信息, ...

  9. SqlServer修改某个字段的默认值时的操作步骤

    sqlserver有时候需要修改一个字段的默认值,却发现修改(update)不了,也删除(delete)不了,排查发现,需要先删除原有的默认值约束,才行:步骤如下1.2.3.若原来这个字段就没有默认值 ...

  10. Go语言核心36讲(Go语言实战与应用四)--学习笔记

    26 | sync.Mutex与sync.RWMutex 从本篇文章开始,我们将一起探讨 Go 语言自带标准库中一些比较核心的代码包.这会涉及这些代码包的标准用法.使用禁忌.背后原理以及周边的知识. ...