下载 百度贴吧-动漫壁纸吧 所有图片

定义item

Spider

spider 只需要得到图片的url,必须以列表的形式给管道处理

class PictureSpiderSpider(scrapy.Spider):
name = 'picture_spider'
allowed_domains = ['tieba.baidu.com']
start_urls = ['https://tieba.baidu.com/f?kw=%E5%8A%A8%E6%BC%AB%E5%A3%81%E7%BA%B8'] def parse(self, response): # 贴吧中一页帖子的ID和标题
theme_urls = re.findall(r'<a rel="noreferrer" href="/p/(\d+)" title="(.*?)" target="_blank" class="j_th_tit ">',
response.text, re.S) for theme in theme_urls:
# 帖子的url
theme_url = 'https://tieba.baidu.com/p/' + theme[0]
# 进入各个帖子
yield scrapy.Request(url=theme_url, callback=self.parse_theme) # 贴吧下一页的url
next_url = re.findall(
r'<a href="//tieba.baidu.com/f\?kw=%E5%8A%A8%E6%BC%AB%E5%A3%81%E7%BA%B8&ie=utf-8&pn=(\d+)" class="next pagination-item " >下一页&gt;</a>',
response.text, re.S)
if next_url:
next_url = self.start_urls[0] + '&pn=' + next_url[0]
yield scrapy.Request(url=next_url) # 下载每个帖子里的所有图片
def parse_theme(self, response):
item = PostBarItem()
# 每个贴子一页图片的缩略图的url
pic_ids = response.xpath('//img[@class="BDE_Image"]/@src').extract()
# 用列表来装图片的url
item['pic_urls'] = [] for pic_url in pic_ids:
# 取出每张图片的名称
item['pic_name'] = pic_url.split('/')[-1]
# 图片URL
url = 'http://imgsrc.baidu.com/forum/pic/item/' + item['pic_name']
# 将url添加进列表
item['pic_urls'].append(url) # 将item交给pipelines下载
yield item # 下完一页图片后继续下一页
next_url = response.xpath('//a[contains(text(),"下一页")]/@href').extract_first()
if next_url:
yield scrapy.Request('https://tieba.baidu.com' + next_url, callback=self.parse_theme)

ImagesPipeline

  • from scrapy.pipelines.images import ImagesPipeline
  • 继承ImagesPipeline,重写get_media_requests()和file_path()方法
from scrapy.pipelines.images import ImagesPipeline
import scrapy class PostBarPipeline(ImagesPipeline):
# 需要headers的网站,再使用
headers = {
'User-Agent': '',
'Referer': '',
} def get_media_requests(self, item, info):
for pic_url in item['pic_urls']:
# 为每个url生成一个Request
yield scrapy.Request(pic_url)
# 需要请求头的时候,添加headers参数
# yield scrapy.Request(pic_url, headers=self.headers) def file_path(self, request, response=None, info=None):
# 重命名(包含后缀名),若不重写这函数,图片名为哈希
pic_path = request.url.split('/')[-1]
return pic_path

settings文件

  • 激活管道

  • 设置图片保存地址

运行结果

