说明

1、PySpider 是一个方便并且功能强大的Python爬虫框架
2、PySpider 依赖于PhantomJS
3、windows平台,PySpider 与64位的Python兼容不太好,需要使用32位Python
4、本文环境:Python3.5(32位)+PhantomJS2.1.1+PySpider 0.4.0

环境配置

  1. 安装Python(32位)
      下载地址:https://www.python.org/downloads/windows/
      下载Windows x86 executable installer后按指示安装,并将安装路径加入环境变量
  2. 列表内容
      下载地址:http://phantomjs.org/download.html
      下载后解压,并将bin目录放入环境变量(命令行phantomjs -v测试)
  3. 安装PySpider
      使用pip安装:命令行输入 pip install pyspider
      验证安装结果:
        安装完成后,命令行输入 pyspider all,然后浏览器访问http://localhost:5000
        如果正常出现PySpider页面,则说明安装成功

开始抓取

  1. 获取抓取链接
      在百度图片http://image.baidu.com/里随便输入搜索,将搜索结果页地址作为我们抓取的链接。我这里输入“猫咪”,然后获取到的链接是https://image.baidu.com/search/index?tn=baiduimage&ipn=r&ct=201326592&cl=2&lm=-1&st=-1&sf=1&fmq=&pv=&ic=0&nc=1&z=&se=1&showtab=0&fb=0&width=&height=&face=0&istype=2&ie=utf-8&fm=index&pos=history&word=%E7%8C%AB%E5%92%AA

  2. 新建PySpider项目
      命令行输入 pyspider all,然后浏览器访问http://localhost:5000
      点击右下角的“Create”按钮

      输入项目名称和我们第一步获取到的URL

      然后点击“Create”即可完成创建,并打开项目的编辑界面。具体使用方式请自行百度

  3. 抓取思路
      搜索结果页面本身已包含所有的图片,通过图片标签就可以获取到。但此种方法获取的图片分辨率较低,我们需要获取分辨率较高的图片。
      搜索结果页,点击图片,会进入图片详情页,这里展示的图片分辨率较高,符合我们的要求。
      所以,我们的目标就是:搜索结果页获取图片详情页的地址列表,然后再遍历进入详情页获取图片的URL,最后下载保存到本地。
      下面正式开始抓取

  4. index_page中获取图片详情页地址列表
      使用PySpider内置的PyQuery,通过css匹配到我们要找的链接标签,然后获取链接的地址,通过PySpider的crawl方法传递给detail_page处理图片详情页数据。
      crawl方法的save参数会传递给detail_page数据,可通过detail_page方法的response参数获取

def index_page(self, response):count = 1#获取图片详情链接标签列表for each in response.doc('.imgbox a').items():url = each.attr.href#进入图片详情页self.crawl(url, callback=self.detail_page,validate_cert=False, fetch_type="js",save={"count":count})count +=1

 5. detail_page中获取图片地址并下载
  此处也是通过PyQuery匹配到图片标签,然后获取图片地址,最后交由自定义的下载方法save_img去下载图片并保存本地

def detail_page(self, response):#获取图片标签imgElem = response.doc(".currentImg")#获取图片地址imgUrl = imgElem.attr.srcif imgUrl:#获取图片文件后缀extension = self.tool.get_extension(imgUrl)#拼接图片名file_name = str(response.save["count"]) + "." + extensionself.crawl(imgUrl,callback=self.save_img,save={"file_name":file_name},validate_cert=False)

 6. 保存图片方法

    #保存图片def save_img(self,response):content = response.contentfile_name = response.save["file_name"]file_path = self.dir_path + os.path.sep + file_nameself.tool.save_img(content,file_path)

 7. 创建文件夹、保存图片的工具类

#工具类
class Tool:def __init__(self):self.dir = DIR_PATH#创建文件夹(如果不存在)if not os.path.exists(self.dir):                         os.makedirs(self.dir)                                         #保存图片def save_img(self,content,path):f = open(path,"wb" )f.write(content)f.close()#获取url后缀名def get_extension(self,url):                            extension = url.split(".")[-1]return extension   

 8. 完整代码

#!/usr/bin/env python
# -*- encoding: utf-8 -*-
# Created on 2017-03-29 14:56:10
# Project: BaiduPicturesfrom pyspider.libs.base_handler import *
import os#图片存放目录
DIR_PATH = "D:\python_workspace\pyspider_baiduPicture"
class Handler(BaseHandler):crawl_config = {}def __init__(self):self.base_url = "https://image.baidu.com/search/index?tn=baiduimage&ipn=r&ct=201326592&cl=2&lm=-1&st=-1&fm=index&fr=&hs=0&xthttps=111111&sf=1&fmq=&pv=&ic=0&nc=1&z=&se=1&showtab=0&fb=0&width=&height=&face=0&istype=2&ie=utf-8&word=%E7%8C%AB%E5%92%AA&oq=%E7%8C%AB%E5%92%AA&rsp=-1"self.dir_path = DIR_PATHself.tool = Tool()@every(minutes=24 * 60)def on_start(self):#validate_cert:是否验证SSL;fetch_type:为了支持JSself.crawl(self.base_url, callback=self.index_page, validate_cert=False, fetch_type="js")@config(age=10 * 24 * 60 * 60)def index_page(self, response):count = 1#获取图片详情链接标签列表for each in response.doc('.imgbox a').items():url = each.attr.href#进入图片详情页self.crawl(url, callback=self.detail_page,validate_cert=False, fetch_type="js",save={"count":count})count +=1@config(priority=2)def detail_page(self, response):#获取图片标签imgElem = response.doc(".currentImg")#获取图片地址imgUrl = imgElem.attr.srcif imgUrl:#获取图片文件后缀extension = self.tool.get_extension(imgUrl)#拼接图片名file_name = str(response.save["count"]) + "." + extensionself.crawl(imgUrl,callback=self.save_img,save={"file_name":file_name},validate_cert=False)#保存图片def save_img(self,response):content = response.contentfile_name = response.save["file_name"]file_path = self.dir_path + os.path.sep + file_nameself.tool.save_img(content,file_path)#工具类
class Tool:def __init__(self):self.dir = DIR_PATH#创建文件夹(如果不存在)if not os.path.exists(self.dir):                         os.makedirs(self.dir)                                         #保存图片def save_img(self,content,path):f = open(path,"wb" )f.write(content)f.close()#获取url后缀名def get_extension(self,url):                            extension = url.split(".")[-1]return extension       

