scrapy框架来爬取壁纸网站并将图片下载到本地文件中

首先需要确定要爬取的内容,所以第一步就应该是要确定要爬的字段:

  首先去items中确定要爬的内容

class MeizhuoItem(scrapy.Item):
    # define the fields for your item here like:
    # name = scrapy.Field()
    # 图集的标题
    title = scrapy.Field()
    # 图片的url,需要来进行图片的抓取
    url = scrapy.Field()
    pass

在确定完要爬的字段之后,就是分析网站页面的请求了,找到自己需要的内容,我这里爬的是http://www.win4000.com里面的壁纸照片

   首先我们在分析的时候,点到一个图集里面可以发现,真正的照片都在这里面,所以我们分成两步走

    1、找到所有图集的url

    2、根据指定的图集的url来将里面所有照片的URL找出来

      但是找出照片的url之后又面临一个问题,那就是那个url并不是我们真正想要的,它在最后还加了一层修饰,所以我们还要对这个url进一步的操作

# -*- coding: utf-8 -*-
import scrapy
from scrapy.selector import Selector
from fake_useragent import UserAgent
from meizhuo.items import MeizhuoItem

headers = {
    ‘user-agent‘: UserAgent(verify_ssl=False).chrome
}

class MzSpider(scrapy.Spider):
    name = ‘mz‘
    allowed_domains = [‘www.win4000.com‘]
    start_urls = [
        ‘http://www.win4000.com/wallpaper_2285_0_0_1.html‘,
        ‘http://www.win4000.com/wallpaper_204_0_0_1.html‘
    ]

    def parse(self, response):
        sel = Selector(response)
        list = sel.xpath(‘//*[@class="list_cont Left_list_cont"]/div/div/div/ul/li/a‘)

        for img in list:
            # 这个是每个图集得到的url
            url = img.xpath(‘@href‘).extract_first()
            title = img.xpath(‘@title‘).extract_first()
            # 对我的每一个URL进行解析
            yield scrapy.Request(url, callback=self.get_all_img, meta={‘title‘: title})
        # 对于下一页进行定位,如果存在就进行跳转
        next_url = sel.xpath(‘//*[@class="next"]/@href‘).extract_first()
        if next_url is not None:
            yield scrapy.Request(next_url, callback=self.parse)

    def get_all_img(self, response):
        item = MeizhuoItem()

        container = []
        sel = Selector(response)
        # 这个是所有照片的所有的总共的页数
        img_list = sel.xpath(‘//*[@class="scroll-img-cont"]/ul‘)
        for img in img_list:
            img_url = img.xpath(‘li/a/img/@data-original‘).extract()
            for url in img_url:
                # 这个url还是需要经过处理的,所以要循环出来挨个进行修改
                cmp_url = url.split(‘_‘)[0] + ‘.jpg‘
                container.append(cmp_url)
            item[‘url‘] = container
            item[‘title‘] = response.meta[‘title‘]
            # print(container)

            yield item
            container.clear()

当我们将图集中的所有照片的url找出来之后要做的,就是将图片下载到本地中,所以我们就在pipelines中配置了相关的下载路径的配置,然后利用抓取到的图片的url和rqeuests的模块的配合使用,来获取到图片真正的二进制的数据,然后将这些二进制数据,写入到你配置的指定的文件夹中,

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

# Define your item pipelines here
#
# Don‘t forget to add your pipeline to the ITEM_PIPELINES setting
# See: https://docs.scrapy.org/en/latest/topics/item-pipeline.html
import os
import requests
from meizhuo.settings import IMAGES_STORE
from fake_useragent import UserAgent

headers = {
    ‘user-agent‘: UserAgent(verify_ssl=False).chrome
}

class MeizhuoPipeline(object):
    def process_item(self, item, spider):
        dir_path = IMAGES_STORE
        title = item[‘title‘]
        img_list = item[‘url‘]
        print(title, img_list)
        """
        1、我要创建指定的路径
        2、然后我要利用requests模块获取到那一个url的二进制数据保存进去
        """
        if not os.path.exists(IMAGES_STORE):
            os.mkdir(IMAGES_STORE)

        # 如果这个顶头文件夹存在的话
        collection_url = os.path.join(IMAGES_STORE, title)
        print(‘111‘, collection_url)
        if not os.path.exists(collection_url):
            os.mkdir(collection_url)
        for url_list in range(len(img_list)):
            cmp_url = os.path.join(collection_url, img_list[url_list])

            # print(cmp_url)
            file_path = os.path.join(collection_url, title) + str(url_list) + ‘.jpg‘
            print(file_path)
            with open(file_path, ‘wb‘) as fp:
                res = requests.get(img_list[url_list], headers=headers).content
                # print(img_list[url_list])
                fp.write(res)
                print(‘insert successfully!!!‘)

最后就是要讲一下,在settings中的相关配置:

BOT_NAME = ‘meizhuo‘

SPIDER_MODULES = [‘meizhuo.spiders‘]
NEWSPIDER_MODULE = ‘meizhuo.spiders‘
ROBOTSTXT_OBEY = True
ITEM_PIPELINES = {
   ‘meizhuo.pipelines.MeizhuoPipeline‘: 300,
}
# 下载的顶头路径
IMAGES_STORE = ‘/Users/mac/Documents/girl‘
# 下载延迟
DOWNLOAD_DELAY = 0.3

  

原文地址:https://www.cnblogs.com/tulintao/p/11594130.html

时间: 2024-08-13 08:12:07

scrapy框架来爬取壁纸网站并将图片下载到本地文件中的相关文章

python爬取视频网站m3u8视频,下载.ts后缀文件,合并成整视频

最近发现一些网站,可以解析各大视频网站的vip.仔细想了想,这也算是爬虫呀,爬的是视频数据. 首先选取一个视频网站,我选的是 影视大全 ,然后选择上映不久的电影 "一出好戏" . 分析页面 我用的是chrome浏览器,F12进入查看.选择NetWork的Doc,发现主体部分的数据是从这个网站获取的. 在地址栏输入这个链接,跳转到了视频来源的播放页面. 当然,在这个页面就可以直接观看视频了,但是我们要把视频下载下来. 寻找视频文件 仍然是之前那个页面,在Other中,我们发现了一些奇怪的

Scrapy框架——CrawlSpider爬取某热线网站

CrawlSpider Scrapy框架中分两类爬虫,Spider类和CrawlSpider类. 它是Spider的派生类,Spider类的设计原则是只爬取start_url列表中的网页, 而CrawlSpider类定义了一些规则(rule)来提供跟进link的方便的机制,从爬取的网页中获取link并继续爬取的工作更适合. 创建项目指令: scrapy startproject sumPro CrawlSpider创建: scrapy genspider -t crawl sun "http:/

使用scrapy框架爬取蜂鸟论坛的摄影图片并下载到本地

目标网站:http://bbs.fengniao.com/使用框架:scrapy 因为有很多模块的方法都还不是很熟悉,所有本次爬虫有很多代码都用得比较笨,希望各位读者能给处意见 首先创建好爬虫项目,并使用crawl模板创建爬虫文件 通过观察论坛的规律得出,很多贴子的页数往往大于一页,那么要将贴子里各页的图片下载到同一文件夹内,并且不能重名,就是获取到当前的页码数,已页码数+自然数的方式命令文件.发现scrapy自动爬虫会爬很多重复的页面,度娘后得出两个解决方法,第一个是用布隆过滤器,布隆过滤器相

Scrapy实战:使用scrapy再再次爬取干货集中营的妹子图片

需要学习的知识: 1.获取到的json数据如何处理 2.保存到json文件 3.保存到MongoDB数据库 4.下载项目图片(含缩略图) 1.创建项目 scrapy startproject gank 2.生成项目爬虫文件 scrapy genspider gank_img gank.io 注意:项目名称gank不能跟项目爬虫文件名gank_img一致 3.gank_img.py文件 import json import scrapy from gank.items import GankIte

scrapy爬虫框架(四)-爬取多个网页

scrapy爬虫框架(四) 爬取多个网页 思路:通过判断句子控网站中,下一页是否还有a标签来获取网址,拼接后继续爬取,最终写入json文件中. juziSpider.py # -*- coding: utf-8 -*- import scrapy from juzi.items import JuziItem class JuzispiderSpider(scrapy.Spider): name = 'juziSpider' allowed_domains = ['www.juzikong.co

python爬取某个网站的图片并保存到本地

python爬取某个网站的图片并保存到本地 #coding:utf-8 import urllib import re import sys reload(sys) sys.setdefaultencoding('gb2312') #获取整个页面的数据 def getHtml (url): page = urllib.urlopen(url) html = page.read() return html #保存图片到本地 def getImg(html): reg = r'src="(.+?\.

python爬虫----(6. scrapy框架,抓取亚马逊数据)

利用xpath()分析抓取数据还是比较简单的,只是网址的跳转和递归等比较麻烦.耽误了好久,还是豆瓣好呀,URL那么的规范.唉,亚马逊URL乱七八糟的.... 可能对url理解还不够. amazon ├── amazon │   ├── __init__.py │   ├── __init__.pyc │   ├── items.py │   ├── items.pyc │   ├── msic │   │   ├── __init__.py │   │   └── pad_urls.py │  

webmagic爬取渲染网站

最近突然得知之后的工作有很多数据采集的任务,有朋友推荐webmagic这个项目,就上手玩了下.发现这个爬虫项目还是挺好用,爬取静态网站几乎不用自己写什么代码(当然是小型爬虫了~~|).好了,废话少说,以此随笔记录一下渲染网页的爬取过程首先找到一个js渲染的网站,这里直接拿了学习文档里面给的一个网址,http://angularjs.cn/ 打开网页是这样的 查看源码是这样的 源码这么少,不用说肯定是渲染出来的了,随便搜了一条记录,果然源码里面找不到结果 那就开始解析网址了,从浏览器开发者工具里面

python爬虫--爬取某网站电影下载地址

前言:因为自己还是python世界的一名小学生,还有很多路要走,所以本文以目的为向导,达到目的即可,对于那些我自己都没弄懂的原理,不做去做过多解释,以免误人子弟,大家可以网上搜索. 友情提示:本代码用到的网址仅供交流学习使用,如有不妥,请联系删除. 背景:自己有台电脑要给老爸用,老爷子喜欢看一些大片,但是家里网络环境不好,就想批量下载一些存到电脑里.但是目前大部分的网站都是这样的, 需要一个个地点进去,才能看到下载地址 如果我要下载100部电影,那肯定手都要点断了,于是便想把这些地址给爬取出来,