本文介绍使用python从X度的图像库爬取特定种类的图片资源。
工具准备:
1、安装python,路劲:https://www.python.org/
选择自己喜欢的版本即可,本人使用3.5.4实验。
注意在安装过程中勾选PATH路劲设置。
安装成功后的图如下所示
2、使用PIP下载requests库(URL访问用)
在python的PIP安装路径下CMD
输入:pip install requests
安装成功后,在python的编辑器下运行import requests,结果如下,表示request库导入成功。
打开file编辑器,导入代码
运行,调试。遇到问题Google、百度即可解决。
百度的URL链接如下:
图示如下:
按照人的搜索习惯,这里预置了关键词,比如“中国男人脸”等字样。对于到python的脚本中在代码43行
每次搜索的时候手工预置条件即可。否则搜索出的内容不一定是我们需要的结果。
程序运行后图片下载到程序当前文件夹下,需要重新拷贝到自命名文件下。
全部拷进去,如果觉得麻烦,在代码中设置文件夹路径即可。
原始代码:
# coding=utf-8
"""根据特定搜索词下载百度图片"""
import re
import sys
import urllib
import requests
def get_onepage_urls(onepageurl):
"""获取单个翻页的所有图片的urls+当前翻页的下一翻页的url"""
if not onepageurl:
print('已到最后一页, 结束')
return [], ''
try:
html = requests.get(onepageurl).text
except Exception as e:
print(e)
pic_urls = []
fanye_url = ''
return pic_urls, fanye_url
pic_urls = re.findall('"objURL":"(.*?)",', html, re.S)
fanye_urls = re.findall(re.compile(r'<a href="(.*)" class="n">下一页</a>'), html, flags=0)
fanye_url = 'http://image.baidu.com' + fanye_urls[0] if fanye_urls else ''
return pic_urls, fanye_url
def down_pic(pic_urls):
"""给出图片链接列表, 下载所有图片"""
for i, pic_url in enumerate(pic_urls):
try:
pic = requests.get(pic_url, timeout=20)
string = str(i + 1) + '.jpg'
with open(string, 'wb') as f:
f.write(pic.content)
print('成功下载第%s张图片: %s' % (str(i + 1), str(pic_url)))
except Exception as e:
print('下载第%s张图片时失败: %s' % (str(i + 1), str(pic_url)))
print(e)
continue
if __name__ == '__main__':
keyword = '中国男人脸' # 关键词, 改为你想输入的词即可, 相当于在百度图片里搜索一样
url_init_first = r'http://image.baidu.com/search/flip?tn=baiduimage&ipn=r&ct=201326592&cl=2&lm=-1&st=-1&fm=result&fr=&sf=1&fmq=1497491098685_R&pv=&ic=0&nc=1&z=&se=1&showtab=0&fb=0&width=&height=&face=0&istype=2&ie=utf-8&ctd=1497491098685%5E00_1519X735&word='
url_init = url_init_first + urllib.request.quote(keyword, safe='/')
all_pic_urls = []
onepage_urls, fanye_url = get_onepage_urls(url_init)
all_pic_urls.extend(onepage_urls)
fanye_count = 0 # 累计翻页数
while 1:
onepage_urls, fanye_url = get_onepage_urls(fanye_url)
fanye_count += 1
print('第%s页' % fanye_count)
if fanye_url == '' and onepage_urls == []:
break
all_pic_urls.extend(onepage_urls)
down_pic(list(set(all_pic_urls)))