① Python抓取豆瓣电影排行榜
1.观察url
首先观察一下网址的结构 http://movie.douban.com/top250?start=0&filter=&type= :
可以看到,问号?后有三个参数 start、filter、type,其中start代表页码,每页展示25部电影,0代表第一页,以此类推25代表第二页,50代表第三页...
filter顾名思义,是过滤已经看过的电影,filter和type在这里不重要,可以不管。
2.查看网页源代码
打开上面的网址,查看源代码,可以看到信息的展示结构如下:
1 <ol class="grid_view"> 2 <li> 3 <div class="item"> 4 <div class="pic"> 5 <em class="">1</em> 6 <a href="http://movie.douban.com/subject/1292052/"> 7 <img alt="肖申克的救赎" src="http://img3.douban.com/view/movie_poster_cover/ipst/public/p480747492.jpg" class=""> 8 </a> 9 </div>10 <div class="info">11 <div class="hd">12 <a href="http://movie.douban.com/subject/1292052/" class="">13 <span class="title">肖申克的救赎</span>14 <span class="title"> / The Shawshank Redemption</span>15 <span class="other"> / 月黑高飞(港) / 刺激1995(台)</span>16 </a>17 18 19 <span class="playable">[可播放]</span>20 </div>21 <div class="bd">22 <p class="">23 导演: 弗兰克·德拉邦特 Frank Darabont 主演: 蒂姆·罗宾斯 Tim Robbins /...<br>24 1994 / 美国 / 犯罪 剧情25 </p>26 27 28 <div class="star">29 <span class="rating5-t"><em>9.6</em></span>30 <span>646374人评价</span>31 </div>32 33 <p class="quote">34 <span class="inq">希望让人自由。</span>35 </p>36 </div>37 </div>38 </div>39 </li>
其中<em class="">1</em>代表排名,<span class="title">肖申克的救赎</span>代表电影名,其他信息的含义也很容易能看出来。
于是接下来可以写正则表达式:
1 pattern = re.compile(u'<div.*?class="item">.*?<div.*?class="pic">.*?' 2 + u'<em.*?class="">(.*?)</em>.*?' 3 + u'<div.*?class="info">.*?<span.*?class="title">(.*?)' 4 + u'</span>.*?<span.*?class="title">(.*?)</span>.*?' 5 + u'<span.*?class="other">(.*?)</span>.*?</a>.*?' 6 + u'<div.*?class="bd">.*?<p.*?class="">.*?' 7 + u'导演: (.*?) ' 8 + u'主演: (.*?)<br>' 9 + u'(.*?) / (.*?) / '10 + u'(.*?)</p>'11 + u'.*?<div.*?class="star">.*?<em>(.*?)</em>'12 + u'.*?<span>(.*?)人评价</span>.*?<p.*?class="quote">.*?'13 + u'<span.*?class="inq">(.*?)</span>.*?</p>', re.S)
在此处flag参数re.S代表多行匹配。
3.使用面向对象的设计模式编码
代码如下:
1 # -*- coding:utf-8 -*- 2 __author__ = 'Jz' 3 import urllib2 4 import re 5 import sys 6 7 class MovieTop250: 8 def __init__(self): 9 #设置默认编码格式为utf-810 reload(sys)11 sys.setdefaultencoding('utf-8')12 self.start = 013 self.param = '&filter=&type='14 self.headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 6.1; WOW64)'}15 self.movieList = []16 self.filePath = 'D:/coding_file/python_file/File/DoubanTop250.txt'17 18 def getPage(self):19 try:20 URL = 'http://movie.douban.com/top250?start=' + str(self.start)21 request = urllib2.Request(url = URL, headers = self.headers)22 response = urllib2.urlopen(request)23 page = response.read().decode('utf-8')24 pageNum = (self.start + 25)/2525 print '正在抓取第' + str(pageNum) + '页数据...' 26 self.start += 2527 return page28 except urllib2.URLError, e:29 if hasattr(e, 'reason'):30 print '抓取失败,具体原因:', e.reason31 32 def getMovie(self):33 pattern = re.compile(u'<div.*?class="item">.*?<div.*?class="pic">.*?'34 + u'<em.*?class="">(.*?)</em>.*?'35 + u'<div.*?class="info">.*?<span.*?class="title">(.*?)'36 + u'</span>.*?<span.*?class="title">(.*?)</span>.*?'37 + u'<span.*?class="other">(.*?)</span>.*?</a>.*?'38 + u'<div.*?class="bd">.*?<p.*?class="">.*?'39 + u'导演: (.*?) '40 + u'主演: (.*?)<br>'41 + u'(.*?) / (.*?) / '42 + u'(.*?)</p>'43 + u'.*?<div.*?class="star">.*?<em>(.*?)</em>'44 + u'.*?<span>(.*?)人评价</span>.*?<p.*?class="quote">.*?'45 + u'<span.*?class="inq">(.*?)</span>.*?</p>', re.S)46 while self.start <= 225:47 page = self.getPage()48 movies = re.findall(pattern, page)49 for movie in movies:50 self.movieList.append([movie[0], movie[1], movie[2].lstrip(' / '),
51 movie[3].lstrip(' / '), movie[4],
52 movie[5], movie[6].lstrip(), movie[7], movie[8].rstrip(),53 movie[9], movie[10], movie[11]])54 55 def writeTxt(self):56 fileTop250 = open(self.filePath, 'w')57 try:58 for movie in self.movieList:59 fileTop250.write('电影排名:' + movie[0] + '\r\n')60 fileTop250.write('电影名称:' + movie[1] + '\r\n')61 fileTop250.write('外文名称:' + movie[2] + '\r\n')62 fileTop250.write('电影别名:' + movie[3] + '\r\n')63 fileTop250.write('导演姓名:' + movie[4] + '\r\n')64 fileTop250.write('参与主演:' + movie[5] + '\r\n')65 fileTop250.write('上映年份:' + movie[6] + '\r\n')66 fileTop250.write('制作国家/地区:' + movie[7] + '\r\n')67 fileTop250.write('电影类别:' + movie[8] + '\r\n')68 fileTop250.write('电影评分:' + movie[9] + '\r\n')69 fileTop250.write('参评人数:' + movie[10] + '\r\n')70 fileTop250.write('简短影评:' + movie[11] + '\r\n\r\n')71 print '文件写入成功...'72 finally:73 fileTop250.close()74 75 def main(self):76 print '正在从豆瓣电影Top250抓取数据...'77 self.getMovie()78 self.writeTxt()79 print '抓取完毕...'80 81 DouBanSpider = MovieTop250()82 DouBanSpider.main()
代码比较简单,最后将信息写入一个文件,没有什么需要解释的地方。
② 如何查2019年最全电影上映列表
一、2019年最新的电影排名如下:
1、《风中有朵雨做的云》
《风中有朵雨做的云》是由娄烨执导,梅峰、邱玉洁、马英力编剧,张家鲁担任监制的悬疑犯罪电影,由井柏然、宋佳、马思纯、秦昊、陈妍希、张颂文主演,于2019年4月4日在全国公映。
该片讲述了沿海小城因一起建委主任坠楼命案引发出一连串扑朔迷离的浮沉故事。这是继2003年的《紫蝴蝶》,2012年的《浮城谜事》和2014年的《推拿》之后,国内院线上映的第4部娄烨的作品。