使用 Scrapy 的 ImagesPipeline 下载图片的更多相关文章

  1. Scrapy框架学习 - 使用内置的ImagesPipeline下载图片

    需求分析需求:爬取斗鱼主播图片,并下载到本地 思路: 使用Fiddler抓包工具,抓取斗鱼手机APP中的接口使用Scrapy框架的ImagesPipeline实现图片下载ImagesPipeline实 ...

  2. 使用Scrapy自带的ImagesPipeline下载图片,并对其进行分类。

    ImagesPipeline是scrapy自带的类,用来处理图片(爬取时将图片下载到本地)用的. 优势: 将下载图片转换成通用的JPG和RGB格式 避免重复下载 缩略图生成 图片大小过滤 异步下载 . ...

  3. Scrapy爬取美女图片续集 (原创)

    上一篇咱们讲解了Scrapy的工作机制和如何使用Scrapy爬取美女图片,而今天接着讲解Scrapy爬取美女图片,不过采取了不同的方式和代码实现,对Scrapy的功能进行更深入的运用.(我的新书< ...

  4. 用Scrapy爬虫下载图片(豆瓣电影图片)

    用Scrapy爬虫的安装和入门教程,这里有,这篇链接的博客也是我这篇博客的基础. 其实我完全可以直接在上面那篇博客中的代码中直接加入我要下载图片的部分代码的,但是由于上述博客中的代码已运行,已爬到快九 ...

  5. scrapy批量下载图片

    # -*- coding: utf-8 -*- import scrapy from rihan.items import RihanItem class RihanspiderSpider(scra ...

  6. scrapy下载图片到自己的目录,创建缩略图,存储入库

    环境和工具:python2.7,scrapy 实验网站:http://www.27270.com/tag/333.html  爬去所有兔女郎图片,下面的推荐需要过滤 逻辑:分析网站信息,下载图片和入库 ...

  7. 通过scrapy内置的ImagePipeline下载图片到本地、并提取本地保存地址

    1.通过scrapy内置的ImagePipeline下载图片到本地 2.获取图片保存本地的地址 1.通过scrapy内置的ImagePipeline下载图片到本地 1)在settings.py中打开  ...

  8. Scrapy Item用法示例(保存item到MySQL数据库,MongoDB数据库,使用官方组件下载图片)

    需要学习的地方: 保存item到MySQL数据库,MongoDB数据库,下载图片 1.爬虫文件images.py # -*- coding: utf-8 -*- from scrapy import ...

  9. Scrapy——6 APP抓包—scrapy框架下载图片

    Scrapy——6 怎样进行APP抓包 scrapy框架抓取APP豆果美食数据 怎样用scrapy框架下载图片 怎样用scrapy框架去下载斗鱼APP的图片? Scrapy创建下载图片常见那些问题 怎 ...

随机推荐

  1. Leetcode题解 - DFS部分题目代码+思路(756、1034、1110、491、721、988)

    756. 金字塔转换矩阵 """ 学到的新知识: from collections import defaultditc可以帮我们初始化字典,不至于取到某个不存在的值的时 ...

  2. SQLserver还原失败(数据库正在使用,无法获得对数据库的独占访问权)

    问题描述: Sql server还原失败(数据库正在使用,无法获得对数据库的独占访问权) 数据库还原的时候还有其他进程连在上面,导致无法获得独占造成的. 这个问题的原因在于有用户连接了当前要做还原的数 ...

  3. Linux命令学习-cat命令

    Linux中,cat命令的全称是concatenate,主要用于显示文件内容. 查看centos系统版本 cat /etc/centos-release 查看文件 gogs.log 的内容 cat g ...

  4. 如果获取ruby的hash的v值?

    最近写ruby,用到hash,通过k去获取v值,有时候通过hash["k"]去获取可以获取到,有时候通过又获取不到,感觉一脸懵逼 仔细观察了下ruby的hash,有两种表现形式,所 ...

  5. 【每天一题】LeetCode 0028. 字符串匹配

    开源地址:https://github.com/jiauzhang/algorithms 题目描述 * https://leetcode-cn.com/problems/implement-strst ...

  6. Java EE 基本开发流程及数据库连接池 Druid

    一. 公司开发基本流程    a. 了解需求信息(比较模糊)        需求,不是别人告诉你的,是你自己挖掘出来的.        售前工程师(对行业知识了解):编程学不好,但懂点代码,对人的综合 ...

  7. vue如何循环渲染element-ui中table内容

    对于大多数前端开发者来说,vuejs+element-ui是开发后台管理系统过程中必不可少的技术框架.而后台管理系统中,最常见的形式就是表格和表单,以便用来增删改查. element-ui中table ...

  8. Python语法速查: 15. 常用数据结构

    返回目录 本篇索引 (1)array (2)bisect (3)deque (4)defaultdict (5)namedtuple (6)heapq (7)itertools (1)array ar ...

  9. (办公)记事本_通过xshell连接Liunx服务器

    任务:需要用xshell连接到Liunx服务器,装配环境,放置项目,查看日志,以后就要做,磁盘扩容,均衡负载,以及病毒错误. 第一步,先连接上: 1.xshell新建会话,刚才买的liunx的公网地址 ...

  10. win10配置linux子系统使用python绘图并显示--WSL使用GUI输出

    默认情况下,Win10的linux子系统(WSL)是只能使用命令行程序的.所有图形界面的程序都无法执行. 通过为Win10安装XWindows协议的终端应用,可以让Win10成为一台XWindow终端 ...