前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Python简单实现批量下载无版权图片

Python简单实现批量下载无版权图片

作者头像
吾非同
发布2020-10-23 10:58:26
1.6K0
发布2020-10-23 10:58:26
举报
文章被收录于专栏:吾非同

有时候我们有一些获取图片素材的需求,比如写博客或者公众号文章时,需要的插图和封面,当然这些图片必须是没有版权的免费图片,比较常用网站有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.创建下载目录

创建关键词目录,便于后期查找。

代码语言:javascript
复制
def create_dirs(search_words):
    # 创建关键词目录
    if not os.path.exists('./{}'.format(search_words)):
        os.mkdir('./{}'.format(search_words))

2.请求并解析数据

代码语言:javascript
复制
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.保存图片数据到本地

代码语言:javascript
复制
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.主函数(按页循环下载)

代码语言:javascript
复制
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)

大功告成:

注意,仅供学习使用,建议不要密集大数量采集,避免服务器压力过大。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2020-09-29,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 吾非同 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 首先,我们要了解下爬取数据的基本流程:
  • 准备工作
  • 1.创建下载目录
  • 2.请求并解析数据
  • 3.保存图片数据到本地
  • 4.主函数(按页循环下载)
    • 大功告成:
    相关产品与服务
    云数据库 MySQL
    腾讯云数据库 MySQL(TencentDB for MySQL)为用户提供安全可靠,性能卓越、易于维护的企业级云数据库服务。其具备6大企业级特性,包括企业级定制内核、企业级高可用、企业级高可靠、企业级安全、企业级扩展以及企业级智能运维。通过使用腾讯云数据库 MySQL,可实现分钟级别的数据库部署、弹性扩展以及全自动化的运维管理,不仅经济实惠,而且稳定可靠,易于运维。
    领券
    问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档