赞
踩
完成豆瓣电影Top250网站(https://movie.douban.com/top250)推荐电影名单的爬取 。
可见每页显示25部电影,总共10页.
chrome按F12:
所以用正则表达式表示为
<span.*?class="title">(.*?)</span>
但符合这样的有两行:
<span class="title">肖申克的救赎</span>
<span class="title"> / The Shawshank Redemption</span>
我们需要提取的是第一行,所以我们还要在代码中过滤掉:
/ The Shawshank Redemption
注释详细,应该好懂..
#coding:utf8
import urllib2
import re
__author__ = 'binchasing'
'''
爬取豆瓣电影Top250 网站:https://movie.douban.com/top250
'''
class douban_movie():
def __init__(self):
self.my_url = r'https://movie.douban.com/top250' #豆瓣Top250首页
self.top_num = 1 #记录即将输出的电影编号
self.total_page_num = 10 #网站每页记录25部电影,所有250部电影总共有10页
'''
get_page_html(self,page_index)返回相应页码的网页html内容
page_index:页码编号,0表示第一页
contents:返回相应网页的html
'''
def get_page_html(self,page_index):
cur_url = self.my_url + '?start=' + str(25*page_index) + '&filter=' #第(page_index+1)页的url
request = urllib2.Request(cur_url) #创建请求
response = urllib2.urlopen(request) #得到响应
contents = response.read()
return contents
'''
print_movie(self,contents) 打印对应网页中的电影名称
contents:网页的html
'''
def print_movie(self,contents):
pattern = re.compile(r'<span.*?class="title">(.*?)</span>',re.S) #构造正则表达式
movie_items = re.findall(pattern,contents) #找出所有匹配项
for ind, item in enumerate(movie_items) :
if item.find(" ") == -1 : #排除不满足条件的匹配项
print ("Top" + str(self.top_num) + " " + item).decode("utf-8") #utf-8转为unicode输出
self.top_num = self.top_num + 1 #电影编号自增
'''
start_spider(self)启动爬虫
'''
def start_spider(self):
index = 0
while index < self.total_page_num: #打印所有页
contents = self.get_page_html(index)
self.print_movie(contents)
index = index + 1
def main():
print '''
------------------《豆瓣Top250榜单》------------------
'''
douban = douban_movie()
douban.start_spider()
if __name__ == '__main__':
main()

………
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。