Python + PySpider 抓取百度图片搜索的图片相关推荐

  1. python爬虫抓取百度图片_Python爬虫抓取百度的高清摄影图片

    成果预览: 源代码: import requests import re url = 'https://image.baidu.com/search/index' headers = { 'User- ...

  2. Python爬虫抓取百度搜索图片

    最近玩机器学习,想搞一个关于识别动漫图片的训练集,苦于没有太多的动漫图片,后来忽然想到百度图片可以拿来用,于是乎写了个简单的爬虫,用来抓取百度图片(关于某个关键字的图片) 第一步,找到搜索图片的url ...

  3. 【爬虫】【原创】pyspider抓取宅男女神美女图片

    灵感来源: https://zhuanlan.zhihu.com/p/31421316 抓取页面: https://www.nvshens.com/tag/new/ 页面分析: 首页获取所有图片详情页 ...

  4. [python 爬虫]Python爬虫抓取虎扑论坛帖子图片

    自从可以实现抓取文字了,自然要尝试更多的类型,比如图片.我是一个有逛虎扑论坛习惯的人,经常会发现有些帖子的图片挺好看的想保存下来,但是如果人为保存的话,一个帖子至少都有二三十张,这将是一个庞大的工作量 ...

  5. 四、python爬虫抓取购物网站商品信息--图片价格名称

    本篇博客参考:python爬虫入门教程 http://blog.csdn.net/wxg694175346/article/category/1418998 Python爬虫爬取网页图片 http:/ ...

  6. php 邮编正则,php抓取百度邮编搜索结果,应改如何写正则表达式?

    本人小白,想通过百度邮编搜索截取一个地址的邮编,在自己的网站空间里放了个php脚本. 因为要求不是很高,试图通过正则匹配找到第一组"首位不为0的六位数字",作为结果输出,但是不管怎 ...

  7. python爬虫抓取头条街拍美女图片

    开发环境:windows 7 开发工具:pycharm python版本:python 3.7 用到的库:os,urllib,requests,hashlib 关键步骤: 通过浏览器分析找到请求接口 ...

  8. C#winform抓取百度,Google搜索关键词结果

    基于网站seo,做了一采集百度和Google搜索关键字结果的采集.在这里与大家分享一下 先看先效果图 代码附加: View Code  1   private void baidu_Click(obj ...

  9. [Python]简单抓取百度blog

    #coding=utf8 #graptest1.py python2.7 2013.4.5 ''' 单页里的列表匹配,单线程下载,html文件格式 完成一个原型 regex写的很烂.. ''' imp ...

最新文章

  1. GameByro渲染系统剖析
  2. sublimeformaya
  3. mysql脚本转成oracle脚本_mysql脚本手动修改成oracle脚本
  4. android Camera 拍照的两个问题
  5. java aop注解拦截_Spring AOP 拦截指定注解标识的类或方法
  6. 有多少种 “图片格式”?
  7. Codeforces 977D: Divide by three, multiply by two(暴力)
  8. defer 和 async 区别
  9. React 成为最吃香的前端技能,一纸技能图快速 Get!
  10. cartographer探秘第四章之代码解析(八) --- 生成地图
  11. 由数据库连接池想到的----处理他人未释放的资源
  12. html网页设计作业代码web网页设计实例作业 ——放飞梦想文化主题(3页)
  13. Gliffy 一款很不错的在线作图工具[可代替visio]
  14. 【游戏开发实战】Unity逆向怀旧经典游戏《寻秦OL》,解析二进制动画文件生成预设并播放(资源逆向 | 二进制 | C#)
  15. 强化学习(RL)QLearning算法详解
  16. tenda无线网卡Linux驱动,腾达(Tenda)W311MI V2.0网卡驱动(LINUX)
  17. c语言程序设计专题实验bmp,第九章 报表设计---Visual Foxpro 数据库程序设计教案1-9章全...
  18. ppt怎么压缩,ppt压缩的技巧分享
  19. 码市coding不能下载
  20. ai文字后面出现特殊符号

热门文章

  1. 黑客攻击常用端口详解总结
  2. Hyperledger Fabric 1.3 官方文档翻译(三)关键概念 (Key Concepts) - 3.7 对等节点 (Peers)
  3. 【Matlab基础学习】运筹学-线性规划简单总结
  4. win7 不能访问局域网共享的解决方案
  5. 搜狐2009年第二季度财报电话会议实录(含我的评论)
  6. win10网络重置后,无限网卡驱动消失的解决办法
  7. mysql 的indexof函数
  8. 一步步透彻理解Lock的Acquire和Release原理源码
  9. solrcloud 高可用集群搭建加solr整合hbase以及向ganglia报告度量
  10. SQL-统计公司迟到名单