2、《调音师》
《调音师》是由斯里兰姆·拉格万执导,阿尤斯曼·库拉纳、塔布拉迪卡·艾普特、安尔·德霍万联合主演的悬疑犯罪喜剧电影。该片讲述了一个假扮盲人的钢琴调音师阿卡什(Akash)在意外成为一起凶案的“目击证人”后,所遭遇的种种出其不意的经历的故事。该片于2019年4月3日中国大陆上映。
③ 如何抓取網頁影片
方法一 利用FLVCD下载
1、打开视频下载筛选网站,如在地址中输入“www flvcd com ”(注意输入完整)并按回车,打开该网站:
怎么样下载优酷和土豆等网站上的视频文件?
2、打开后,在网站中间的文本框中粘贴我们需要下载视频的网站的地址,再单击“开始GO”按钮,网站开始分析视频资源;
3、网站分析资源的速度一般较快,稍后分析完成后我们可以看到结果:
怎么样下载优酷和土豆等网站上的视频文件?
4、如果视频资源是被分割成多个视频,该工具也能够分析出来,如上图。
END
方法二 利用IE9的捕获功能
1、首先请确认你所使用的IE版本是IE9或以上。打开IE,点击工具栏最右边的“工具”按钮,在弹出的菜单中选择“关于Internet Explorer”命令:
怎么样下载优酷和土豆等网站上的视频文件?
2、在弹出的“关于Internet Explorer”对话框中,我们可以清楚的查看到当前IE的版本:
怎么样下载优酷和土豆等网站上的视频文件?
3、确定IE版本为IE9或更高版本时同可以进行后面的操作,否则请先安装IE9或更高版本。注意,IE9需要在WIN7或更高版本的系统上运行。
4、打开IE9,直接按F12键,会打开开发人员工具,在当前窗口的下半部分显示:
5、点击“网络”,再点击“开始捕获”按钮,进入捕获状态,此时“开始捕获”按钮会变成“停止捕获”状态:
怎么样下载优酷和土豆等网站上的视频文件?
6、切换到“开始捕获”状态后,将音视频网站的网址复制到IE地址栏中打开,或刷新当前音视频网页面。注意哦,打开捕获后需要重新打开或刷新当前页面哦,要不然不会捕获到资源的;
7、开始正常捕获后,可发现下面列表中会有很多的元素开始在增加。在捕获窗口中,两次单击字段标题栏中的“已接收”或“已花费”按钮,这样就以“已接收”或“已花费”降序排序,我们再按键盘上的Home键跳到最顶部:
怎么样下载优酷和土豆等网站上的视频文件?
8、等缓冲完毕后,我们可以发现最上面的资源是以M为单位的显示,一般这种以M为单位的就是我们所要的音、视频文件了。如上图中有两个以M为单位的视频资源被捕获到。此时我们可以右击这些资源,从弹出的菜单中选择“复制URL”:
怎么样下载优酷和土豆等网站上的视频文件?
9、当点击“复制URL”时,迅雷监视会自动监视到刚才复制到的URL,迅雷会自动弹出下载窗口,直接点击“继续”下载即可:
怎么样下载优酷和土豆等网站上的视频文件?
10、查看迅雷的“正在下载”,我们需要的资源正在被下载:
怎么样下载优酷和土豆等网站上的视频文件?
END
注意事项
当没有捕获到资源时,应该刷新当前页,再等缓冲完毕;
本方法介绍的是在win7下用IE9的开发工具来捕获视频下载的。
④ 怎样避开豆瓣对爬虫的封锁,从而抓取豆瓣上电影内容
你可以用前嗅爬虫采集豆瓣的影评,我之前用的,还可以过滤只采集评分在6分以上的所有影评,非常强大,而且他们跟数据库对接,采集完数据后,直接入库,导出excel表。很省心。
⑤ python怎么爬取最受欢迎的电影数据
在开发者工具中观察到该请求的Status Code是302,Response Headers中Location是该预告片的真正地址(该地址是时间的函数,不唯一! 但测试表明不同时间生成的不同的地址都能下载该预告片!
⑥ 怎样解析出HTML标签中的数据,也就是说提取数据,我做了一个爬虫,爬取豆瓣前250的电影。
用的是什么语言?一般通用的可以用正则表达式解析,不过会麻烦一点。
如果用nodejs,可以用cheerio,类似jquery的用法。
⑦ 如何抓取豆瓣上的电影
在豆瓣电影搜索框里输上名字,点搜索以后出来的页面右侧会出来“豆瓣电影还没有,我来添加”,然后就填名字就行了 没有imbd编号也没事,填完了以后会有审核,几天之后会豆邮通知你是否添加成功
⑧ 如何爬取电影天堂的最新电影
爬取?这个意思是要下载或者云盘嘛😂😂应该可以在线观看的吧 其实我有的 你可以先去搜一搜啦也可以来问我
⑨ python爬虫抓取电影top20排名怎么写
初步接触python爬虫(其实python也是才起步),发现一段代码研究了一下,觉得还比较有用处,Mark下。
上代码:
#!/usr/bin/python#coding=utf-8#Author: Andrew_liu#mender:cy"""
一个简单的Python爬虫, 用于抓取豆瓣电影Top前100的电影的名称
Anthor: Andrew_liu
mender:cy
Version: 0.0.2
Date: 2017-03-02
Language: Python2.7.12
Editor: JetBrains PyCharm 4.5.4
"""import stringimport reimport urllib2import timeclass DouBanSpider(object) :
"""类的简要说明
主要用于抓取豆瓣Top100的电影名称
Attributes:
page: 用于表示当前所处的抓取页面
cur_url: 用于表示当前争取抓取页面的url
datas: 存储处理好的抓取到的电影名称
_top_num: 用于记录当前的top号码
"""
def __init__(self):
self.page = 1
self.cur_url = "h0?start={page}&filter=&type="
self.datas = []
self._top_num = 1
print u"豆瓣电影爬虫准备就绪, 准备爬取数据..."
def get_page(self, cur_page):
"""
根据当前页码爬取网页HTML
Args:
cur_page: 表示当前所抓取的网站页码
Returns:
返回抓取到整个页面的HTML(unicode编码)
Raises:
URLError:url引发的异常
"""
url = self.cur_url try:
my_page = urllib2.urlopen(url.format(page=(cur_page - 1) * 25)).read().decode("utf-8") except urllib2.URLError, e: if hasattr(e, "code"): print "The server couldn't fulfill the request."
print "Error code: %s" % e.code elif hasattr(e, "reason"): print "We failed to reach a server. Please check your url and read the Reason"
print "Reason: %s" % e.reason return my_page def find_title(self, my_page):
"""
通过返回的整个网页HTML, 正则匹配前100的电影名称
Args:
my_page: 传入页面的HTML文本用于正则匹配
"""
temp_data = []
movie_items = re.findall(r'<span.*?class="title">(.*?)</span>', my_page, re.S) for index, item in enumerate(movie_items): if item.find(" ") == -1:
temp_data.append("Top" + str(self._top_num) + " " + item)
self._top_num += 1
self.datas.extend(temp_data) def start_spider(self):
"""
爬虫入口, 并控制爬虫抓取页面的范围
"""
while self.page <= 4:
my_page = self.get_page(self.page)
self.find_title(my_page)
self.page += 1def main():
print u"""
###############################
一个简单的豆瓣电影前100爬虫
Author: Andrew_liu
mender: cy
Version: 0.0.2
Date: 2017-03-02
###############################
"""
my_spider = DouBanSpider()
my_spider.start_spider()
fobj = open('/data/moxiaokai/HelloWorld/cyTest/blogcode/top_move.txt', 'w+') for item in my_spider.datas: print item
fobj.write(item.encode("utf-8")+'
')
time.sleep(0.1) print u"豆瓣爬虫爬取完成"if __name__ == '__main__':
main()
运行结果: