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实现封装得到virustotal扫描结果
Oct 05 Python
Python面向对象编程之继承与多态详解
Jan 16 Python
Python字符串逆序的实现方法【一题多解】
Feb 18 Python
selenium跳过webdriver检测并模拟登录淘宝
Jun 12 Python
PyQt5 对图片进行缩放的实例
Jun 18 Python
django将数组传递给前台模板的方法
Aug 06 Python
解析python的局部变量和全局变量
Aug 15 Python
django中使用POST方法获取POST数据
Aug 20 Python
pytorch 获取tensor维度信息示例
Jan 03 Python
使用Keras实现简单线性回归模型操作
Jun 12 Python
使用python批量修改XML文件中图像的depth值
Jul 22 Python
python3实现飞机大战
Nov 29 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自动更新版权信息显示的方法
2015/06/19 PHP
微信 getAccessToken方法详解及实例
2016/11/23 PHP
js 限制数字 js限制输入实现代码
2012/12/04 Javascript
JS+CSS制作DIV层可(最小化/拖拽/排序)功能实现代码
2013/02/25 Javascript
用html+css+js实现的一个简单的图片切换特效
2014/05/28 Javascript
JavaScript隐式类型转换
2016/03/15 Javascript
angularJS的radio实现单项二选一的使用方法
2018/02/28 Javascript
Vue实现左右菜单联动实现代码
2018/08/12 Javascript
JavaScript格式化json和xml的方法示例
2019/01/22 Javascript
BootStrap前端框架使用方法详解
2020/02/26 Javascript
详解Vue的组件中data选项为什么必须是函数
2020/08/17 Javascript
python监控网站运行异常并发送邮件的方法
2015/03/13 Python
Python中表示字符串的三种方法
2017/09/06 Python
Python中时间datetime的处理与转换用法总结
2019/02/18 Python
Python类的继承、多态及获取对象信息操作详解
2019/02/28 Python
python路径的写法及目录的获取方式
2019/12/26 Python
使用Django搭建网站实现商品分页功能
2020/05/22 Python
一款纯css3实现的圆形旋转分享按钮旋转角度可自己调整
2014/09/02 HTML / CSS
CSS3 3D酷炫立方体变换动画的实现
2019/03/26 HTML / CSS
Maxpeedingrods美国:高性能汽车零件
2020/02/14 全球购物
美国婴儿服装购物网站:Gerber Childrenswear
2020/05/06 全球购物
经典C++面试题一
2016/11/06 面试题
师范教师大学生职业生涯规划范文
2014/01/05 职场文书
化学教学随笔感言
2014/02/19 职场文书
防邪知识进家庭活动方案
2014/08/26 职场文书
我爱祖国演讲稿
2014/09/02 职场文书
公司合作协议范文
2014/10/01 职场文书
初中家长评语大全
2014/12/26 职场文书
单位委托函范文
2015/01/29 职场文书
单位介绍信格式
2015/01/31 职场文书
毕业设计致谢语
2015/05/14 职场文书
致运动员赞词
2015/07/22 职场文书
2015年学校消防安全工作总结
2015/10/14 职场文书
PHP策略模式写法
2021/04/01 PHP
深入讲解Vue中父子组件通信与事件触发
2022/03/22 Vue.js
python文件与路径操作神器 pathlib
2022/04/01 Python