安装scrapy

pip install Scrapy

进入终端,切换到自己项目代码的工作空间下,执行

scrapy startproject baidu_pic_spider

生成如下工程文件:

images是自己创建的用于存放爬到的图片目录。

在spiders目录下创建baidu_pic_spider爬虫文件,search_word可改成自己需要的搜索词。

baidu_pic_spider.py

import scrapy, json
from scrapy.http import Request
from PicSpider.items import PicItem  # 导入itemclass PicSpider(scrapy.Spider):name = "pic_spider"allowed_domains = ["http://image.baidu.com/"]start_urls = ["http://image.baidu.com"]def parse(self, response):  # 定义解析函数search_word = '哈士奇'  # 查找词,可修改baidu_pic_url = "https://image.baidu.com/search/acjson?tn=resultjson_com&ipn=rj&ct=201326592&is=&fp=result&cl=2&lm=-1&ie=utf-8&oe=utf-8&adpicid=&st=-1&z=&ic=0&word={0}&s=&se=&tab=&width=&height=&face=0&istype=2&qc=&nc=1&fr=&pn=60&rn=30&gsm=3c&1507915209449=".format(search_word)  # 百度图片url# 将带关键词参数的url交给request函数解析,返回的response通过get_pic回调函数进一步分析yield Request(baidu_pic_url, meta={"search_word": search_word}, callback=self.get_pic, dont_filter=True)def get_pic(self, response):  # 从图片list中获取每个pic的信息item = PicItem()  # 实例化itemresponse_json = response.text  # 存储返回的json数据response_dict = json.loads(response_json)  # 转化为字典response_dict_data = response_dict['data']  # 图片的有效数据在data参数中for pic in response_dict_data:  # pic为每个图片的信息数据,dict类型if pic:item['search_word'] = response.meta['search_word']  # 搜索关键词赋值item['pic_url'] = [pic['middleURL']]  # 百度图片搜索结果url (setting中pic_url应该为数组形式)item['pic_name'] = pic['fromPageTitleEnc']  # 百度图片搜索结果对应的titleyield item 

新建main.py文件,方便在pycharm中运行和调试爬虫。

main.py

# _*_ coding: utf-8 _*_from scrapy.cmdline import execute
import sys
import os
sys.path.append(os.path.dirname(os.path.abspath(__file__))) #设置工程目录
print(os.path.dirname(os.path.abspath(__file__)))execute(["scrapy","crawl","pic_spider"]).strip()

定义item字段

item.py

# -*- coding: utf-8 -*-import scrapyclass PicItem(scrapy.Item) :search_word = scrapy.Field() #搜索关键字pic_name = scrapy.Field() #图片标题pic_url = scrapy.Field() #图片urlpass

定义pipeline

pipeline.py

# -*- coding: utf-8 -*-class PicspiderPipeline(object):def process_item(self, item, spider):return item

在setting中对应部分修改ITEM_PIPELINES,并增加图片处理代码

settings.py

ITEM_PIPELINES = {'PicSpider.pipelines.PicspiderPipeline': 300,'scrapy.pipelines.images.ImagesPipeline' : 1,
}
#配置pipeline,设定需要进行处理的图片路径
IMAGES_URLS_FIELD = "pic_url"
# 设置图片下载后的存储路径,放到工程目录下images文件夹
# 获取当前目录绝对路径
project_dir = os.path.abspath(os.path.dirname(__file__))
# 获取images存储路径
IMAGES_STORE = os.path.join(project_dir,'images')# 设定处理图片的最小高度,宽度
IMAGES_MIN_HEIGHT = 100
IMAGES_MIN_WIDTH = 100

运行

run main.py

