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操作字典类型的常用方法(推荐)
May 16 Python
Python中不同进制的语法及转换方法分析
Jul 27 Python
python实现12306火车票查询器
Apr 20 Python
python数据结构之列表和元组的详解
Sep 23 Python
快速解决安装python没有scripts文件夹的问题
Apr 03 Python
python中将\\uxxxx转换为Unicode字符串的方法
Sep 06 Python
Python实现分段线性插值
Dec 17 Python
Python 从列表中取值和取索引的方法
Dec 25 Python
Pycharm使用之设置代码字体大小和颜色主题的教程
Jul 12 Python
Python 使用指定的网卡发送HTTP请求的实例
Aug 21 Python
python标准库OS模块函数列表与实例全解
Mar 10 Python
简单且有用的Python数据分析和机器学习代码
Jul 02 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
玛琪朵 Macchiato
2021/03/03 咖啡文化
Ajax PHP分页演示
2007/01/02 PHP
PHP无刷新上传文件实现代码
2011/09/19 PHP
CodeIgniter常用知识点小结
2016/05/26 PHP
GRID拖拽行的实例代码
2013/07/18 Javascript
JS实现仿百度输入框自动匹配功能的示例代码
2014/02/19 Javascript
jQuery中hover方法和toggle方法使用指南
2015/02/27 Javascript
javascript实现倒计时并弹窗提示特效
2015/06/05 Javascript
javascript实现的猜数小游戏完整实例代码
2016/05/10 Javascript
easyui datebox 时间限制,datebox开始时间限制结束时间,datebox截止日期比起始日期大的实现代码
2017/01/12 Javascript
jQuery实现拖动效果的实例代码
2017/06/25 jQuery
轻松搞定jQuery+JSONP跨域请求的解决方案
2018/03/06 jQuery
WebSocket的简单介绍及应用
2019/05/23 Javascript
Vue实现图片与文字混输效果
2019/12/04 Javascript
使用vue引入maptalks地图及聚合效果的实现
2020/08/10 Javascript
vue使用video插件vue-video-player的示例
2020/10/03 Javascript
react ant Design手动设置表单的值操作
2020/10/31 Javascript
跟老齐学Python之玩转字符串(3)
2014/09/14 Python
浅谈Python数据类型之间的转换
2016/06/08 Python
python+pandas生成指定日期和重采样的方法
2018/04/11 Python
Python中使用logging和traceback模块记录日志和跟踪异常
2019/04/09 Python
django与vue的完美结合_实现前后端的分离开发之后在整合的方法
2019/08/12 Python
使用Django xadmin 实现修改时间选择器为不可输入状态
2020/03/30 Python
pycharm全局搜索的具体步骤
2020/07/28 Python
Lookfantastic葡萄牙官方网站:欧洲第一大化妆品零售商
2018/03/17 全球购物
MIXIT官网:俄罗斯最大的化妆品公司之一
2020/01/25 全球购物
explicit和implicit的含义
2012/11/15 面试题
大学生水文观测实习自我鉴定
2013/09/29 职场文书
办理居住证介绍信
2014/01/15 职场文书
竞选村长演讲稿
2014/04/28 职场文书
保险公司开门红口号
2014/06/21 职场文书
中共广东省委常委会党的群众路线教育实践活动整改方案
2014/09/23 职场文书
拾金不昧表扬稿
2015/01/16 职场文书
Python中threading库实现线程锁与释放锁
2021/05/17 Python
Java并发编程之Executor接口的使用
2021/06/21 Java/Android
Vue elementUI表单嵌套表格并对每行进行校验详解
2022/02/18 Vue.js