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实现程序的单一实例用法分析
Jun 03 Python
Python之日期与时间处理模块(date和datetime)
Feb 16 Python
python中pandas.DataFrame排除特定行方法示例
Mar 12 Python
Django中的文件的上传的几种方式
Jul 23 Python
浅谈Python爬虫基本套路
Mar 25 Python
Python实现自定义读写分离代码实例
Nov 16 Python
Python散点图与折线图绘制过程解析
Nov 30 Python
使用Tkinter制作信息提示框
Feb 18 Python
python 操作mysql数据中fetchone()和fetchall()方式
May 15 Python
python logging模块的使用
Sep 07 Python
Django crontab定时任务模块操作方法解析
Sep 10 Python
python em算法的实现
Oct 03 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教程孙仲岳主讲
2008/01/07 PHP
php下使用iconv需要注意的问题
2010/11/20 PHP
ini_set的用法介绍
2014/01/07 PHP
php调用shell的方法
2014/11/05 PHP
php字符串按照单词进行反转的方法
2015/03/14 PHP
浅谈PHP面向对象之访问者模式+组合模式
2017/05/22 PHP
PHP清除缓存的几种方法总结
2017/09/12 PHP
PHP实现的折半查询算法示例
2017/10/09 PHP
PHP基于rabbitmq操作类的生产者和消费者功能示例
2018/06/16 PHP
jQuery代码优化 事件委托篇
2011/11/01 Javascript
js滚动条回到顶部的代码
2011/12/06 Javascript
使用JavaScript动态设置样式实现代码(2)
2013/01/25 Javascript
js点击出现悬浮窗效果不使用JQuery插件
2014/01/20 Javascript
jquery选择器之基本过滤选择器详解
2014/01/27 Javascript
js读取配置文件自写
2014/02/11 Javascript
js获取客户端网卡的IP地址、MAC地址
2014/03/26 Javascript
jquery检测input checked 控件是否被选中的方法
2014/03/26 Javascript
jQuery采用连缀写法实现的折叠菜单效果
2015/09/18 Javascript
Bootstrap源码解读标签、徽章、缩略图和警示框(8)
2016/12/26 Javascript
angularjs的select使用及默认选中设置
2017/04/08 Javascript
基于webpack-hot-middleware热加载相关错误的解决方法
2018/02/22 Javascript
详解JavaScript的BUG和错误
2018/05/07 Javascript
用vscode开发vue应用的方法步骤
2019/05/06 Javascript
taro 实现购物车逻辑的实例代码
2020/06/05 Javascript
如何在python中判断变量的类型
2020/07/29 Python
python中strip(),lstrip(),rstrip()函数的使用讲解
2020/11/17 Python
全球地下的服装和态度:Slam Jam
2018/02/04 全球购物
迪卡侬比利时官网:Decathlon比利时
2019/12/28 全球购物
ktv收银员岗位职责
2013/12/16 职场文书
优秀教师获奖感言
2014/01/31 职场文书
决心书范文
2014/03/11 职场文书
党员应该树立反腐倡廉的坚定意识思想汇报
2014/09/12 职场文书
2014年连锁店圣诞节活动方案
2014/12/09 职场文书
2015年法务工作总结范文
2015/05/23 职场文书
JS中一些高效的魔法运算符总结
2021/05/06 Javascript
一篇文章告诉你如何实现Vue前端分页和后端分页
2022/02/18 Vue.js