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 相关文章推荐
flask中使用SQLAlchemy进行辅助开发的代码
Feb 10 Python
Python对小数进行除法运算的正确方法示例
Aug 25 Python
Python中的特殊语法:filter、map、reduce、lambda介绍
Apr 14 Python
Python 多进程和数据传递的理解
Oct 09 Python
教你使用python画一朵花送女朋友
Mar 29 Python
基于python绘制科赫雪花
Jun 22 Python
Python 读写文件的操作代码
Sep 20 Python
Python判断一个文件夹内哪些文件是图片的实例
Dec 07 Python
python统计文章中单词出现次数实例
Feb 27 Python
django xadmin 管理器常用显示设置方式
Mar 11 Python
浅谈python 中的 type(), dtype(), astype()的区别
Apr 09 Python
Pandas 稀疏数据结构的实现
Jul 25 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
第十一节--重载
2006/11/16 PHP
php开发文档 会员收费1期
2012/08/14 PHP
微信公众平台网页授权获取用户基本信息中授权回调域名设置的变动
2014/10/21 PHP
PHP写API输出的时用echo的原因详解
2019/04/28 PHP
jquery实现checkbox全选全不选的简单实例
2013/12/31 Javascript
node.js中的buffer.Buffer.byteLength方法使用说明
2014/12/10 Javascript
PhotoShop给图片自动添加边框及EXIF信息的JS脚本
2015/02/15 Javascript
JavaScript使用yield模拟多线程的方法
2015/03/19 Javascript
jQuery下拉友情链接美化效果代码分享
2015/08/26 Javascript
JavaScript判断数字是否为质数的方法汇总
2016/06/02 Javascript
jQuery on()方法绑定动态元素的点击事件无响应的解决办法
2016/07/07 Javascript
Angular.js中定时器循环的3种方法总结
2017/04/27 Javascript
vue+webpack dev本地调试全局样式引用失效的解决方案
2019/11/12 Javascript
vue 开发之路由配置方法详解
2019/12/02 Javascript
Vue axios获取token临时令牌封装案例
2020/09/11 Javascript
用Python实现QQ游戏大家来找茬辅助工具
2014/09/14 Python
Python中的pprint折腾记
2015/01/21 Python
浅谈Python的垃圾回收机制
2016/12/17 Python
python调用外部程序的实操步骤
2019/03/04 Python
python实现beta分布概率密度函数的方法
2019/07/08 Python
python实现基于朴素贝叶斯的垃圾分类算法
2019/07/09 Python
python实现截取屏幕保存文件,删除N天前截图的例子
2019/08/27 Python
python 操作hive pyhs2方式
2019/12/21 Python
python单例设计模式实现解析
2020/01/07 Python
HTML5中form如何关闭自动完成功能的方法
2018/07/02 HTML / CSS
Timex手表官网:美国运动休闲手表品牌
2017/01/28 全球购物
Ashford台湾:以折扣价提供奢华的男女用表款
2019/12/04 全球购物
材料成型专业个人求职信范文
2013/09/25 职场文书
最新大学毕业求职简历的自我评价
2013/10/18 职场文书
《草原》教学反思
2014/02/15 职场文书
建筑工地质量标语
2014/06/12 职场文书
党员个人剖析材料(四风问题)
2014/10/07 职场文书
工作会议通知
2015/04/15 职场文书
针对吵架老公保证书
2015/05/08 职场文书
高一语文教学反思
2016/02/16 职场文书
css height属性中的calc方法详解
2021/06/03 HTML / CSS