python pil保存图片_python爬取百度图片并保存到本地相关推荐

  1. python爬取一张图片并保存_python爬取百度图片并保存到本地

    安装scrapy pip install Scrapy 进入终端,切换到自己项目代码的工作空间下,执行 scrapy startproject baidu_pic_spider 生成如下工程文件: i ...

  2. python爬取一张图片并保存_python爬取网页图片并保存到本地

    先把原理梳理一下:首先我们要爬取网页的代码,然后从中提取图片的地址,通过获取到的地址来下载数据,并保存在文件中,完成. 下面是具体步骤: 先确定目标,我挑选的是国服守望先锋的官网的英雄页面,我的目标是 ...

  3. 使用python和PyQt5编写爬取百度图片的界面工具

    使用python和PyQt5编写爬取百度图片的界面工具 本篇文章的主要内容是展示我个人编写的,以界面小工具的方式爬取百度上面的图片,功能很单一,根据关键词爬取图片,代码很简单,新手上路请多指教. 代码 ...

  4. node.js 爬虫 实现爬取网页图片并保存到本地

    node.js 爬虫 实现爬取网页图片并保存到本地 没有废话直接看代码 /*** 请求网站数据* 将数据保存本地文件*/ //不同协议引用不同模块,http https const http = re ...

  5. Python依据单个关键词爬取百度图片

    最近由于工作需要要使用大量的水果蔬菜图片,故萌生使用爬虫抓取百度图片的想法,并未用于商业用途,只是为了测试数据.所以并未使用多线程.框架等技术. 由于百度图片是动态加载的,发现搜索关键词后action ...

  6. java爬取网页并保存_第九讲:Python爬取网页图片并保存到本地

    上一讲我们说了如何把网页的数据通过分析后存储到数据库,我们这次讲如何将网页上的图片提取并下载到本地. 思路如下: 我们本次要爬取的是昵图网首页的图片. 1.首先分析我们要爬取的网页的代码结构,每个网页 ...

  7. 第九讲:Python爬取网页图片并保存到本地

    上一讲我们说了如何把网页的数据通过分析后存储到数据库,我们这次讲如何将网页上的图片提取并下载到本地. 思路如下: 我们本次要爬取的是昵图网首页的图片. 1.首先分析我们要爬取的网页的代码结构,每个网页 ...

  8. python爬取一张图片并保存_第九讲:Python爬取网页图片并保存到本地

    上一讲我们说了如何把网页的数据通过分析后存储到数据库,我们这次讲如何将网页上的图片提取并下载到本地. 思路如下: 我们本次要爬取的是昵图网首页的图片. 1.首先分析我们要爬取的网页的代码结构,每个网页 ...

  9. python3.7 根据关键词 爬取百度图片并下载到本地

    URL地址:http://image.baidu.com/search/flip?tn=baiduimage&ipn=r&ct=201326592&cl=2&lm=-1 ...

最新文章

  1. 5月19-20日WebRTCon 2018 梳理全球WebRTC技术实践与案例
  2. 40个最好的Tumblr主题
  3. Java线程池,从使用到原理
  4. 【LeetCode笔记】560. 和为K的子数组(Java、前缀和、哈希表)
  5. springmvc防止重复提交拦截器
  6. Python连接两个字符串并去除首尾重复子串
  7. 【C++】CCFCSP201803-1跳一跳
  8. java为什么要设计包装类_Java 为什么需要包装类
  9. Notepad++使用SQL格式化插件
  10. 【AI视野·今日Robot 机器人论文速览 第二十三期】Tue, 28 Sep 2021
  11. TCP的SYN报文可以携带payload吗?
  12. Postman如何设置成中文?(汉化)
  13. 软件编程推荐书籍目录
  14. 宝塔自动备份网站到FTP空间
  15. c语言中scanf()用法,C语言中scanf()的用法!
  16. html实现跳跳棋游戏,原生JS实现的跳一跳小游戏完整实例
  17. 扡扫机器人_评测:不会满场乱飞奔 这台Anker扫拖机器人指哪儿扫哪儿
  18. 生活时尚酒店品牌JOJOE进军中国,首批选址7个城市,未来将开设至少1300家门店 | 美通社头条...
  19. 模具行业ERP信息化(转)
  20. cip核字号验证_cip核字号(cip数据核字号查询官网)

热门文章

  1. 可重入函数与不可重入函数(转)
  2. 你真的懂select Socket模型吗?
  3. C++各大著名程序库
  4. ace nonblock
  5. 飞思卡尔烧写工具mfgtools的使用
  6. mysql 表中添加唯一约束
  7. unity2D限制位置的背景移动补偿效果
  8. in和exists以及not in 和not exists有什么不同?(笔记)
  9. React中Context API的应用
  10. 移动数据平台mParticle获1750万美元B轮融资,帮助企业快速获取客户数据