python百行代码实现汉服圈图片爬取


Posted in Python onNovember 23, 2021

平时旅游的时候,在旅游景区我们经常可以看到穿各种服饰去拍照的游客,也不会刻意多关注。前两天浏览网页无意看到一个网站,看到穿汉服的女孩是真的很好看。无论是工作需要还是创作文案,把这么漂亮的图片来当作素材都是一个很好的idea。有需要,我们就爬它,爬它,爬它!

话不多说,我们下面详细介绍图片爬取。

分析网站

网址如下:

https://www.aihanfu.com/zixun/tushang-1/

这是第一页的网址,根据观察,第二页网址也就是上述网站序号1变成了2,依次类推,就可以访问全部页数。

python百行代码实现汉服圈图片爬取

根据图示,我们需要获得每个子网站的链接,也就是href中网址,然后进入每个网址,寻找图片网址,在下载就行了。

子链接获取

为了获取上图中的数据,我们可以用soup或者re或者xpath等方法都可以,本文中小编使用xpath来定位,编写定位函数,获得每个子网站链接,然后返回主函数,这里使用了一个技巧,在for循环中,可以看看!

def get_menu(url, heades):
    """
    根据每一页的网址
    获得每个链接对应的子网址
    params: url 网址
    """
    r = requests.get(url, headers=headers)
    if r.status_code == 200:
        r.encoding = r.apparent_encoding
        html = etree.HTML(r.text)
        html = etree.tostring(html)
        html = etree.fromstring(html)
        # 查找每个子网址对应的链接, 然后返回
        children_url = html.xpath('//div[@class="news_list"]//article/figure/a/@href')
        for _ in children_url:
            yield _

获取标题和图片地址

为了尽量多的采集数据,我们把标签和图片地址采集一下,当然如果其他项目需要采集发布者和时间,也是可以做到多的,本篇就不再展开。

python百行代码实现汉服圈图片爬取

我们点开一个网址链接,如上图所示,可以发现标题在head的节点里面,获取标题是为创建文件夹时使用。

代码如下:

def get_page(url, headers):
    """
    根据子页链接,获得图片地址,然后打包下载
    params: url 子网址
    """
    r = requests.get(url, headers=headers)
    if r.status_code == 200:
        r.encoding = r.apparent_encoding
        html = etree.HTML(r.text)
        html = etree.tostring(html)
        html = etree.fromstring(html)
        # 获得标题
        title = html.xpath(r'//*[@id="main_article"]/header/h1/text()')
        # 获得图片地址
        img = html.xpath(r'//div[@class="arc_body"]//figure/img/@src')
        # title 预处理 
        title = ''.join(title)
        title = re.sub(r'【|】', '', title)
        print(title)
        save_img(title, img, headers)

保存图片

在翻转每一页时我们都需要把子链接对应的图片保存下来,此处需要注意对请求的状态判断、路径判断。

def save_img(title, img, headers):
    """
    根据标题创建子文件夹
    下载所有的img链接,选择更改质量大小
    params:title : 标题
    params:  img :  图片地址
    """
    if not os.path.exists(title):
        os.mkdir(title)
    # 下载
    for i, j in enumerate(img):  # 遍历该网址列表
        r = requests.get(j, headers=headers)
        if r.status_code == 200:
            with open(title + '//' + str(i) + '.png', 'wb') as fw:
                fw.write(r.content)
        print(title, '中的第', str(i), '张下载完成!')

主函数

if __name__ == '__main__':
    """ 
    一页一页查找
    params : None
    """
    path = '/Users/********/汉服/'
    if not os.path.exists(path):
        os.mkdir(path)
        os.chdir(path)
    else:
        os.chdir(path)
    # url = 'http://www.aihanfu.com/zixun/tushang-1/'
    headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64)'
                             ' AppleWebKit/537.36 (KHTML, like Gecko)'
                             ' Chrome/81.0.4044.129 Safari/537.36'}
    for _ in range(1, 50):
        url = 'http://www.aihanfu.com/zixun/tushang-{}/'.format(_)
        for _ in get_menu(url, headers):
            get_page(_, headers)  # 获得一页

至此我们已经完成了所有环节,关于爬虫的文章,小编已经不止一次的介绍了,一方面是希望大家可以多多熟悉爬虫技巧,另外一方面小编认为爬虫是数据分析、数据挖掘的基础。没有爬虫获取数据,何来数据分析。

