本篇目标

1.输入关键字能够根据关键字爬取百度图片

2.能够将图片保存到本地文件夹

1.URL的格式

进入百度图片搜索apple,这时显示的是瀑布流版本,我们选择传统翻页版本进行爬取。可以看到网址为:

https://image.baidu.com/search/flip?tn=baiduimage&ie=utf-8&word=apple&pn=0

点击下一页发现网址变为pn=20,这里仅pn发生了改变

2.抓取图片

打开开发者选项,点击图片,出现图片的代码,如下图

复制这里的图片地址,在页面上点击右键显示源代码,查找刚刚复制的地址,我们可以看到有thumbURL,middleURL,hoverURL,objURL

这里objURL显示的图片最清晰,我们就爬取这个,所以可以写出正则表达式

pattern = re.compile('"objURL":"(.*?)",', re.S)
items = re.findall(pattern, page)

3.创建目录

    def mkdir(self, path):
path = path.strip()
#判断路径是否存在
#存在为True 不存在为False
isExists = os.path.exists(path)
if not isExists:
#如果不存在则创建目录
print u"新建了名为", path, u"的文件夹"
#创建目录操作函数
os.makedirs(path)
return True
else:
#如果目录存在则不创建,并提示目录已存在
print u"名为", path, u"的文件夹已存在"
return False

4.保存图片为.jpg格式

for item in items:
try:
u = urllib2.urlopen(item, timeout=20)
except urllib2.URLError, e:
print e.reason
continue
data = u.read()
name = path + "/" + word + str(i) + ".jpg"
f = open(name, 'wb')
f.write(data)
print u"正在保存图片为", name, u"图片地址为:", item
f.close()
i += 1

item是利用正则表达式查找到的图片网址

5.编写测试代码

#-*- coding:utf-8 -*-
import urllib2
import os
import re
import sys # 设置编码
reload(sys)
sys.setdefaultencoding('utf-8')
# 获得系统编码格式
type = sys.getfilesystemencoding()
word = raw_input("请输入关键字: ".decode('utf-8').encode('gbk')).decode(type)
url = 'https://image.baidu.com/search/flip?tn=baiduimage&ie=utf-8&word='+word+'&pn=0'
request = urllib2.Request(url)
response = urllib2.urlopen(request)
page = response.read()
pattern = re.compile('"objURL":"(.*?)",', re.S)
items = re.findall(pattern, page)
path = word
#判断路径是否存在
#存在为True 不存在为False
isExists = os.path.exists(path)
if not isExists:
#如果不存在则创建目录
print u"新建了名为", path, u"的文件夹"
#创建目录操作函数
os.makedirs(path)
else:
#如果目录存在则不创建,并提示目录已存在
print u"名为", path, u"的文件夹已存在"
i = 1
for item in items:
# print u"第"+str(i)+u"张图片地址"
# print item
# i += 1
try:
u = urllib2.urlopen(item, timeout=20)
except urllib2.URLError, e:
print e.reason
continue
data = u.read()
name = path + "/" + word + str(i) + ".jpg"
f = open(name, 'wb')
f.write(data)
print u"正在保存图片为", name, u"图片地址为:", item
f.close()
i += 1

test

6.完善代码并封装

#-*- coding:utf-8 -*-
import urllib2
import re
import sys
import os
import time
import socket class Spider:
def __init__(self, keyword):
self.siteURL = 'https://image.baidu.com/search/flip?tn=baiduimage&ie=utf-8&word=' + keyword
self.i = 1 def getPage(self, pageIndex):
page = (pageIndex-1)*20
url = self.siteURL + "&pn=" + str(page)
headers = {'User-agent':'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/62.0.3202.89 Safari/537.36'}
sleep_download_time = 10
try:
time.sleep(sleep_download_time)
request = urllib2.Request(url, headers=headers)
response = urllib2.urlopen(request)
except urllib2.URLError, e:
print e.reason
except socket.timeout, e:
print u"timeout"
return response.read().decode('utf-8') def getContents(self, pageIndex, keyword):
page = self.getPage(pageIndex)
pattern = re.compile('"objURL":"(.*?)",', re.S)
items = re.findall(pattern, page)
self.mkdir(keyword)
for item in items:
try:
name = keyword + "/" + keyword + str(self.i) + ".jpg"
self.saveImg(item, name)
self.i += 1
except urllib2.URLError, e:
print e.reason
except socket.timeout, e:
print u"timeout"
continue #创建新目录
def mkdir(self, path):
path = path.strip()
#判断路径是否存在
#存在为True 不存在为False
isExists = os.path.exists(path)
if not isExists:
#如果不存在则创建目录
print u"新建了名为", path, u"的文件夹"
#创建目录操作函数
os.makedirs(path)
return True
else:
#如果目录存在则不创建,并提示目录已存在
print u"名为", path, u"的文件夹已存在"
return False #保存图片到文件夹
def saveImg(self, imageURL, fileName):
u = urllib2.urlopen(imageURL)
data = u.read()
f = open(fileName, 'wb')
f.write(data)
print u"正在保存图片为", fileName, u"图片地址为:", imageURL
f.close() #传入起止页码,获取图片
# def savePagesInfo(self, start, end):
# for i in range(start,end+1):
# print u"正在查找第",i,u"个地方"
# self.getContents(i, self.title) # 设置编码
reload(sys)
sys.setdefaultencoding('utf-8')
# 获得系统编码格式
type = sys.getfilesystemencoding()
word = raw_input("请输入关键字: ".decode('utf-8').encode('gbk')).decode(type)
timeout = 20
socket.setdefaulttimeout(timeout)#这里对整个socket层设置超时时间。后续文件中如果再使用到socket,不必再设置
spider = Spider(word)
spider.getContents(1, word)
 

