标签:search urls 批量 Python headers words 版权 page 图片
有时候我们有一些获取图片素材的需求,比如写博客或者公众号文章时,需要的插图和封面,当然这些图片必须是没有版权的免费图片,比较常用网站有pexels、pixabay等,今天再给大家介绍一个新的网站 :http://alana.io/。
由于是国外的网站,访问速度比较慢,一页一页找,非常费时间,所以想到用Python爬取下载到本地,然后使用关键词进行归类,后期直接预览使用。
首先,我们要了解下爬取数据的基本流程:
发起请求: 通过url向服务器发起request请求。
获取响应内容: 响应的内容网页包含HTML,Json字符串或者二进制的数据(视频、图片)等。
解析内容: 可以通过正则、BeautifulSoup、xpath等解析响应的数据。
保存数据: 可以保存到本地文件,也可以保存到数据库(MySQL,Redis,Mongodb等)
准备工作
通过浏览器访问http://alana.io/,并搜索关键词(例如:computer),在F12中查看请求的URL。
翻到第二页,查看页码的URL规则:
点击Response,查看图片URL的规则,大多数图片是以<img width="548" height="365" src=开头的。
下面,就是批量爬取并下载图片的代码组成。
1.创建下载目录
创建关键词目录,便于后期查找。
def create_dirs(search_words):
# 创建关键词目录
if not os.path.exists('./{}'.format(search_words)):
os.mkdir('./{}'.format(search_words))
2.请求并解析数据
def save_urls(url):
# 请求并解析数据
headers = {
'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_6) AppleWebKit/537.36 (KHTML, like Gecko) \
Chrome/76.0.3809.100 Safari/537.36'}
html = requests.get(url,headers=headers).text # 获取响应的文本信息
urls = re.compile(r'<img width="548" height="365" src="(.*?)"') #正则提取图片的URL列表
res = re.findall(urls, html)
return res
3.保存图片数据到本地
def save_pics(search_words,urls):
# 根据图片的URL地址进行循环下载
headers = {
'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_6) AppleWebKit/537.36 (KHTML, like Gecko) \
Chrome/76.0.3809.100 Safari/537.36'}
for i in urls:
filename = './{}/'.format(search_words)+i.split('/')[-1]
try:
with open(filename,'wb+') as f:
f.write(requests.get(i,headers=headers).content)# 将请求响应的二进制文件写入文件
print("图片下载成功")
except:
print("图片下载失败")
time.sleep(5)
4.主函数(按页循环下载)
if __name__ == '__main__':
search_words=input("下载图片关键词:")
search_page=int(input("下载页数:"))
# 按页循环下载
for page in range(1,search_page+1):
url = 'http://alana.io/page/{}/?s={}&post_type=download'.format(page,search_words)
create_dirs(search_words)
urls = save_urls(url)
save_pics(search_words,urls)
time.sleep(2)
大功告成:
注意,仅供学习使用,建议不要密集大数量采集,避免服务器压力过大。
码。
标签:search,urls,批量,Python,headers,words,版权,page,图片 来源: https://blog.51cto.com/u_15127561/2710079
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。