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利用hook技术破解https的实例代码
Mar 25 Python
Python表示矩阵的方法分析
May 26 Python
python 实现tar文件压缩解压的实例详解
Aug 20 Python
Python 使用 Pillow 模块给图片添加文字水印的方法
Aug 30 Python
解决os.path.isdir() 判断文件夹却返回false的问题
Nov 29 Python
python sitk.show()与imageJ结合使用常见的问题
Apr 20 Python
使用PyQt5实现图片查看器的示例代码
Apr 21 Python
Python Charles抓包配置实现流程图解
Sep 29 Python
Python实现EM算法实例代码
Oct 04 Python
pytorch简介
Nov 11 Python
python必学知识之文件操作(建议收藏)
May 30 Python
一些让Python代码简洁的实用技巧总结
Aug 23 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
typecho插件编写教程(六):调用接口
2015/05/28 PHP
php实现读取和写入tab分割的文件
2015/06/01 PHP
PHP中filter函数校验数据的方法详解
2015/07/31 PHP
php实现遍历多维数组的方法
2015/11/25 PHP
PHP实现百度人脸识别
2019/05/06 PHP
Extjs Ext.MessageBox.confirm 确认对话框详解
2010/04/02 Javascript
用JS判别浏览器种类以及IE版本的几种方法小结
2011/08/02 Javascript
JavaScript判断是否为数组的3种方法及效率比较
2015/04/01 Javascript
jQuery插件pagewalkthrough实现引导页效果
2015/07/05 Javascript
javascript实现下拉提示选择框
2015/12/29 Javascript
javascript实现延时显示提示框特效代码
2016/04/27 Javascript
详解微信开发中snsapi_base和snsapi_userinfo及静默授权的实现
2017/03/11 Javascript
JS实现含有中文字符串的友好截取功能分析
2017/03/13 Javascript
js中的事件委托或是事件代理使用详解
2017/06/23 Javascript
关于微信小程序获取小程序码并接受buffer流保存为图片的方法
2019/06/07 Javascript
python实现随机密码字典生成器示例
2014/04/09 Python
Python网页解析利器BeautifulSoup安装使用介绍
2015/03/17 Python
在Python的Django框架中加载模版的方法
2015/07/16 Python
分析Python中设计模式之Decorator装饰器模式的要点
2016/03/02 Python
python+selenium识别验证码并登录的示例代码
2017/12/21 Python
python实现简单淘宝秒杀功能
2018/05/03 Python
numpy matrix和array的乘和加实例
2018/06/28 Python
python正则表达式去除两个特殊字符间的内容方法
2018/12/24 Python
Python实现的插入排序,冒泡排序,快速排序,选择排序算法示例
2019/05/04 Python
重构Python代码的六个实例
2020/11/25 Python
台湾最大网路书店:博客来
2018/03/18 全球购物
违反校纪校规检讨书
2014/02/15 职场文书
社区食品安全实施方案
2014/03/28 职场文书
《春雨》教学反思
2014/04/24 职场文书
承诺书模板
2014/08/30 职场文书
创先争优演讲稿
2014/09/15 职场文书
八项规定整改方案
2014/10/01 职场文书
应届毕业生求职简历自我评价
2015/03/02 职场文书
mysql知识点整理
2021/04/05 MySQL
SpringDataJPA在Entity中常用的注解介绍
2021/12/06 Java/Android
使用Python通过企业微信应用给企业成员发消息
2022/04/18 Python