Scrapy爬取图片资源

scrapy爬取图片案例


练习了爬取文字信息的案例,接着练练爬取图片。scrapy的功能真心强大。

目的:爬取斗鱼美女主播的图片
网址:斗鱼主播信息

这是网址的数据内容:可以看到是json格式的数据
这里写图片描述

创建工程和spider

scrapy startproject Douyu
scrapy genspider dyspider

编写item

import scrapy

class DouyuItem(scrapy.Item):
    # 主播名
    nickname = scrapy.Field()
    # 图像链接
    imglink = scrapy.Field()
    pass

编写spiders

import scrapy
import json
from Douyu.items import DouyuItem

class DyspiderSpider(scrapy.Spider):
    name = 'dyspider'
    allowed_domains = ['douyucdn.cn']
    baseURL = "http://capi.douyucdn.cn/api/v1/getVerticalRoom?limit=20&offset="
    offset = 0
    start_urls = [baseURL + str(offset)]

    def parse(self, response):
        #json.loads把Json格式字符串解码转换成Python对象
        #从response.body中获取data字段中的数据
        data_list = json.loads(response.body.decode("utf-8"))['data']
        #如果data_list没有拿到数据,即数据爬取完毕
        if len(data_list) == 0:
            return

        #从data_list中拿nickname和vertical_src字段的数据
        for data in data_list:
            item = DouyuItem()
            item["nickname"] = data["nickname"]
            item["imglink"] = data["vertical_src"]
            yield item
        #开始拿之后的数据
        self.offset += 20
        yield scrapy.Request(self.baseURL + str(self.offset),callback = self.parse)
        pass

编写pipelines

import os
import scrapy
from scrapy.pipelines.images import ImagesPipeline
from Douyu.settings import IMAGES_STORE as img_store

#继承ImagesPipeline类,对图片进行处理
class DouyuPipeline(ImagesPipeline):

    def get_media_requests(self,item,info):
        imglink = item["imglink"]
        yield scrapy.Request(imglink)

    def item_completed(self, results, item, info):
        #对获取的图片重命名
        imagepath = [x["path"] for ok,x in results if ok]
        os.rename(img_store + imagepath[0],img_store + item["nickname"] + ".jpg")
        return item

编写setting

BOT_NAME = 'Douyu'

SPIDER_MODULES = ['Douyu.spiders']
NEWSPIDER_MODULE = 'Douyu.spiders'
#图片存储位置字段,image.py文件的from_settings方法会获取该字
#段,该字段表明下载的图片存储的位置
IMAGES_STORE = "E:/ScrapyFile/Douyu/data/"

#UA标识,模拟手机端发送的请求
USER_AGENT = 'Mozilla/5.0 (Linux; U; Android 6.0.1; zh-cn; Redmi 3X Build/MMB29M) AppleWebKit/537.36 (KHTML, like Gecko)Version/4.0 Chrome/37.0.0.0 MQQBrowser/7.2 Mobile Safari/537.36'
#关闭robots协议
ROBOTSTXT_OBEY = False

ITEM_PIPELINES = {
   'Douyu.pipelines.DouyuPipeline': 300,
}

执行spider

scrapy crawl myspider
。。。。。。。。。。

然后好多美女图片就被爬取出来了。~O(∩_∩)O哈哈~

总结

这两天对scrapy框架的学习,我收获很多。scrapy对数据的抓取功能实在是太强大了,而且只要配置好环境它的使用其实是非常简单的。

第一步:创建工程 scrapy startproject XXX
第二步:创建spider scrapy genspider XXX “http://XXX.XX
第三步:编写爬虫文件
第四步:编写管道文件
第五步:编写setting文件
第六步:执行spider scrapy crawl XXX

只需要这6步,就能完成对数据的爬取了。当然寻找合适的xpath正则表达式也很重要,这就看个人对网页结构掌握的熟练度了。

最后附上一张结果图,= ̄ω ̄=

结果图

每天多进步一点,就离梦想更近一点~加油!!

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值