以上就是python百行代码实现汉服圈图片爬取的详细内容,更多关于python爬取汉服圈图片的资料请关注三水点靠木其它相关文章!

Python 相关文章推荐
python中使用enumerate函数遍历元素实例
Jun 16 Python
Python压缩和解压缩zip文件
Feb 14 Python
在DigitalOcean的服务器上部署flaskblog应用
Dec 19 Python
python实现机械分词之逆向最大匹配算法代码示例
Dec 13 Python
python实现mysql的读写分离及负载均衡
Feb 04 Python
使用实现XlsxWriter创建Excel文件并编辑
May 04 Python
python实现自动网页截图并裁剪图片
Jul 30 Python
python 计算积分图和haar特征的实例代码
Nov 20 Python
Python 实现自动获取种子磁力链接方式
Jan 16 Python
python os模块常用的29种方法使用详解
Jun 02 Python
Python Tkinter实例——模拟掷骰子
Oct 24 Python
详解Python类和对象内容
Jun 22 Python
python可视化大屏库big_screen示例详解
python数据可视化JupyterLab实用扩展程序Mito
python入门学习关于for else的特殊特性讲解
Nov 20 #Python
Python标准库pathlib操作目录和文件
Nov 20 #Python
python数据可视化使用pyfinance分析证券收益示例详解
python编程学习使用管道Pipe编写优化代码
Nov 20 #Python
python自动化测试通过日志3分钟定位bug
Nov 20 #Python
You might like
PHP设计模式之装饰者模式
2012/02/29 PHP
php 文件上传实例代码
2012/04/19 PHP
老生常谈PHP数组函数array_merge(必看篇)
2017/05/25 PHP
thinkPHP框架实现的简单计算器示例
2018/12/07 PHP
Laravel 5.1 框架Blade模板引擎用法实例分析
2020/01/04 PHP
jquery的ajax从纯真网(cz88.net)获取IP地址对应地区名
2009/12/02 Javascript
输入框的字数时时统计—关于 onpropertychange 和 oninput 使用
2011/10/21 Javascript
指定区域的图片自动按比例缩小的js代码(防止页面被图片撑破)
2014/02/21 Javascript
javascript编写实用的省市选择器
2015/02/12 Javascript
TypeError document.getElementById(...) is null错误原因
2015/05/18 Javascript
原生js和jQuery实现淡入淡出轮播效果
2015/12/25 Javascript
JavaScript弹出对话框的三种方式
2016/03/23 Javascript
浅谈jquery点击label触发2次的问题
2016/06/12 Javascript
Vue.js动态添加、删除选题的实例代码
2016/09/30 Javascript
JS中使用 after 伪类清除浮动实例
2017/03/01 Javascript
微信小程序实现图片压缩功能
2018/01/26 Javascript
Angular开发实践之服务端渲染
2018/03/29 Javascript
JS散列表碰撞处理、开链法、HashTable散列示例
2019/02/08 Javascript
JS回调函数简单易懂的入门实例分析
2019/09/29 Javascript
JavaScript实现跟随鼠标移动的盒子
2021/01/28 Javascript
python基础教程之面向对象的一些概念
2014/08/29 Python
Python中生成器和yield语句的用法详解
2015/04/17 Python
Python中的Django基本命令实例详解
2018/07/15 Python
python+opencv打开摄像头,保存视频、拍照功能的实现方法
2019/01/08 Python
python查看文件大小和文件夹内容的方法
2019/07/08 Python
Python使用psutil获取进程信息的例子
2019/12/17 Python
Pandas读取csv时如何设置列名
2020/06/02 Python
基于Python-turtle库绘制路飞的草帽骷髅旗、美国队长的盾牌、高达的源码
2021/02/18 Python
传播学专业毕业生自荐信
2013/11/04 职场文书
如何做好总经理助理
2013/11/12 职场文书
大专生简历的自我评价
2013/11/26 职场文书
先进事迹演讲稿
2014/09/01 职场文书
反邪教警示教育活动总结
2015/05/09 职场文书
2015年国庆节寄语
2015/08/17 职场文书
2019交通安全宣传标语集锦!
2019/06/28 职场文书
Redis全局ID生成器的实现
2022/06/05 Redis