豆瓣电影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)可见下载速度很快.

豆瓣电影数据分析直方图上面的数值如何显示_scrapy

让我们来看看下载的内容:

豆瓣电影数据分析直方图上面的数值如何显示_scrapy_02


豆瓣电影数据分析直方图上面的数值如何显示_图片下载_03


豆瓣电影数据分析直方图上面的数值如何显示_scrapy_04

Surprise!Wonderful! 里面有没有你喜欢的电影呢?

注意:欢迎大家指出意见,相互学习哦~