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设计模式编程中观察者模式与策略模式的运用
Mar 02 Python
Python备份目录及目录下的全部内容的实现方法
Jun 12 Python
python中OrderedDict的使用方法详解
May 05 Python
python中验证码连通域分割的方法详解
Jun 04 Python
Tensorflow使用tfrecord输入数据格式
Jun 19 Python
python 使用socket传输图片视频等文件的实现方式
Aug 07 Python
python3实现从kafka获取数据,并解析为json格式,写入到mysql中
Dec 23 Python
浅析Django 接收所有文件,前端展示文件(包括视频,文件,图片)ajax请求
Mar 09 Python
Python用requests库爬取返回为空的解决办法
Feb 21 Python
OpenCV-Python直方图均衡化实现图像去雾
Jun 07 Python
实例详解Python的进程,线程和协程
Mar 13 Python
Python中的嵌套循环详情
Mar 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
PHP 多维数组排序实现代码
2009/08/05 PHP
PHP 在5.1.* 和5.2.*之间 PDO数据库操作中的不同之处小结
2012/03/07 PHP
php控制文件下载速度的方法
2015/03/24 PHP
php可扩展的验证类实例(可对邮件、手机号、URL等验证)
2015/07/09 PHP
简单谈谈PHP中的include、include_once、require以及require_once语句
2016/04/23 PHP
实例讲解php数据访问
2016/05/09 PHP
PHP微信公众号开发之微信红包实现方法分析
2017/07/14 PHP
jQuery+css实现图片滚动效果(附源码)
2013/03/18 Javascript
ExtJS下书写动态生成的xml(兼容火狐)
2013/04/02 Javascript
图片无缝滚动代码(向左/向下/向上)
2013/04/10 Javascript
采用call方式实现js继承
2014/05/20 Javascript
href下载文件根据id取url并下载
2014/05/28 Javascript
node中socket.io的事件使用详解
2014/12/15 Javascript
JavaScript设计模式之代理模式介绍
2014/12/28 Javascript
javascript实现控制浏览器全屏
2015/03/30 Javascript
JS中的THIS和WINDOW.EVENT.SRCELEMENT详解
2015/05/25 Javascript
jquery中cookie用法实例详解(获取,存储,删除等)
2016/01/04 Javascript
轻松实现jQuery添加删除按钮Click事件
2017/03/13 Javascript
angularjs http与后台交互的实现示例
2018/12/21 Javascript
pm2启动ssr失败的解决方法
2019/06/29 Javascript
antd form表单数据回显操作
2020/11/02 Javascript
python执行使用shell命令方法分享
2017/11/08 Python
Python实现购物评论文本情感分析操作【基于中文文本挖掘库snownlp】
2018/08/07 Python
为何人工智能(AI)首选Python?读完这篇文章你就知道了(推荐)
2019/04/06 Python
pytorch实现mnist分类的示例讲解
2020/01/10 Python
Python3.7.0 Shell添加清屏快捷键的实现示例
2020/03/23 Python
Python文本文件的合并操作方法代码实例
2020/03/31 Python
Python使用plt.boxplot() 参数绘制箱线图
2020/06/04 Python
Python 处理日期时间的Arrow库使用
2020/08/18 Python
Canvas 文本填充线性渐变的使用详解
2020/06/22 HTML / CSS
DVF官方网站:美国时装界尊尚品牌
2017/08/29 全球购物
优瑞自动咖啡机官网:Jura
2018/09/29 全球购物
英国最好的温室之家:Greenhouses Direct
2019/07/13 全球购物
Spartoo美国:欧洲排名第一的在线时装零售商
2019/12/12 全球购物
俄罗斯披萨、寿司和面食送货到家服务:2 Берега
2019/12/15 全球购物
知名企业招聘广告词大全
2014/03/18 职场文书