豆瓣电影top250url地址:https://movie.douban.com/top250?start=
一. 明确获取数据信息(item)
分析页面上的内容可以获取到的数据信息是电影的名称、导演、演员、简介、上映时间、评分、参与评分人数、图片的url地址.在scrapy的item项目中建立生成对应的。
star = scrapy.Field()# 电影评分
quote = scrapy.Field()# 电影简介
picture = scrapy.Field()# 电影图片url
jude = scrapy.Field()# 电影参与评论人数
dect = scrapy.Field()# 电影导演 演员
time = scrapy.Field()# 电影上映时间
二. 提取网页数据信息(spider)
利用xpath来提取网页上信息,并在爬虫项目中进行处理提取可用的数据.
def parse(self, response):
item = Top250Item()
movie = response.xpath("//div[@class = 'item']")
# 迭代获取每一块的信息
for each in movie:
# 电影标题
item['title'] = each.xpath(".//div[@class ='info']//span[@class ='title'][1]/text()").extract()[0]
# 该标签含有大量信息包括导演 演员 上映时间...
Each = each.xpath(".//div[@class ='info']//div[@class ='bd']/p/text()").extract()
# 导演 演员等
bd = Each[0]
item['dect'] = "".join(bd).replace("\n", "").replace("\xa0", "").strip()
# 电影上映时间
time = Each[1]
item['time'] = "".join(time).replace("\n", "").replace("\xa0", "").strip().split("/")[0]
# 评分
item['star'] = each.xpath(".//div[@class ='info']//div[@class ='star']/span[@class ='rating_num']/text()").extract()[0]
# 电影信息简介
quote = each.xpath(".//div[@class ='info']//p[@class = 'quote']/span/text()").extract()
if len(quote) != 0:
item['quote'] = quote[0]
else:
item['quote'] = "暂无介绍"
# 图片的url地址
item['picture'] = each.xpath(".//div[@class ='pic']//a/img/@src").extract()[0]
# 参与电影评论人数
juede = each.xpath(".//div[@class ='info']//div[@class ='star']/span[4]/text()").extract()[0]
item['jude'] = juede[:-3]
yield item
根据需求访问所有的url地址,寻找规则。
class QSpider(scrapy.Spider):
name = 'q'#爬虫项目名称
allowed_domains = ['movie.douban.com']#
offset = 0
url = "https://movie.douban.com/top250?start="
start_urls = {
url + str(offset),
}# 根据规律创建访问的url
def parse(self, response):
"""
中间省略部分是上方处理提取item数据的代码
"""
if self.offset < 225:
self.offset += 25
yield scrapy.Request(self.url + str(self.offset), callback=self.parse)
#访问豆瓣电影top250所有的页面
三. 保存并下载数据(pipelines)
将网页上提取下载的数据以excel文件形式保存,并下载电影图片.(pipelines)
def __init__(self):
# 创建excel,填写表头
self.wb = Workbook()
self.ws = self.wb.active
# 设置表头
self.ws.append(['电影名称','导演和演员','年份','评分','人数','简介'])
def process_item(self, item, spider):
line=[item['title'],item['dect'],
item['time'],item['star'],item['jude'], item['quote']]
self.ws.append(line)
self.wb.save('电影天堂top250.xlsx')
# 保存电影图片
byte = urllib.request.urlopen(item['picture'])
title =item['title']
if not os.path.exists("图片"):
os.makedirs("图片")
# 代开一个文件,准备以二进制写入文件
fp = open("图片"+'/'+title+".jpg","wb")
fp.write(byte.read())
fp.flush()
fp.close()
return item
其设置用户代理和ip代理都在settings文件中这里就不贴代码了,相关其余操作请自行百度.
一切就绪我们就可以开始运行了,我们可以知道该爬虫下载了250个文件,用时为38秒(在settings中设置了DOWNLOAD_DELAY = 3)可见下载速度很快.
让我们来看看下载的内容:
Surprise!Wonderful! 里面有没有你喜欢的电影呢?
注意:欢迎大家指出意见,相互学习哦~