Scrapy爬虫(4)爬取豆瓣电影Top250图片

简介:   在用Python的urllib和BeautifulSoup写过了很多爬虫之后,本人决定尝试著名的Python爬虫框架——Scrapy.   本次分享将详细讲述如何利用Scrapy来下载豆瓣电影Top250, 主要解决的问题有:如何利用ImagesPipeline来下载图片如何对下载后的图片重命名,这是因为Scrapy默认用Hash值来保存文件,这并不是我们想要的  首先我们要爬取的豆瓣电影Top250网页截图如下:   网页的结构并不复杂,所以,我们决定把所有的250部电影的图片都下载下来。

  在用Python的urllib和BeautifulSoup写过了很多爬虫之后,本人决定尝试著名的Python爬虫框架——Scrapy.
  本次分享将详细讲述如何利用Scrapy来下载豆瓣电影Top250, 主要解决的问题有:

  • 如何利用ImagesPipeline来下载图片
  • 如何对下载后的图片重命名,这是因为Scrapy默认用Hash值来保存文件,这并不是我们想要的

  首先我们要爬取的豆瓣电影Top250网页截图如下:


豆瓣电影Top250网页

  网页的结构并不复杂,所以,我们决定把所有的250部电影的图片都下载下来。接下来,就开始我们的Scrapy之旅啦~~
  首先我们新建一个Scrapy项目,叫做doubanMovie.

scrapy startproject doubanMovie

该项目的文件树形结构如下:


文件树形结构

  修改items.py如下:

# -*- coding: utf-8 -*-
import scrapy

class DoubanmovieItem(scrapy.Item):
    # two items: url and name of image
    url = scrapy.Field()
    img_name = scrapy.Field()

这是我们用来存放图片的url和name的部分。

  接着,在spiders文件夹下,新建爬虫(Spider)文件:doubanMovieSpider.py, 文件代码如下:

import scrapy
from scrapy.spiders import Spider  
from scrapy.selector import Selector  
from doubanMovie.items import DoubanmovieItem

class movieSpider(Spider):
    # name of Spider  
    name = "movie"
    #start urls
    start_urls = ["https://movie.douban.com/top250"] 
    for i in range(1,10):
        start_urls.append("https://movie.douban.com/top250?start=%d&filter="%(25*i))

    #parse function
    def parse(self, response):

        item = DoubanmovieItem()
        sel = Selector(response)
        images = sel.xpath('//*[@id="content"]/div/div[1]/ol/li')

        item['url'] = [] 
        item['img_name'] = []
        # append the url and name of the image in item
        for image in images:
            # extract url and name of the image   
            site = image.xpath('div/div[1]/a/img/@src').extract_first()
            img_name = image.xpath('div/div[1]/a/img/@alt').extract_first()

            item['url'].append(site)
            item['img_name'].append(img_name)

        yield item

该部分代码主要利用xpath来提出网页中的电影图片的url和name,并添加到item中。
  为了能够对下载后的图片进行重命名,我们需要修改pipeline.py文件,代码如下:

# -*- coding: utf-8 -*-

from scrapy.pipelines.images import ImagesPipeline
from scrapy.http import Request 

class DoubanmoviePipeline(object):
    def process_item(self, item, spider):
        return item

class MyImagesPipeline(ImagesPipeline):
    # yield meta for file_path() function
    def get_media_requests(self, item, info): 
        for url in item['url']: 
            yield Request(url, meta={'item': item, 'index':item['url'].index(url)})

    # rename the image
    def file_path(self, request, response=None, info=None):
        item = request.meta['item']
        index = request.meta['index']

        image_name = item['img_name'][index]
        return 'full/%s.jpg' % (image_name)

在这儿我们添加了MyImagesPipeline类,主要目的是用来对下载后的图片进行重命名。
  最后一步,也是关键的一步,就是修改settings.py文件,将其中的ROBOTSTXT_OBEY设置为False, 这是为了防止爬虫被禁,并且添加以下代码:

USER_AGENT = "Mozilla/5.0 (X11; Linux x86_64; rv:10.0) Gecko/20100101 Firefox/10.0"

