豆瓣电影图片爬取实例


本文摘自php中文网,作者PHP中文网,侵删。

一、先上效果

  

二、安装Scrapy和使用

  官方网址:。

  安装命令:pip install Scrapy

  安装完成,使用默认模板新建一个项目,命令:scrapy startproject xx

  

  上图很形象的说明了,scrapy的运行机制。具体各部分的含义和作用,可自行百度,这里不再赘述。我们一般,需要做的是以下步骤。

  1)配置settings,其他配置可根据自己的要求查看文档配置。

1

2

DEFAULT_REQUEST_HEADERS = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/60.0.3112.10 Safari/537.36'}

DOWNLOAD_TIMEOUT = 30IMAGES_STORE = 'Images'

  2)定义items类,相当于Model类。如:

1

2

3

4

class CnblogImageItem(scrapy.Item):

    image = scrapy.Field()

    imagePath = scrapy.Field()

    name = scrapy.Field()

  3)配置下载中间件,下载中间件的作用是自定义,怎么发请求。一般有处理代理的中间件、PhantomJs的中间件等。这里,我们只用到代理中间件。

1

2

3

4

5

6

class GaoxiaoSpiderMiddleware(object):def process_request(self, request, spider):if len(request.flags) > 0 and request.flags[0] == 'img':return None

        driver = webdriver.PhantomJS()# 设置全屏        driver.maximize_window()

        driver.get(request.url)

        content = driver.page_source

        driver.quit()return HtmlResponse(request.url, encoding='utf-8', body=content)class ProxyMiddleWare(object):def process_request(self, request, spider):

        request.meta['proxy'] = 'http://175.155.24.103:808'

  4)编写pipeline,作用是处理从Spider中传过来的item,保存excel、数据库、下载图片等。这里给出我的下载图片代码,使用的是官方的下载图片框架。

1

2

3

4

5

6

7

8

class CnblogImagesPipeline(ImagesPipeline):

    IMAGES_STORE = get_project_settings().get("IMAGES_STORE")def get_media_requests(self, item, info):

        image_url = item['image']if image_url != '':yield scrapy.Request(str(image_url), flags=['img'])def item_completed(self, result, item, info):

        image_path = [x["path"] for ok, x in result if ok]if image_path:# 重命名if item['name'] != None and item['name'] != '':

                ext = os.path.splitext(image_path[0])[1]

                os.rename(self.IMAGES_STORE + '/' +  image_path[0], self.IMAGES_STORE + '/' + item['name'] + ext)

            item["imagePath"] = image_pathelse:

            item['imagePath'] = ''return item

  5)编写自己的Spider类,Spider的作用是配置一些信息、起始url请求、处理响应数据。这里的下载中间件配置、pipeline,可以放在settings文件中。这里我放在,各自的Spider中,因为项目中包含多个Spider,相互之间用的下载中间件不同,因此分开配置了。

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

# coding=utf-8import sysimport scrapyimport gaoxiao.itemsimport json

reload(sys)

sys.setdefaultencoding('utf-8')class doubanSpider(scrapy.Spider):

    name = 'douban'allowed_domains = ['movie.douban.com']

    baseUrl = ''start = 0

    start_urls = [baseUrl + str(start)]

    custom_settings = {'DOWNLOADER_MIDDLEWARES': {'gaoxiao.middlewares.ProxyMiddleWare': 1,#             'gaoxiao.middlewares.GaoxiaoSpiderMiddleware': 544        },'ITEM_PIPELINES': {'gaoxiao.pipelines.CnblogImagesPipeline': 1,

        }

    }def parse(self, response):

        data = json.loads(response.text)['subjects']for i in data:

            item = gaoxiao.items.CnblogImageItem()if i['cover'] != '':

                item['image'] = i['cover']

                item['name'] = i['title']else:

                item['image'] = ''yield itemif self.start < 400:

            self.start += 20yield scrapy.Request(self.baseUrl + str(self.start), callback=self.parse)

以上就是豆瓣电影图片爬取实例的详细内容,更多文章请关注木庄网络博客!!

相关阅读 >>

一分钟学会用Python的第三方库openpyxl画真散点图

Python如何多行注释

Python如何安装whl文件

Python返回真假值(true or false)的小技巧

Python开发工程师是做什么的

centos 6.5下安装Python 3.5.2

怎么用Python建数学模型

Python怎么连接数字和字符串

excel转sqlite在Python下实现的方法介绍

Python中复数怎么表示

更多相关阅读请进入《Python》频道 >>




打赏

取消

感谢您的支持,我会继续努力的!

扫码支持
扫码打赏,您说多少就多少

打开支付宝扫一扫,即可进行扫码打赏哦

分享从这里开始,精彩与您同在

评论

管理员已关闭评论功能...