python爬虫实战(3)--图片下载器的更多相关文章

  1. Python爬虫实战:批量下载网站图片

    前言 本文的文字及图片来源于网络,仅供学习.交流使用,不具有任何商业用途,版权归原作者所有,如有问题请及时联系我们以作处理. 作者: GitPython PS:如有需要Python学习资料的小伙伴可以 ...

  2. Python 爬虫学习 网页图片下载

    使用正则表达式匹配 # coding:utf-8 import re import urllib def get_content(url): """ Evilxr, &q ...

  3. 【Python爬虫实战】 图片爬虫-淘宝图片爬虫--千图网图片爬虫

    所谓图片爬虫,就是从互联网中自动把对方服务器上的图片爬下来的爬虫程序.有些图片是直接在html文件里面,有些是隐藏在JS文件中,在html文件中只需要我们分析源码就能得到如果是隐藏在JS文件中,那么就 ...

  4. Bing图片下载器(Python实现)

    分享一个Python实现的Bing图片下载器.下载首页图片并保存到到当前目录.其中用到了正则库re以及Request库. 大致流程如下: 1.Request抓取首页数据 2.re正则匹配首页图片URL ...

  5. 【图文详解】python爬虫实战——5分钟做个图片自动下载器

    python爬虫实战——图片自动下载器 之前介绍了那么多基本知识[Python爬虫]入门知识,(没看的先去看!!)大家也估计手痒了.想要实际做个小东西来看看,毕竟: talk is cheap sho ...

  6. python爬虫实战——5分钟做个图片自动下载器

      python爬虫实战——图片自动下载器 制作爬虫的基本步骤 顺便通过这个小例子,可以掌握一些有关制作爬虫的基本的步骤. 一般来说,制作一个爬虫需要分以下几个步骤: 分析需求(对,需求分析非常重要, ...

  7. Python实战:美女图片下载器,海量图片任你下载

    Python应用现在如火如荼,应用范围很广.因其效率高开发迅速的优势,快速进入编程语言排行榜前几名.本系列文章致力于可以全面系统的介绍Python语言开发知识和相关知识总结.希望大家能够快速入门并学习 ...

  8. 第三百四十一节,Python分布式爬虫打造搜索引擎Scrapy精讲—编写spiders爬虫文件循环抓取内容—meta属性返回指定值给回调函数—Scrapy内置图片下载器

    第三百四十一节,Python分布式爬虫打造搜索引擎Scrapy精讲—编写spiders爬虫文件循环抓取内容—meta属性返回指定值给回调函数—Scrapy内置图片下载器 编写spiders爬虫文件循环 ...

  9. 二十 Python分布式爬虫打造搜索引擎Scrapy精讲—编写spiders爬虫文件循环抓取内容—meta属性返回指定值给回调函数—Scrapy内置图片下载器

    编写spiders爬虫文件循环抓取内容 Request()方法,将指定的url地址添加到下载器下载页面,两个必须参数, 参数: url='url' callback=页面处理函数 使用时需要yield ...

  10. 《精通Python网络爬虫》|百度网盘免费下载|Python爬虫实战

    <精通Python网络爬虫>|百度网盘免费下载|Python爬虫实战 提取码:7wr5 内容简介 为什么写这本书 网络爬虫其实很早就出现了,最开始网络爬虫主要应用在各种搜索引擎中.在搜索引 ...

随机推荐

  1. WPF利用通过父控件属性来获得绑定数据源RelativeSource

    WPF利用通过父控件属性来获得绑定数据源RelativeSource   有时候我们不确定作为数据源的对象叫什么名字,但知道作为绑定源与UI布局有相对的关系,如下是一段XAML代码,说明多层布局控件中 ...

  2. C# 6.0 编译器

    C# 6.0编译器:可以将csc.exe所在位置 C:\Program Files (x86)\MSBuild\14.0\Bin 添加到Path环境变量. C:\>csc Microsoft ( ...

  3. Windows 10 SDK 10.0.10158

    昨天微软发布了Windows 10 SDK 10158版本: http://blogs.windows.com/buildingapps/2015/06/30/windows-10-sdk-previ ...

  4. [项目部署] CentOs7 安装 MySQL/Tomcat/JDK 笔记

    0.安装 MySQL cd /usr/local/ # 新增yum源 rpm -Uvh http://dev.mysql.com/get/mysql-community-release-el7-.no ...

  5. MySQL 事物和数据库锁

    1.数据库事物 1. 什么是事务  事务是应用程序中一系列严密的操作,所有操作必须成功完成,否则在每个操作中所作的所有更改都会被撤消.也就是事务具有原子性,一个事务中的一系列的操作要么全部成功,要么一 ...

  6. hbase_异常_03_java.io.EOFException: Premature EOF: no length prefix available

    一.异常现象 更改了hadoop的配置文件:core-site.xml  和   mapred-site.xml  之后,重启hadoop 和 hbase 之后,发现hbase日志中抛出了如下异常: ...

  7. LeetCode OJ:Sort Colors(排序颜色)

    Given an array with n objects colored red, white or blue, sort them so that objects of the same colo ...

  8. New Concept English three (52)

    My cousin, Harry, keeps a large curiously-shaped bottle on permanent display in his study. Despite t ...

  9. 设置SSH自动登陆(免密码,用户名)

    设置SSH自动登陆(免密码,用户名)   1.创建公钥.公钥  ssh-keygen -t rsa  无视它出来的任何提示,欢快的一路回车到底吧.  2.把公钥 id_rsa.pub 复制到远程机器的 ...

  10. UVA 11637 Garbage Remembering Exam

    #include <iostream> #include <stdio.h> #include <cstring> #include <math.h> ...