ITEM_PIPELINES {'doubanMovie.pipelines.DoubanmoviePipeline': 2,  
                'doubanMovie.pipelines.MyImagesPipeline':1 }

IMAGES_URLS_FIELD = 'url'
IMAGES_STORE = r'.'

在上面的代码中,我们设置了USER_AGENT, 这是为了在Linux系统中模拟浏览器的设置,读者可以根据自己的系统和浏览器来设置不同的USER_AGENT. 同时, 我们又加了ITEM_PIPELINES管道和图片的保存路径。

  一切就绪,我们就可以运行爬虫啦。切换到spiders文件夹下,输入scrapy list可以查看爬虫的名字,输入scrapy crawl movie即可运行爬虫。


查看和运行爬虫

  movie爬虫的运行结果如下:

爬虫运行结果

该爬虫下载了250个文件,用时约13秒,效率惊人啊!
  下载后的图片保存在当前文件夹(spiders)下的full文件夹下,我们来看一下里面的内容:

下载图片

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

  本项目的Github地址为 https://github.com/percent4/doubanMovieSpider, 欢迎大家访问哦~~

注意:本人现已开通两个微信公众号: 因为Python(微信号为:python_math)以及轻松学会Python爬虫(微信号为:easy_web_scrape), 欢迎大家关注哦~~

目录
相关文章
|
1月前
|
数据采集 存储 JSON
Python网络爬虫:Scrapy框架的实战应用与技巧分享
【10月更文挑战第27天】本文介绍了Python网络爬虫Scrapy框架的实战应用与技巧。首先讲解了如何创建Scrapy项目、定义爬虫、处理JSON响应、设置User-Agent和代理,以及存储爬取的数据。通过具体示例,帮助读者掌握Scrapy的核心功能和使用方法,提升数据采集效率。
89 6
|
2月前
|
数据采集 中间件 开发者
Scrapy爬虫框架-自定义中间件
Scrapy爬虫框架-自定义中间件
57 1
|
3月前
|
数据采集 JavaScript C#
C#图像爬虫实战:从Walmart网站下载图片
C#图像爬虫实战:从Walmart网站下载图片
|
2月前
|
数据采集 中间件 Python
Scrapy爬虫框架-通过Cookies模拟自动登录
Scrapy爬虫框架-通过Cookies模拟自动登录
106 0
|
4月前
|
数据采集 数据可视化 算法
【优秀python案例】基于Python的豆瓣电影TOP250爬虫与可视化设计与实现
本文设计并实现了一个基于Python的豆瓣电影TOP250爬虫与可视化系统,通过获取电影评分、评论并应用词云和饼图等可视化技术,为用户提供了电影评价的直观展示和深入分析。
615 3
【优秀python案例】基于Python的豆瓣电影TOP250爬虫与可视化设计与实现
|
2天前
|
数据采集 Java Scala
淘宝图片爬虫:Scala与Curl的高效集成
淘宝图片爬虫:Scala与Curl的高效集成
|
1月前
|
数据采集 前端开发 中间件
Python网络爬虫:Scrapy框架的实战应用与技巧分享
【10月更文挑战第26天】Python是一种强大的编程语言,在数据抓取和网络爬虫领域应用广泛。Scrapy作为高效灵活的爬虫框架,为开发者提供了强大的工具集。本文通过实战案例,详细解析Scrapy框架的应用与技巧,并附上示例代码。文章介绍了Scrapy的基本概念、创建项目、编写简单爬虫、高级特性和技巧等内容。
65 4
|
1月前
|
数据采集 中间件 API
在Scrapy爬虫中应用Crawlera进行反爬虫策略
在Scrapy爬虫中应用Crawlera进行反爬虫策略
|
2月前
|
数据采集 开发者
爬虫案例—抓取豆瓣电影的电影名称、评分、简介、评价人数
爬虫案例—抓取豆瓣电影的电影名称、评分、简介、评价人数
94 0
|
2月前
|
数据采集 中间件 数据挖掘
Scrapy 爬虫框架(一)
Scrapy 爬虫框架(一)
51 0