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学习笔记_数据排序方法
May 22 Python
Python写的贪吃蛇游戏例子
Jun 16 Python
浅谈numpy数组的几种排序方式
Dec 15 Python
Python实现七彩蟒蛇绘制实例代码
Jan 16 Python
用TensorFlow实现lasso回归和岭回归算法的示例
May 02 Python
python实现鸢尾花三种聚类算法(K-means,AGNES,DBScan)
Jun 27 Python
python标记语句块使用方法总结
Aug 05 Python
python爬虫模拟浏览器的两种方法实例分析
Dec 09 Python
python kafka 多线程消费者&手动提交实例
Dec 21 Python
python实现异常信息堆栈输出到日志文件
Dec 26 Python
基于Python-turtle库绘制路飞的草帽骷髅旗、美国队长的盾牌、高达的源码
Feb 18 Python
Python基于百度AI实现抓取表情包
Jun 27 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访问RabbitMQ消息队列的方法示例
2018/06/06 PHP
070823更新的一个[消息提示框]组件 兼容ie7
2007/08/29 Javascript
用jQuery扩展自写的 UI导航
2010/01/13 Javascript
js获取TreeView控件选中节点的Text和Value值的方法
2012/11/24 Javascript
js获取select标签的值且兼容IE与firefox
2013/12/30 Javascript
setTimeout()递归调用不加引号出错的解决方法
2014/09/05 Javascript
jquery实现弹出层登录和全屏层注册特效
2015/08/28 Javascript
AngularJs bootstrap搭载前台框架——准备工作
2016/09/01 Javascript
详解vue的数据binding绑定原理
2017/04/12 Javascript
xmlplus组件设计系列之列表(4)
2017/04/26 Javascript
jquery实现下拉菜单的手风琴效果
2017/07/23 jQuery
JS实现小球的弹性碰撞效果
2017/11/11 Javascript
详解设置Webstorm 利用babel将ES6自动转码成ES5
2017/12/20 Javascript
Vue $mount实战之实现消息弹窗组件
2019/04/22 Javascript
layui 解决form表单点击无反应的问题
2019/10/25 Javascript
angular inputNumber指令输入框只能输入数字的实现
2019/12/03 Javascript
JavaScript this指向相关原理及实例解析
2020/07/10 Javascript
[05:24]TI9采访——教练
2019/08/24 DOTA
[39:08]完美世界DOTA2联赛PWL S3 LBZS vs CPG 第一场 12.12
2020/12/16 DOTA
Python使用wget实现下载网络文件功能示例
2018/05/31 Python
Python实现根据日期获取当天凌晨时间戳的方法示例
2019/04/09 Python
解决py2exe打包后,总是多显示一个DOS黑色窗口的问题
2019/06/21 Python
python去除删除数据中\u0000\u0001等unicode字符串的代码
2020/03/06 Python
基于Tensorflow一维卷积用法详解
2020/05/22 Python
Django --Xadmin 判断登录者身份实例
2020/07/03 Python
Python3 搭建Qt5 环境的方法示例
2020/07/16 Python
装饰活动策划方案
2014/02/11 职场文书
2014春晚主持词
2014/03/25 职场文书
优秀的导游求职信范文
2014/04/06 职场文书
小学阳光体育活动总结
2014/07/05 职场文书
武当山导游词
2015/02/03 职场文书
高中班主任培训心得体会
2016/01/07 职场文书
《青山不老》教学反思
2016/02/22 职场文书
2016年优秀班主任先进事迹材料
2016/02/26 职场文书
掌握一个领域知识,高效学习必备方法
2019/08/08 职场文书
【海涛教你打DOTA】黑鸟第一视角解说
2022/04/01 DOTA