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实现数通设备tftp备份配置文件示例
Apr 02 Python
在Heroku云平台上部署Python的Django框架的教程
Apr 20 Python
python使用PyGame播放Midi和Mp3文件的方法
Apr 24 Python
python获取本地计算机名字的方法
Apr 29 Python
Python实现堆排序的方法详解
May 03 Python
VSCode下配置python调试运行环境的方法
Apr 06 Python
Python3单行定义多个变量或赋值方法
Jul 12 Python
pytorch: tensor类型的构建与相互转换实例
Jul 26 Python
对Python3中列表乘以某一个数的示例详解
Jul 20 Python
python爬虫 基于requests模块的get请求实现详解
Aug 20 Python
Python实现直播推流效果
Nov 26 Python
深度学习详解之初试机器学习
Apr 14 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
Windows下PHP5和Apache的安装与配置
2006/09/05 PHP
Yii实现自动加载类地图的方法
2015/04/01 PHP
php 中的closure用法详解
2017/06/12 PHP
thinkPHP框架中执行事务的方法示例
2018/05/31 PHP
asp函数split()对应php函数explode()
2019/02/27 PHP
Laravel 5.5 实现禁用用户注册示例
2019/10/24 PHP
浅析PHP echo 和 print 语句
2020/06/30 PHP
javascript KeyDown、KeyPress和KeyUp事件的区别与联系
2009/12/03 Javascript
JavaScript 基础篇之运算符、语句(二)
2012/04/07 Javascript
屏蔽网页右键复制和ctrl+c复制的js代码
2013/01/04 Javascript
仿百度的关键词匹配搜索示例
2013/09/25 Javascript
JS随机漂浮广告代码具体实例
2013/11/19 Javascript
JavaScript中的Web worker多线程API研究
2014/12/06 Javascript
利用浮层使select不可选的实现方法
2016/12/03 Javascript
分享Bootstrap简单表格、表单、登录页面
2017/08/04 Javascript
JS实现按钮添加背景音乐示例代码
2017/10/17 Javascript
vue中使用heatmapjs的示例代码(结合百度地图)
2018/09/05 Javascript
微信小程序实现单选选项卡切换效果
2020/06/19 Javascript
js实现拖动缓动效果
2020/01/13 Javascript
原生JavaScript实现进度条
2021/02/19 Javascript
python爬虫 猫眼电影和电影天堂数据csv和mysql存储过程解析
2019/09/05 Python
浅析使用Python搭建http服务器
2019/10/27 Python
python读取dicom图像示例(SimpleITK和dicom包实现)
2020/01/16 Python
css3 盒模型以及box-sizing属性全面了解
2016/09/20 HTML / CSS
Vilebrequin欧洲官网:法国豪华泳装品牌(男士沙滩裤)
2018/04/14 全球购物
北美领先的智能产品购物网站:Wellbots
2018/06/11 全球购物
计算机专业应届毕业生自荐信
2013/09/26 职场文书
反邪教警示教育方案
2014/05/13 职场文书
2014年教师业务工作总结
2014/12/19 职场文书
会计岗位职责
2015/02/03 职场文书
2015年八一建军节活动总结
2015/03/20 职场文书
汉字听写大会观后感
2015/06/12 职场文书
2016新党章学习心得体会
2016/01/15 职场文书
小学六一儿童节活动开幕词
2016/03/04 职场文书
浅析MySQL如何实现事务隔离
2021/06/26 MySQL
解决SpringBoot文件上传临时目录找不到的问题
2021/07/01 Java/Android