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中使用glob和rmtree删除目录子目录及所有文件的例子
Nov 21 Python
python通过字典dict判断指定键值是否存在的方法
Mar 21 Python
Python2.x版本中maketrans()方法的使用介绍
May 19 Python
python常见的格式化输出小结
Dec 15 Python
python利用socketserver实现并发套接字功能
Jan 26 Python
详解tensorflow实现迁移学习实例
Feb 10 Python
Python实现计算字符串中出现次数最多的字符示例
Jan 21 Python
对python字典过滤条件的实例详解
Jan 22 Python
python读取word 中指定位置的表格及表格数据
Oct 23 Python
浅谈Keras中shuffle和validation_split的顺序
Jun 19 Python
Python 数据的累加与统计的示例代码
Aug 03 Python
M1芯片安装python3.9.1的实现
Feb 02 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 小乘法表实现代码
2009/07/16 PHP
Yii操作数据库实现动态获取表名的方法
2016/03/29 PHP
ThinkPHP中order()使用方法详解
2016/04/19 PHP
php获取微信共享收货地址的方法
2017/12/21 PHP
Laravel 5.4.36中session没有保存成功问题的解决
2018/02/19 PHP
PHP实现的支付宝支付功能示例
2019/03/26 PHP
javascript qq右下角滑出窗口 sheyMsg
2010/03/21 Javascript
JavaScript子类用Object.getPrototypeOf去调用父类方法解析
2013/12/05 Javascript
JS判断变量是否为空判断是否null
2014/07/25 Javascript
jQuery通过扩展实现抖动效果的方法
2015/03/11 Javascript
利用jquery实现下拉框的禁用与启用
2016/12/07 Javascript
JS实现求数组起始项到终止项之和的方法【基于数组扩展函数】
2017/06/13 Javascript
weex slider实现滑动底部导航功能
2017/08/28 Javascript
react native与webview通信的示例代码
2017/09/25 Javascript
nodejs项目windows下开机自启动的方法
2017/11/22 NodeJs
iview的table组件自带的过滤器实现
2019/07/12 Javascript
详解element-ui中el-select的默认选择项问题
2019/08/02 Javascript
js实现秒表计时器
2019/12/16 Javascript
vue.js自定义组件实现v-model双向数据绑定的示例代码
2020/01/08 Javascript
Vue 组件复用多次自定义参数操作
2020/07/27 Javascript
vuex刷新后数据丢失的解决方法
2020/10/18 Javascript
Python实现mysql数据库更新表数据接口的功能
2017/11/19 Python
windows下安装Python的XlsxWriter模块方法
2018/05/03 Python
浅谈DataFrame和SparkSql取值误区
2018/06/09 Python
python简易远程控制单线程版
2018/06/20 Python
Python3.4 splinter(模拟填写表单)使用方法
2018/10/13 Python
python3实现点餐系统
2019/01/24 Python
在echarts中图例legend和坐标系grid实现左右布局实例
2020/05/16 Python
HTML5中通过li-canvas轻松实现单图、多图、圆角图绘制,单行文字、多行文字等
2018/11/30 HTML / CSS
html5 canvas的绘制文本自动换行的示例代码
2018/09/17 HTML / CSS
英国Zoro工具:手动工具,电动工具和个人防护用品
2016/11/02 全球购物
师生聚会感言
2014/01/26 职场文书
2014年高数考试作弊检讨书
2014/12/14 职场文书
小学生成绩单评语
2014/12/31 职场文书
采购部年度工作总结
2015/08/13 职场文书
Nginx中break与last的区别详析
2021/03/31 Servers