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 相关文章推荐
Windows系统配置python脚本开机启动的3种方法分享
Mar 10 Python
python添加模块搜索路径方法
Sep 11 Python
NetworkX之Prim算法(实例讲解)
Dec 22 Python
Python决策树之基于信息增益的特征选择示例
Jun 25 Python
只需7行Python代码玩转微信自动聊天
Jan 27 Python
Python 微信爬虫完整实例【单线程与多线程】
Jul 06 Python
Django Celery异步任务队列的实现
Jul 24 Python
用Python徒手撸一个股票回测框架搭建【推荐】
Aug 05 Python
使用PyInstaller将Pygame库编写的小游戏程序打包为exe文件及出现问题解决方法
Sep 06 Python
Python 音频生成器的实现示例
Dec 24 Python
Python爬虫设置Cookie解决网站拦截并爬取蚂蚁短租的问题
Feb 22 Python
Python+Tkinter制作专属图形化界面
Apr 01 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
javascript游戏开发之《三国志曹操传》零部件开发(三)情景对话中仿打字机输出文字
2013/01/23 Javascript
jQuery通过Ajax返回JSON数据
2015/04/28 Javascript
javascript模拟评分控件实现方法
2015/05/13 Javascript
javascript实现的闭包简单实例
2015/07/17 Javascript
AngularJS服务service用法总结
2016/12/13 Javascript
Bootstrap超大屏幕的实现代码
2017/03/22 Javascript
详解使用angular框架离线你的应用(pwa指南)
2019/01/31 Javascript
jQuery高级编程之js对象、json与ajax用法实例分析
2019/11/01 jQuery
浅谈Ant Design Pro 菜单自定义 icon
2020/11/17 Javascript
[01:01:52]完美世界DOTA2联赛PWL S2 GXR vs Magma 第二场 11.25
2020/11/26 DOTA
Tornado服务器中绑定域名、虚拟主机的方法
2014/08/22 Python
在Python下进行UDP网络编程的教程
2015/04/29 Python
Python中的ConfigParser模块使用详解
2015/05/04 Python
不要用强制方法杀掉python线程
2017/02/26 Python
详解python之多进程和进程池(Processing库)
2017/06/09 Python
Python实现的圆形绘制(画圆)示例
2018/01/31 Python
TensorFlow 模型载入方法汇总(小结)
2018/06/19 Python
符合语言习惯的 Python 优雅编程技巧【推荐】
2018/09/25 Python
django 消息框架 message使用详解
2019/07/22 Python
Python 转换文本编码实现解析
2019/08/27 Python
python pycharm的安装及其使用
2019/10/11 Python
如何实现在jupyter notebook中播放视频(不停地展示图片)
2020/04/23 Python
Python通过类的组合模拟街道红绿灯
2020/09/16 Python
python 基于selectors库实现文件上传与下载
2020/12/31 Python
YSL圣罗兰美妆俄罗斯官网:Yves Saint Lauret RU
2020/09/23 全球购物
ASICS印度官方网站:日本专业运动品牌
2020/06/20 全球购物
linux面试题参考答案(5)
2014/09/01 面试题
什么是servlet链?
2014/07/13 面试题
美术指导助理求职信
2014/04/20 职场文书
会议通知范文
2015/04/15 职场文书
奖励通知
2015/04/22 职场文书
学生会部长竞选稿
2015/11/19 职场文书
小学四年级作文之最感动的一件事
2019/11/01 职场文书
nginx优化的六点方法
2021/03/31 Servers
Python实战之用tkinter库做一个鼠标模拟点击器
2021/04/27 Python
MySQL 如何限制一张表的记录数
2021/09/14 MySQL