python爬虫----图片爬取之高清原图
2017-07-25 11:21
429 查看
这次又来爬取图片啦,不过这次爬的是原图
大概的思路和上一篇差不多,不同的是不同的网站有不同的反爬策略
爬取的网站是:https://www.pexels.com/
1、源码分析
进入网站后会出现一个图片搜索关键词的界面,输入关键词后进入的网址是:https://www.pexels.com/search/你输入的关键词/
通过观察源码发现这些链接就是图片
因为我们要下载的是原图,所以通过点击下载会得到图片的真实网址
在网址中发现图片有2中格式,jpeg和jpg
我们可以从源码中用正则表达式获取 data-pin-media属性后面的链接或 src属性后面的链接
但这些是image.pexels.com 而 真实图片网址是 static.pexels.com
在写的时候要将他们改过来
接着看源码,发现了这个
这原来是页码的链接。本来网页是瀑布流的形式,没有点的翻页的选项。
结合上面的代码,我们可以知道一页有15张图片。而这段代码最后一个显示的是36,说明一共有36页
现在我们可以爬取多页的图片了
2、文件储存
文件操作要引用os模块
用os.makedirs(path)来创建多层的文件夹
os.path.exists判断是否有重复的文件夹或图片
每一页图片就存在一个文件夹里
3、代码
import requests
import re
import os
import time
def get_url(url):
kw = {'user-agent':'Mozilla/5.0 (Windows NT 10.0; WOW64)'}
try:
r = requests.get(url,headers = kw)
r.raise_for_status()
r.encoding = r.apparent_encoding
return r
except:
print('wrong!!!!!!!!!!!')
def get_photourl(photo_url):
kw = {'user-agent':'Mozilla/5.0 (Windows NT 10.0; WOW64)'}
try:
r = requests.get(photo_url,headers = kw)
r.raise_for_status()
r.encoding = r.apparent_encoding
return r
except:
return 'wrong'
def get_photos(url,new_fpath):
result = get_url(url)
pattern = re.compile(r'src="https://images.pexels.com/photos/(\d+)/(.*?)\?h=350&auto=compress&cs=tinysrgb"',re.S)
#真正的下载链接是static,不是images开头
items = re.findall(pattern,result.text)
for item in items:
try:
photo_url = 'https
4000
://static.pexels.com/photos/' + str(item[0]) + '/' + str(item[1])
#把图片链接中的images,改成了static
save(photo_url,item,new_fpath)
time.sleep(1)
except:
continue
def makedir(new_fpath,i,key):
E = os.path.exists(new_fpath)
if not E:
os.makedirs(new_fpath)
os.chdir(new_fpath)
print('文件夹'+ key + '_page' + str(i + 1) + '创建成功!')
else:
print('文件夹已存在!')
def save(photo_url,item,new_fpath):
Final_fpath = new_fpath + '/' +str(item[0])+str(item[1])
print('正在下载图片......')
result = get_photourl(photo_url)
if result != 'wrong':
print('下载成功!')
else:
print('失败')
E = os.path.exists(Final_fpath)
if not E:
try:
with open(Final_fpath,'wb') as f:
f.write(result.content)
except:
print('下载失败!')
else:
print('图片已存在')
def main():
key = input('请输入搜索关键词(英文):')
url = 'https://www.pexels.com/search/' + key + '/'
num = int(input('请输入一共要下载的页数:'))#默认从第1页开始下载
fpath = 'E:/python'
for i in range(num):
new_fpath = fpath + '/Photo2.0/' + key + '_page' + str(i + 1)
makedir(new_fpath,i,key)
if i >= 1:
new_url = url + '?page=' + str(i + 1)
get_photos(new_url,new_fpath)
else:
get_photos(url,new_fpath)
time.sleep(3)
main()
4、注意事项
有时候网站不会那么容易让我们爬到自己想要的东西,这时就要用一些常用的方法来解决问题
(1)在requests.get函数里改写headers中的User-agent 和 cookies。主要目的就是模拟一个
浏览器浏览网页
(2)设置等待时间,用time模块,爬取太频繁会被网站禁止爬取
5、问题分析
(1)开始在用正则表达式匹配字段的时候,itme[1]这部分是这样的pexels-photo-46274.jpeg?,多了一个问号。
我就在想会不会是"https://images.pexels.com/photos/(\d+)/(.*?)\?h=350&a 后面的那个?影响了匹配,
我就在?前面加了个\转义字符,结果就好了。还有一种办法是item[1][:-1],直接略掉那个多余的问号。
(2)这个爬虫实在太慢了,所以测试的时候只爬了2页。不过大致看了下后面页数的源码,应该没什么问题
大概的思路和上一篇差不多,不同的是不同的网站有不同的反爬策略
爬取的网站是:https://www.pexels.com/
1、源码分析
进入网站后会出现一个图片搜索关键词的界面,输入关键词后进入的网址是:https://www.pexels.com/search/你输入的关键词/
通过观察源码发现这些链接就是图片
因为我们要下载的是原图,所以通过点击下载会得到图片的真实网址
在网址中发现图片有2中格式,jpeg和jpg
我们可以从源码中用正则表达式获取 data-pin-media属性后面的链接或 src属性后面的链接
但这些是image.pexels.com 而 真实图片网址是 static.pexels.com
在写的时候要将他们改过来
接着看源码,发现了这个
这原来是页码的链接。本来网页是瀑布流的形式,没有点的翻页的选项。
结合上面的代码,我们可以知道一页有15张图片。而这段代码最后一个显示的是36,说明一共有36页
现在我们可以爬取多页的图片了
2、文件储存
文件操作要引用os模块
用os.makedirs(path)来创建多层的文件夹
os.path.exists判断是否有重复的文件夹或图片
每一页图片就存在一个文件夹里
3、代码
import requests
import re
import os
import time
def get_url(url):
kw = {'user-agent':'Mozilla/5.0 (Windows NT 10.0; WOW64)'}
try:
r = requests.get(url,headers = kw)
r.raise_for_status()
r.encoding = r.apparent_encoding
return r
except:
print('wrong!!!!!!!!!!!')
def get_photourl(photo_url):
kw = {'user-agent':'Mozilla/5.0 (Windows NT 10.0; WOW64)'}
try:
r = requests.get(photo_url,headers = kw)
r.raise_for_status()
r.encoding = r.apparent_encoding
return r
except:
return 'wrong'
def get_photos(url,new_fpath):
result = get_url(url)
pattern = re.compile(r'src="https://images.pexels.com/photos/(\d+)/(.*?)\?h=350&auto=compress&cs=tinysrgb"',re.S)
#真正的下载链接是static,不是images开头
items = re.findall(pattern,result.text)
for item in items:
try:
photo_url = 'https
4000
://static.pexels.com/photos/' + str(item[0]) + '/' + str(item[1])
#把图片链接中的images,改成了static
save(photo_url,item,new_fpath)
time.sleep(1)
except:
continue
def makedir(new_fpath,i,key):
E = os.path.exists(new_fpath)
if not E:
os.makedirs(new_fpath)
os.chdir(new_fpath)
print('文件夹'+ key + '_page' + str(i + 1) + '创建成功!')
else:
print('文件夹已存在!')
def save(photo_url,item,new_fpath):
Final_fpath = new_fpath + '/' +str(item[0])+str(item[1])
print('正在下载图片......')
result = get_photourl(photo_url)
if result != 'wrong':
print('下载成功!')
else:
print('失败')
E = os.path.exists(Final_fpath)
if not E:
try:
with open(Final_fpath,'wb') as f:
f.write(result.content)
except:
print('下载失败!')
else:
print('图片已存在')
def main():
key = input('请输入搜索关键词(英文):')
url = 'https://www.pexels.com/search/' + key + '/'
num = int(input('请输入一共要下载的页数:'))#默认从第1页开始下载
fpath = 'E:/python'
for i in range(num):
new_fpath = fpath + '/Photo2.0/' + key + '_page' + str(i + 1)
makedir(new_fpath,i,key)
if i >= 1:
new_url = url + '?page=' + str(i + 1)
get_photos(new_url,new_fpath)
else:
get_photos(url,new_fpath)
time.sleep(3)
main()
4、注意事项
有时候网站不会那么容易让我们爬到自己想要的东西,这时就要用一些常用的方法来解决问题
(1)在requests.get函数里改写headers中的User-agent 和 cookies。主要目的就是模拟一个
浏览器浏览网页
(2)设置等待时间,用time模块,爬取太频繁会被网站禁止爬取
5、问题分析
(1)开始在用正则表达式匹配字段的时候,itme[1]这部分是这样的pexels-photo-46274.jpeg?,多了一个问号。
我就在想会不会是"https://images.pexels.com/photos/(\d+)/(.*?)\?h=350&a 后面的那个?影响了匹配,
我就在?前面加了个\转义字符,结果就好了。还有一种办法是item[1][:-1],直接略掉那个多余的问号。
(2)这个爬虫实在太慢了,所以测试的时候只爬了2页。不过大致看了下后面页数的源码,应该没什么问题
相关文章推荐
- Python3 大型网络爬虫实战 003 — scrapy 大型静态图片网站爬虫项目实战 — 实战:爬取 169美女图片网 高清图片
- Python爬虫入门-python之爬取pexels高清图片
- Python爬虫学习笔记二:百度贴吧网页图片抓取
- Python爬虫获取知乎图片
- 【Python爬虫系列】使用requests爬取图片
- Python3爬虫实战之爬取京东图书图片
- Python爬虫爬取一个网页上的图片地址实例代码
- python爬取人脸识别图片数据集/python爬去图片/python爬虫
- 用python写一个美女图片爬虫
- Python爬虫实现抓取京东店铺信息及下载图片功能示例
- python 实现网站图片抓取小爬虫
- python爬虫点触验证码的识别思路(图片版)
- Python爬虫抓取虎扑论坛帖子图片
- Python入门-编写抓取网站图片的爬虫-正则表达式
- 【Python3.6爬虫学习记录】(一)爬取简单的静态网页图片
- Python3网络爬虫:Scrapy入门之使用ImagesPipline下载图片
- python 爬虫图片
- Python爬虫——利用PhantomJS下载动态加载图片
- python爬虫爬取网络图片
- Python3简单爬虫抓取网页图片