边学边记(3):scrapy爬取gif图片

边学边记,记录遇到的坑达成的小目标 。

前篇爬取的是静态的图片这次是针对gif。其实无论静态动态用如下的方式都可以爬取。代码如下:(多玩写错了变成douwan)

items:

import scrapy


class DouwanItem(scrapy.Item):
    # define the fields for your item here like:
    # name = scrapy.Field()
    gif_url=scrapy.Field()   #gif地址
    gif_title=scrapy.Field()  #gif图片name

pipelines:

from scrapy.exceptions import DropItem
from urllib import request
#import os


class DouwanPipeline(object):
    def process_item(self, item, spider):       
        if item['gif_url']:       
            for (url,title) in zip(item['gif_url'],item['gif_title']):
                request.urlretrieve(url,'h:\\new\\gaoxiao_gif\\%s.gif'%title)   #提前建好的路径                    
        else:
            raise DropItem(item)
        return item

    def close_spider(self,spider):
        print("!!!!!!!已爬取完毕,nice work!!!!!!!!")

settings:

ROBOTSTXT_OBEY = True
DOWNLOAD_DELAY = 3
DEFAULT_REQUEST_HEADERS = {
   'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8',
   'Accept-Language': 'en',
   'Referer':'http://tu.duowan.com/m/bxgif',
   'User-Agent':'Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.132 Safari/537.36',
}
ITEM_PIPELINES = {
    'douwan.pipelines.DouwanPipeline': 300,
}
AUTOTHROTTLE_ENABLED = True
spider:

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

import scrapy
from douwan.items import DouwanItem

class DouwangifSpider(scrapy.Spider):
    name = 'douwangif'
    allowed_domains = ['duowan.com']
    start_urls = ['http://tu.duowan.com/m/bxgif']

    def parse(self, response):
        #item=DouwanItem()
        for url in response.xpath(".//li[@class='box']/a/@href").extract():
            yield scrapy.Request(url,callback=self.parse_yituliu)

    def parse_yituliu(self, response):
        #item=DouwanItem()
        for url_sec in response.xpath(".//div[@class='fr']/a[@class='picture-list']/@href").extract():
            yield scrapy.Request(url_sec,callback=self.parse_final)
    
    def parse_final(self, response):
        item=DouwanItem()
        item['gif_url']=response.xpath(".//div[@class='pic-box']/a/span/@data-img").extract()
        item['gif_title']=response.xpath(".//div[@class='pic-box']/p[@class='comment']/text()").extract()
        next_page=response.xpath(".//div[@class='rounded center']/div/a[2]/@href").extract()[0]
        yield scrapy.Request('http://tu.duowan.com'+next_page,callback=self.parse_final)
        yield item

爬取完了之后就是下面这效果


1101张gif有5个G


2月7日补充:

上面只是爬取了部分图片,往下拉之后会出来很多新的图片,网站动态加载的内容我是这样查找的

用的chrome浏览器,之前一直用360的现在发现玩爬虫还是chrome靠谱。

按F12出来后F5刷新下出来如下画面:


type是gif跟png的直接pass,其他点开进去之后没有得到什么信息,嗯,事实上也没什么有用的东西。XHR这页是空的,OK,这时可以往下拉网页直到出来新的图片之后F5刷新下会看到XHR里有了信息,就是下面这个


打开之后可以看到很多类似这样的网址,而这个就是新的图片的二级链接。(你可以随便点开个图片会发现网页格式)

"http:\/\/tu.duowan.com\/gallery\/136245.html\"
然后观察下offset=30会发现offset之后的数字标志页码,随便更改一个之后可以打开类似的网页,说明想法是正确的。接下来就是更改代码了。网上教程一大堆就不说了

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值