python爬虫实战(3)--图片下载器
本篇目标
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)--图片下载器的更多相关文章
- Python爬虫实战:批量下载网站图片
前言 本文的文字及图片来源于网络,仅供学习.交流使用,不具有任何商业用途,版权归原作者所有,如有问题请及时联系我们以作处理. 作者: GitPython PS:如有需要Python学习资料的小伙伴可以 ...
- Python 爬虫学习 网页图片下载
使用正则表达式匹配 # coding:utf-8 import re import urllib def get_content(url): """ Evilxr, &q ...
- 【Python爬虫实战】 图片爬虫-淘宝图片爬虫--千图网图片爬虫
所谓图片爬虫,就是从互联网中自动把对方服务器上的图片爬下来的爬虫程序.有些图片是直接在html文件里面,有些是隐藏在JS文件中,在html文件中只需要我们分析源码就能得到如果是隐藏在JS文件中,那么就 ...
- Bing图片下载器(Python实现)
分享一个Python实现的Bing图片下载器.下载首页图片并保存到到当前目录.其中用到了正则库re以及Request库. 大致流程如下: 1.Request抓取首页数据 2.re正则匹配首页图片URL ...
- 【图文详解】python爬虫实战——5分钟做个图片自动下载器
python爬虫实战——图片自动下载器 之前介绍了那么多基本知识[Python爬虫]入门知识,(没看的先去看!!)大家也估计手痒了.想要实际做个小东西来看看,毕竟: talk is cheap sho ...
- python爬虫实战——5分钟做个图片自动下载器
python爬虫实战——图片自动下载器 制作爬虫的基本步骤 顺便通过这个小例子,可以掌握一些有关制作爬虫的基本的步骤. 一般来说,制作一个爬虫需要分以下几个步骤: 分析需求(对,需求分析非常重要, ...
- Python实战:美女图片下载器,海量图片任你下载
Python应用现在如火如荼,应用范围很广.因其效率高开发迅速的优势,快速进入编程语言排行榜前几名.本系列文章致力于可以全面系统的介绍Python语言开发知识和相关知识总结.希望大家能够快速入门并学习 ...
- 第三百四十一节,Python分布式爬虫打造搜索引擎Scrapy精讲—编写spiders爬虫文件循环抓取内容—meta属性返回指定值给回调函数—Scrapy内置图片下载器
第三百四十一节,Python分布式爬虫打造搜索引擎Scrapy精讲—编写spiders爬虫文件循环抓取内容—meta属性返回指定值给回调函数—Scrapy内置图片下载器 编写spiders爬虫文件循环 ...
- 二十 Python分布式爬虫打造搜索引擎Scrapy精讲—编写spiders爬虫文件循环抓取内容—meta属性返回指定值给回调函数—Scrapy内置图片下载器
编写spiders爬虫文件循环抓取内容 Request()方法,将指定的url地址添加到下载器下载页面,两个必须参数, 参数: url='url' callback=页面处理函数 使用时需要yield ...
- 《精通Python网络爬虫》|百度网盘免费下载|Python爬虫实战
<精通Python网络爬虫>|百度网盘免费下载|Python爬虫实战 提取码:7wr5 内容简介 为什么写这本书 网络爬虫其实很早就出现了,最开始网络爬虫主要应用在各种搜索引擎中.在搜索引 ...
随机推荐
- php扩展下载网站
1, pecl.php.net 2 window.php.net
- addslashes及其反函数 stripslashes
addslashes() 函数返回在预定义字符之前添加反斜杠的字符串. stripslashes() 去掉addslashes 所添加的反斜杠 预定义字符是: 单引号(') 双引号(") 反 ...
- FunnelWeb 开源Blog引擎介绍
FunnelWeb is an open source blog engine, built by developers for developers. Instead of fancy quotes ...
- 解决:easygui.msgbox("Hello there!")报错:Tcl_Init error: Can't find a usable init.tcl in the following directories问题的解决
今天学习<父与子的编程之旅>,当看到运行第一个gui时(代码如下): import easygui easygui.msgbox("Hello there!") 发现报 ...
- LightOJ - 1027 数学期望
题意:有n扇门,每扇门有一个值x,大于0代表x分钟后出去,小于0代表x分钟后回到原地,求出去的时间的期望 题解:假设出去的总时间为sum1,回来的总时间为sum2,出去的门个数为out,进来的门的个数 ...
- java时间戳转换
import java.text.SimpleDateFormat; import java.util.Calendar; import java.util.Date; public class Da ...
- axios 拦截 , 页面跳转, token 验证(自己摸索了一天搞出来的)
最近做项目,需要登录拦截,验证.于是使用了axios的拦截器(也是第一次使用,摸索了1天,终于搞出来了,真是太高兴啦!!!),废话不多说,直接上代码, 项目结构:vue-cli + webpack + ...
- 二维码的扫描和生成--第三方开源--ZXing
ZXing的二维码功能的提取lib下载地址:https://github.com/xuyisheng/ZXingLib 1.扫描二维码: 我们扫描就是要用到这个CaptureActivity类,直接把 ...
- Idea_学习_10_Idea远程debug
一.前言 二.远程debug 1.在远程机器启动java调试模式. 需要在启动时添加如下jvm参数,来以java调试模式运行项目. java -Xdebug -Xrunjdwp:server=y,tr ...
- OpenCV - win7+vs2013(2012)+opencv3.0.0 环境配置 (以及配置技巧)
1. opencv 3.0.0 库下载地址, 这里的版本是3.0.0,其他的版本配置可能不一样,请大家注意. http://sourceforge.net/projects/opencvlibrary ...