1200字范文,内容丰富有趣,写作的好帮手!
1200字范文 > Python爬取豆瓣Top250电影中2000年后上映的影片信息

Python爬取豆瓣Top250电影中2000年后上映的影片信息

时间:2024-01-13 12:32:31

相关推荐

Python爬取豆瓣Top250电影中2000年后上映的影片信息

Python爬取豆瓣Top250电影中2000年后上映的影片信息

前言

双十一前加在京东购物车的一个东西,价格330,Plus会员用券后差不多310。双十一当天打开看了下399,还得去抢满300减100的券。不得不说,套路真的深,京东是越来越没底线,吐槽一下。

考虑写个爬虫把部分商品信息价格优惠记录一下,近期忙到吐血,也没开始尝试。看大家第一条爬虫教学都是爬豆瓣电影信息(不过大多都已经不能运行,豆瓣的格式改过了),果真是娱乐至上的年代啊。。

我也遵从前辈们走过的路,来一遍爬取豆瓣Top250电影

准备

环境:Python2.7.15 64-bit

依赖库:urllib2

urllib2安装

pip install urllib2

urllib2简介

这段转自:/qq_41185868/article/details/80488303

urllib和urllib2之间PK

1、在python中,urllib和urllib2不可相互替代的。 整体来说,urllib2是urllib的增强,但是urllib中有urllib2中所没有的函数。

urllib2可以用urllib2.openurl中设置Request参数,来修改Header头。如果你访问一个网站,想更改User Agent(可以伪装你的浏览器),你就要用urllib2.

urllib支持设置编码的函数,urllib.urlencode,在模拟登陆的时候,经常要post编码之后的参数,所以要想不使用第三方库完成模拟登录,你就需要使用urllib。

urllib一般和urllib2一起搭配使用

2、urllib 和urllib2都是接受URL请求的相关模块,但是提供了不同的功能。两个最显著的不同如下:

urllib提供urlencode方法用来GET查询字符串的产生,而urllib2没有。这是为何urllib常和urllib2一起使用的原因。

urllib2可以接受一个Request类的实例来设置URL请求的headers,urllib仅可以接受URL。这意味着,你不可以伪装你的User Agent字符串等(伪装浏览器)。

urllib2模块比较优势的地方是urlliburllib2.urlopen可以接受Request对象作为参数,从而可以控制HTTP Request的header部分。

urllib2模块没有加入urllib.urlretrieve函数以及urllib.quote等一系列quote和unquote功能,因此有时也需要urllib的辅助

urllib2在python3中被修改为urllib.request。

相关文章

urllib

urllib2

urllib3

python的httplib、urllib和urllib2的区别及其应用

深入理解urllib、urllib2及requests

分析网页信息

<col class="grid_view"><li><div class="item"><div class="pic"><em class="">1</em><a href="/subject/1292052/"><img alt="肖申克的救赎" src="/view/movie_poster_cover/ipst/public/p480747492.jpg" class=""></a></div><div class="info"><div class="hd"><a href="/subject/1292052/" class=""><span class="title">肖申克的救赎</span><span class="title">&nbsp;/&nbsp;The Shawshank Redemption</span><span class="other">&nbsp;/&nbsp;月黑高飞(港) / 刺激1995(台)</span></a><span class="playable">[可播放]</span></div><div class="bd"><p class="">导演: 弗兰克·德拉邦特 Frank Darabont&nbsp;&nbsp;&nbsp;主演: 蒂姆·罗宾斯 Tim Robbins /...<br>1994&nbsp;/&nbsp;美国&nbsp;/&nbsp;犯罪 剧情</p><div class="star"><span class="rating5-t"><em>9.6</em></span>&nbsp;<span>646374人评价</span></div><p class="quote"><span class="inq">希望让人自由。</span></p></div></div></div></li>

正则表达式

