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单例模式实例详解
Mar 01 Python
PyQt5打开文件对话框QFileDialog实例代码
Feb 07 Python
Python基本数据结构之字典类型dict用法分析
Jun 08 Python
python opencv捕获摄像头并显示内容的实现
Jul 11 Python
Python Django基础二之URL路由系统
Jul 18 Python
简单了解django orm中介模型
Jul 30 Python
python中利用matplotlib读取灰度图的例子
Dec 07 Python
详解Python Opencv和PIL读取图像文件的差别
Dec 27 Python
python orm 框架中sqlalchemy用法实例详解
Feb 02 Python
tensorflow之变量初始化(tf.Variable)使用详解
Feb 06 Python
Django 解决model 反向引用中的related_name问题
May 19 Python
python利用文件时间批量重命名照片和视频
Feb 09 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遍历数组的4种方法总结
2014/07/05 PHP
thinkphp的URL路由规则与配置实例
2014/11/26 PHP
浅谈PHP中如何实现Hook机制
2017/11/14 PHP
javascript 操作select下拉列表框的一点小经验
2010/03/20 Javascript
EasyUI的treegrid组件动态加载数据问题的解决办法
2011/12/11 Javascript
jQuery中:eq()选择器用法实例
2014/12/29 Javascript
jQuery实现自动切换播放的经典滑动门效果
2015/09/12 Javascript
JavaScript获取当前运行脚本文件所在目录的方法
2016/02/03 Javascript
jQuery自定义组件(导入组件)
2016/11/08 Javascript
Angular2使用Guard和Resolve进行验证和权限控制
2017/04/24 Javascript
JavaScript实现自动跳转文本功能
2017/05/25 Javascript
nodejs密码加密中生成随机数的实例代码
2017/07/17 NodeJs
JS判断微信扫码的方法
2017/08/07 Javascript
捕获未处理的Promise错误方法
2017/10/13 Javascript
Node 自动化部署的方法
2017/10/17 Javascript
Vue实现6位数密码效果
2018/08/18 Javascript
在Koa.js中实现文件上传的接口功能
2019/10/08 Javascript
基于vue-cli3创建libs库的实现方法
2019/12/04 Javascript
JS实现“全选”和"全不选"功能代码实例
2020/02/06 Javascript
JavaScript常用8种数组去重代码实例
2020/09/09 Javascript
Python greenlet实现原理和使用示例
2014/09/24 Python
Python实现朴素贝叶斯分类器的方法详解
2018/07/04 Python
Django 内置权限扩展案例详解
2019/03/04 Python
用Python实现最速下降法求极值的方法
2019/07/10 Python
python基于opencv检测程序运行效率
2019/12/28 Python
Python如何获取Win7,Win10系统缩放大小
2020/01/10 Python
python、PyTorch图像读取与numpy转换实例
2020/01/13 Python
解决Keras中CNN输入维度报错问题
2020/06/29 Python
法国二手手袋、手表和奢侈珠宝购物网站:Collector Square
2018/07/05 全球购物
一个J2EE项目团队的主要人员组成是什么
2012/06/04 面试题
小学国庆节活动方案
2014/02/11 职场文书
药剂专业自荐信范文
2014/04/16 职场文书
超市员工辞职信范文
2015/05/12 职场文书
MATLAB 如何求取离散点的曲率最大值
2021/04/16 Python
mysql sum(if())和count(if())的用法说明
2022/01/18 MySQL
tomcat下部署jenkins的方法
2022/05/06 Servers