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

安装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 # 导入item

class 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() # 实例化item

response_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'] # 百度图片搜索结果对应的title

yield 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 scrapy

class PicItem(scrapy.Item) :

search_word = scrapy.Field() #搜索关键字

pic_name = scrapy.Field() #图片标题

pic_url = scrapy.Field() #图片url

pass

定义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

运行

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值