【Python】Scrapy抓取多玩Gif图片

文件准备:

  • 安装python2.7.5
  • 安装pywin32
  • 安装py-setuptool
  • 要用到的文件打包下载:点击下载


安装Scrapy:

  • 配置环境变量:将【C:\Python27\】和【C:\Python27\Scripts\】加到系统变量Path中
  • 安装pip:打开CMD,执行   easy_install pip
  • 安装Scrapy:打开CMD,执行 pip install Scrapy


新建工程:

  • 在CMD中输入: scrapy  startproject  gif     新建一个名为gif的工程文件夹

  • spiders:       存放自己写的 爬虫规则文件
  • items.py:      自定义获取数据的结构
  • pipelines.py:自定义处理获取到的item结构数据
  • settings.py:  设置和启动pipelines


Scrapy工作流程原理分析:


自定义获取数据的结构:(修改items.py文件)

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

import scrapy

#自定义要获取的数据Item的结构
class GifItem(scrapy.Item):
    #自定义数据item的结构,这里的item只有gif_url一项
    #要获取更多的数据,可以增加item的项
    gif_url = scrapy.Field()
    pass



编写自己爬虫文件:(在spiders里新建一个gif.py的文件)

#-*- coding: utf-8 -*-
#coding:UTF-8
from scrapy.contrib.spiders import CrawlSpider, Rule
from scrapy.contrib.linkextractors.sgml import SgmlLinkExtractor
from gif.items import GifItem


class GifSpider(CrawlSpider):

    #爬虫名字,唯一,用于区分以后新建的爬虫
    name = "gif"

    #可选,定义爬取区域,超出区域的链接不爬取
    allowed_domains = ["duowan.com"]
    
    #定义开始爬取的页面A
    start_urls=["http://tu.duowan.com/scroll/100103.html"]
    
    #定义规则,在页面A中爬取符合规则的链接,并调用函数处理
    rules = [
        Rule(SgmlLinkExtractor(allow=('/scroll/\d*/\d*.html')),  callback = 'parse_gif', follow=True),
        Rule(SgmlLinkExtractor(allow=('/scroll/\d*.html')),  callback = 'parse_gif', follow=True),
        ]

    def parse_gif(self, response):
        #定义获取数据的结构
        urlItem = GifItem()
        
        #注意item是每个页面的数据集合,每个页面有一个item,搜集整理好交给Pipeline处理
        urlItem['gif_url'] = response.selector.xpath('//*[@id="picture-pageshow"]/div[1]/div[@class="pic-box"]/a/img/@src').extract()
        yield urlItem

编写Pipeline.py处理获取到的item数据:

#-*- coding: utf-8 -*-
#coding:UTF-8
import urllib
import urllib2
import time
import os  
import shutil
from scrapy.exceptions import DropItem
import pymongo

#Pineline用于处理获取到的item数据
class GifPipeline(object):

    #启动爬虫时执行,新建一个名为gaoxiao_gif的文件
    #创建一个名为gif_url的mongo数据库, 并创建一个集合my_collection
    #创建一个名为gif_url的txt文件
    def __init__(self):
        conn = pymongo.Connection('localhost', 27017)
        db = conn['gif_url']
        self.collection = db['gif_collection']

        self.f = open('url_gif.txt', 'wb')
        
        if os.path.exists('gaoxiao_gif'):  
            shutil.rmtree("gaoxiao_gif")  
        else:  
            os.mkdir("gaoxiao_gif")


    #爬虫启动时调用,处理获取到的item数据,注意item是每一个页面的数据集合
    def process_item(self, item, spider):
        #去除没用的数据
        if item['gif_url']:
            
            #遍历每个页面item集合里面的所有url
            #字符串判断,过滤所有.jpg和.png文件,只下载gif文件
            #将url插入mongo数据库
            #将url存放进txt,稍后可以用迅雷下载
            for i in item['gif_url']:
                if ".gif" in i:
                    self.f.write(i)
                    self.f.write('\r\n')

                    gif_url=[{"url":i}]
                    self.collection.insert(gif_url)
                
                    now = time.localtime(time.time())
                    fname = str(now)
                    urllib.urlretrieve(i, 'gaoxiao_gif/%s.gif' %fname)
        else:
            raise DropItem(item)
        return item


    #爬虫关闭时调用
    def close_spider(self, spider):
        print("Done")


设置Setting.py文件启动Pipeline功能:

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

BOT_NAME = 'gif'

SPIDER_MODULES = ['gif.spiders']
NEWSPIDER_MODULE = 'gif.spiders'


#启动对应的Pipeline,有多个Pipeline时,数字小的先执行
ITEM_PIPELINES={'gif.pipelines.GifPipeline': 1}


启动爬虫,下载gif

  • 打开CMD,CD到项目目录
  • 执行scrapy crawl  gif



  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 5
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值