想在妹子生日送妹子一张用零食(或者食物类好看的图片)拼成的马赛克拼图,因此探索了一番= =。
首先需要一个软件来制作马赛克拼图,这里使用Foto-Mosaik-Edda(网上也有在线制作的网站,但是我觉得这个比较方便,而且也找到了一个汉化过的版本,地址为http://witmax.cn/foto-mosaik-edda.html)。要制作马赛克拼图,需要一个图片的数据库,至少需要几千张图片。因此需要爬虫来爬取。
从网上学习了一番后copy了一些代码然后从一个外国的图片网站爬取了4000余张关键字为food的图片,python代码如下:
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+)/(.*?)\.(jpg|jpeg)\?auto=compress&cs=tinysrgb&h=350"', re.S)
pattern = re.compile(
'src="https://images.pexels.com/photos/(\d+)/(.*?)\?auto=compress&cs=tinysrgb&h=750&w=1260"')
# 真正的下载链接是static,不是images开头 items = re.findall(pattern, result.text) print("log!");
for item in items:
print(item); for item in items:
try:
photo_url = 'https://static.pexels.com/photos/' + str(item[0]) + '/' + str(item[1]) + "?auto=compress&cs=tinysrgb&h=350";
print("url: " + photo_url);
# 把图片链接中的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) + '创建成功!')
else:
print('文件夹已存在!') def save(photo_url, item, new_fpath):
Final_fpath = new_fpath + '/' + str(item[0]) + str(item[1]);
print("保存文件名: " + Final_fpath) 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页开始下载
st = int(input('请输入起始页码:'))
ed = int(input('请输入终止页码:')) fpath = 'C:/python/pic'
for i in range(st, ed+1):
new_fpath = fpath + '/' + key + '/' + key + '_page' + str(i)
makedir(new_fpath, i, key)
new_url = url + '?page=' + str(i)
get_photos(new_url, new_fpath)
time.sleep(3) main()
python爬虫代码
不得不说python真的很强大,爬虫真的很有意思,有一种在网页的源代码中分析然后处理做事的快乐~