pattern = pile(u'<li>.*?<div.*?class="item">.*?<div.*?class="pic">.*?'+ u'<em.*?class="">(.*?)</em>.*?' # 排名+ u'<div.*?class="info">.*?<span.*?class="title">(.*?)</span>.*?' # 电影名+ u'<span.*?class="other">&nbsp;/&nbsp;(.*?)</span>.*?</a>.*?' # 电影别名# + u'<div.*?class="bd">.*?<p.*?class="">.*?'+ u'导演: (.*?)&nbsp;&nbsp;&nbsp;' # 导演+ u'主演: (.*?)<br>' # 主演+ u'(.*?)&nbsp;/&nbsp;'# 年份+ u'(.*?)&nbsp;/&nbsp;'# 原产国+ u'(.*?)</p>'# 类型+ u'.*?<div.*?class="star">.*?property="v:average">(.*?)</span>' # 平均评分+ u'.*?<span>(.*?)人评价</span>.*?<p.*?class="quote">.*?'# 评论数+ u'<span.*?class="inq">(.*?)</span>.*?</li>', re.S)

完整代码

# -*- coding:utf-8 -*-import urllib2import reimport sysclass MovieTop250:def __init__(self):#设置默认编码格式为utf-8reload(sys)sys.setdefaultencoding('utf-8')self.start = 0self.param = '&filter=&type='self.headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 6.1; WOW64)'}self.movieList = []self.filePath = './DoubanTop250.txt'def getPage(self):try:URL = '/top250?start=' + str(self.start)request = urllib2.Request(url = URL, headers = self.headers)response = urllib2.urlopen(request)page = response.read().decode('utf-8')pageNum = (self.start + 25)/25print('正在抓取第' + str(pageNum) + '页数据...' )self.start += 25return pageexcept e:if hasattr(e, 'reason'):print('抓取失败,具体原因:', e.reason)def getMovie(self):pattern = pile(u'<li>.*?<div.*?class="item">.*?<div.*?class="pic">.*?'+ u'<em.*?class="">(.*?)</em>.*?' # 排名+ u'<div.*?class="info">.*?<span.*?class="title">(.*?)</span>.*?' # 电影名+ u'<span.*?class="other">&nbsp;/&nbsp;(.*?)</span>.*?</a>.*?' # 电影别名# + u'<div.*?class="bd">.*?<p.*?class="">.*?'+ u'导演: (.*?)&nbsp;&nbsp;&nbsp;' # 导演+ u'主演: (.*?)<br>' # 主演+ u'(.*?)&nbsp;/&nbsp;'# 年份+ u'(.*?)&nbsp;/&nbsp;'# 原产国+ u'(.*?)</p>'# 类型+ u'.*?<div.*?class="star">.*?property="v:average">(.*?)</span>' # 平均评分+ u'.*?<span>(.*?)人评价</span>.*?<p.*?class="quote">.*?'# 评论数+ u'<span.*?class="inq">(.*?)</span>.*?</li>', re.S)while self.start <= 225:page = self.getPage()movies = re.findall(pattern, page)for movie in movies:self.movieList.append([movie[0], movie[1], movie[2].lstrip('&nbsp;/&nbsp;'), movie[3].lstrip('&nbsp;/&nbsp;'), movie[4], movie[5], movie[6].lstrip(), movie[7], movie[8].rstrip(),movie[9], movie[10]])def writeTxt(self):fileTop250 = open(self.filePath, 'w')try:for movie in self.movieList:playDateY = str(movie[5]).replace("\n", "").lstrip()if len(playDateY) == 4:yNum = int(playDateY)if(yNum < check_year):continuefileTop250.write('电影排名:' + movie[0] + '\r\n')fileTop250.write('电影名称:' + movie[1] + '\r\n')fileTop250.write('外文名称:' + movie[2] + '\r\n')fileTop250.write('导演姓名:' + movie[3] + '\r\n')fileTop250.write('参与主演:' + movie[4] + '\r\n')fileTop250.write('上映年份:' + str(movie[5]).replace("\n", "").lstrip() + '\r\n')fileTop250.write('制作国家/地区:' + movie[6] + '\r\n')fileTop250.write('电影类别:' + str(movie[7]).replace("\n", "") + '\r\n')fileTop250.write('电影评分:' + movie[8] + '\r\n')fileTop250.write('参评人数:' + movie[9] + '\r\n')fileTop250.write('简短影评:' + movie[10] + '\r\n\r\n')print('文件写入成功...')finally:fileTop250.close()def main(self):print('正在从豆瓣电影Top250抓取数据...')self.getMovie()self.writeTxt()print('抓取完毕...')# 2000年以前的电影不关心check_year = 2000DouBanSpider = MovieTop250()DouBanSpider.main()

## 运行

/Users/l2xin/Documents/Gitee/PythonUitls/WebCrowler/MovieTop250.py正在从豆瓣电影Top250抓取数据...正在抓取第1页数据...正在抓取第2页数据...正在抓取第3页数据...正在抓取第4页数据...正在抓取第5页数据...正在抓取第6页数据...正在抓取第7页数据...正在抓取第8页数据...正在抓取第9页数据...正在抓取第10页数据...文件写入成功...抓取完毕...

DoubanTop250.txt

电影排名:7电影名称:千与千寻外文名称:神隐少女(台) / Spirited Away导演姓名:宫崎骏 Hayao Miyazaki参与主演:柊瑠美 Rumi Hîragi / 入野自由 Miy...上映年份:2001制作国家/地区:日本电影类别:剧情 动画 奇幻 电影评分:9.3参评人数:872152简短影评:最好的宫崎骏,最好的久石让。 电影排名:9电影名称:盗梦空间外文名称:潜行凶间(港) / 全面启动(台)导演姓名:克里斯托弗·诺兰 Christopher Nolan参与主演:莱昂纳多·迪卡普里奥 Le...上映年份:制作国家/地区:美国 英国电影类别:剧情 科幻 悬疑 冒险 电影评分:9.3参评人数:961314简短影评:诺兰给了我们一场无法盗取的梦。电影排名:10电影名称:机器人总动员外文名称:瓦力(台) / 太空奇兵·威E(港)导演姓名:安德鲁·斯坦顿 Andrew Stanton参与主演:本·贝尔特 Ben Burtt / 艾丽...上映年份:制作国家/地区:美国电影类别:爱情 科幻 动画 冒险 电影评分:9.3参评人数:636867简短影评:小瓦力,大人生。电影排名:11电影名称:忠犬八公的故事外文名称:忠犬小八(台) / 秋田犬八千(港)导演姓名:莱塞·霍尔斯道姆 Lasse Hallström参与主演:理查·基尔 Richard Ger...上映年份:制作国家/地区:美国 英国电影类别:剧情 电影评分:9.3参评人数:621135简短影评:永远都不能忘记你所爱的人。···

其他

某些地方正则匹配还有问题,正则实在是不熟,以后再慢慢玩。

电影排名:23电影名称:触不可及外文名称:闪亮人生(港) / 逆转人生(台)导演姓名:奥利维·那卡什 Olivier Nakache / 艾力克·托兰达 Eric Toledano&nbsp;&nbsp;&nbsp;主...<br>&nbsp;/&nbsp;法国&nbsp;/&nbsp;剧情 喜剧</p><div class="star"><span class="rating45-t"></span><span class="rating_num" property="v:average">9.2</span><span property="v:best" content="10.0"></span><span>463398人评价</span></div><p class="quote"><span class="inq">满满温情的高雅喜剧。</span></p></div></div></div></li><li><div class="item"><div class="pic"><em class="">24</em><a href="/subject/3319755/"><img width="100" alt="怦然心动" src="/view/photo/s_ratio_poster/public/p663036666.jpg" class=""></a></div><div class="info"><div class="hd"><a href="/subject/3319755/" class=""><span class="title">怦然心动</span><span class="title">&nbsp;/&nbsp;Flipped</span><span class="other">&nbsp;/&nbsp;萌动青春 / 青春萌动</span></a><span class="playable">[可播放]</span></div><div class="bd"><p class="">导演: 罗伯·莱纳 Rob Reiner参与主演:玛德琳·卡罗尔 Madeline Carroll / 卡...上映年份:制作国家/地区:美国电影类别:剧情 喜剧 爱情 电影评分:9.0参评人数:746761简短影评:真正的幸福是来自内心深处。

参考

Py之urllib2:Python库之urllib、urllib2、urllib3系列简介、安装、使用方法之详细攻略

python爬虫实战 | 爬取豆瓣TOP250排名信息

/jzincnblogs/p/4899348.html

/pbgc396dwxjb77f2je/article/details/7983

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。