python爬取站长素材上的图片

2023-10-28

##Python爬取站长素材上的图片
罗纳尔康
首先这是一个学习的案例,我将其记录下来,因为所学的内容有点多,爬取这个图片,我是用的xpath来解析网页,当然也可以用bs4来进行解析,看个人喜好,该案例比较简单,但涉及的内容并不少。

1.分析每页的url地址栏

第一页:https://sc.chinaz.com/tupian/gougoutupian.html

第二页:https://sc.chinaz.com/tupian/gougoutupian_2.html

第三页:https://sc.chinaz.com/tupian/gougoutupian_3.html

可以看出来除了第一页以外,后面的每一页都是_页码,下划线+页码。所以这个规律很好找,就除了第一页以外,之后的每一页都拼接一个下划线+页码就可以完成url地址栏的获取。

2.定制请求对象

首先需要 定制请求对象需要的两个参数,一个是URL地址,一个headers,请求头。

因此第一步定义一个定制请求对象的函数,并且是一个含参有返回值的函数,参数用于接收传来的页码,并将得到的请求对象返回过去,用于下一步的获取内容。

首先就是url,url用if判断,除了第一页直接给https://sc.chinaz.com/tupian/gougoutupian.html这个地址以外,后面的每一页都是

url=‘https://sc.chinaz.com/tupian/gougoutupian_’+str(page)+’.html’,用来改变url地址,从而获取不同页的数据。

headers:可在浏览器中的开发者模式中去复制,并且是一个字典类型。

在这里插入图片描述

将url和headers两个参数传入urllib.request.Request()这个方法中,将会得到一个request。将这个请求对象返回,下一步将会用到。

def create_request(page):
    if(page==1):
        url='https://sc.chinaz.com/tupian/gougoutupian.html'
    else:
        url='https://sc.chinaz.com/tupian/gougoutupian_'+str(page)+'.html'
        headers={
    'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/101.0.0.0 Safari/537.36'
}
request=urllib.request.Request(url=url,headers=headers)
return request

3.获取响应内容

一样定义一个函数用于获取响应内容,封装起来。

通过urllib.request.urlopen(request)方法可以获取响应的respone,将其读取出来,respone.read().decode(‘utf-8’),注意编码格式,要和获取的一致,基本都是utf-8。这样就得到了网页的源码,具体需要的内容,通过下一步的xpath来筛选自己所需的内容。

def get_content(request):
    respone=urllib.request.urlopen(request)
    content=respone.read().decode('utf-8')
    return content

4.下载图片内容

为了将获取到的内容筛选下载下来,需要引入xpath库。

接下来就是解析数据,我们需要下载图片,先来分析下网页的内容。

在这里插入图片描述

所以我们获取先获取图片的名称,xpath为//*[@id=“container”]/div/div/a/img/@alt,将会返回一个列表名称

下面就是图片的链接地址,其中涉及到一个图片的懒加载。//*[@id=“container”]/div/div/a/img/@src2

在这里插入图片描述

就可以获取到它们的一个名字列表和下载地址列表。可是下载地址是https:,所以应该拼接起来。

在这里插入图片描述

然后最后用urllib.request.urlretrieve(url,filename),第一个参数传下载的地址,第二个则是文件的名字。
效果图如下:
在这里插入图片描述

最后完整的代码如下

#需求:爬取站长素材上的狗狗图片的前5页数据
#第一页
#https://sc.chinaz.com/tupian/gougoutupian.html
#第二页
#https://sc.chinaz.com/tupian/gougoutupian_2.html
#第三页
#https://sc.chinaz.com/tupian/gougoutupian_3.html

import urllib.request
from lxml import etree
#1.定制请求对象
def create_request(page):
    if(page==1):
        url='https://sc.chinaz.com/tupian/gougoutupian.html'
    else:
        url='https://sc.chinaz.com/tupian/gougoutupian_'+str(page)+'.html'

    headers={
        'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/101.0.0.0 Safari/537.36'
    }
    request=urllib.request.Request(url=url,headers=headers)
    return request


#2.获取内容
def get_content(request):
    respone=urllib.request.urlopen(request)
    content=respone.read().decode('utf-8')
    return content
#3.下载图片
def down_load(content):
    #将获取的内容,传进去用于解析数据
    tree=etree.HTML(content)
    #xpath解析数据,首先解析一下图片的名称,在解析图片的地址
    name_list=tree.xpath('//*[@id="container"]/div/div/a/img/@alt')
    src_list=tree.xpath('//*[@id="container"]/div/div/a/img/@src2')
    for i in range(len(name_list)):
        name=name_list[i]
        src=src_list[i]
        url='https:'+src
        urllib.request.urlretrieve(url=url,filename='./狗狗图片/'+name+'.jpg')


if __name__ == '__main__':
    start_page=int(input('请输入起始页'))
    end_page=int(input('请输入结束页'))
    #循环遍历页数
    for page in range(start_page,end_page+1):
        #定制请求对象
        request=create_request(page)
        #获取响应内容
        content=get_content(request)
        #批量下载图片
        down_load(content)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

python爬取站长素材上的图片 的相关文章

随机推荐

  • 49黑马QT笔记之利用TCP传输文件

    49黑马QT笔记之利用TCP传输文件 前提 黑马视频的代码第二次不能传输的原因是因为 客户端在第一次传输完成后 isStart false 即第二次无法接收文件信息并打开文件 所以他会出现 write device not open 我们在
  • 使用 FeignClient 进行微服务交互(微服务接口互相调用)

    先写一个公共方法 public String getSettingValue String name Map
  • Ros小车应用篇(一)——Ros小车wifiQT上位机

    Ros小车多功能QT上位机 代码仓库 https github com zhuchen99899 RosCar tree master Ros car pid test 小车嵌入式控制可以查看我的博客 https blog csdn net
  • Win10 开机密码破解

    1 开机 当出现Windows图标时 就强制关机 重复2 3次 系统便会进入自动修复 2 高级设置 gt 疑难解答 gt 高级选项 gt 命令提示符 3 依次输入 cd c windows system32 ren sethc exe ab
  • 为什么用GIF做埋点?

    原因 防止跨域拦截 一般而言 打点域名都不是当前域名 所以所有的接口请求都会构成跨域 而跨域请求很容易出现由于配置不当被浏览器拦截并报错 这是不能接受的 但图片的 src 属性并不会跨域 并且同样可以发起请求 防止阻塞页面加载 影响用户体验
  • linux FIO命令详解(一):磁盘IO测试工具 fio (并简要介绍iostat工具)

    FIO介绍 FIO是测试IOPS的非常好的工具 用来对磁盘进行压力测试和验证 磁盘IO是检查磁盘性能的重要指标 可以按照负载情况分成照顺序读写 随机读写两大类 FIO是一个可以产生很多线程或进程并执行用户指定的特定类型I O操作的工具 FI
  • 【技能树笔记】网络篇——练习题解析(一)

    目录 一 认识身边的计算机网络 1 1 常见的网络设备 1 2 网络中拓扑的分类 二 认识网络模型 2 1 网络模型概述 2 2 OSI模型 2 2 1 OSI参考模型 2 2 2 数据的加密和解密 2 3 TCP IP模型 2 3 1 T
  • WPF后台动态创建Grid行与列,并将控件添加到Grid中的指定行指定列

  • 算法基础复盘笔记Day10【动态规划】—— 线性DP

    作者主页 欢迎来到我的技术博客 个人介绍 大家好 本人热衷于Java后端开发 欢迎来交流学习哦 如果文章对您有帮助 记得关注 点赞 收藏 评论 您的支持将是我创作的动力 让我们一起加油进步吧 第一章 线性DP 一 数字三角形 1 题目描述
  • 如何使用 AWS 和 ChatGPT 创建最智能的多语言虚拟助手

    上周ChatGPT发布了 每个人都在尝试令人惊奇的事情 我也开始使用它并想尝试它如何使用AWS的AI 服务进行集成 结果非常棒 在这篇文章中 我将逐步解释我是如何创建这个项目的 这样你也可以做到 最重要的是 您无需成为AI 专家即可创建它
  • openvino是啥

    英特尔发布的开源框架 用于深度学习的推理优化与模型部署 openvino具体使用方法还是看官方文档比较好https docs openvino ai 支持多种框架 tensorflow caffe pytorch mxnet keras o
  • Wireshark的抓包和分析,看这篇就够了!

    点击上方蓝字 关注 程序IT圈 WireShark是一个网络封包分析软件 网络封包分析软件的功能是撷取网络封包 并尽可能显示出最为详细的网络封包资料 Wireshark使用WinPCAP作为接口 直接与网卡进行数据报文交换 在网络封包和流量
  • 【DDD架构】

    DDD domain driven design 领域驱动设计模型 一 DP domain primitive 1 什么是DP 2 为什么要用DP 2 1 API接口清晰度 2 2 数据验证和错误处理 2 3 业务代码的清晰度 3 DP原则
  • 彻底搞懂JDBC的运行过程

    转载自 https blog csdn net y277an article details 96937010 JDBC的作用 JDBC的全称是Java DataBase Connection 也就是Java数据库连接 我们可以用它来操作关
  • Qt 工程

    Qt 工程 工程文件 项目文件 QMake 添加模块 添加与特定平台有关的文件 文件不存在时停止 qmake 控制台输出调试信息 变量 Variables CONFIG HEADERS SOURCES FORMS INCLUDEPATH T
  • 测试用例设计方法2——边界值

    介于有效等价类和无效等价类之间 一 边界值 三点 上点 边界上的点 离点 离上点最近的点 根据上点的精度确定 内点 边界有效范围内的任意一点 如何确定离点 若边界是闭区间 则离点在外 如用户名长度 6 18 之间 上点为6 18 离点为5
  • 浅谈C++元编程

    随着 C 11 14 17 标准的不断更新 C 语言得到了极大的完善和补充 元编程作为一种新兴的编程方式 受到了越来越多的广泛关注 结合已有文献和个人实践 对有关 C 元编程进行了系统的分析 首先介绍了 C 元编程中的相关概念和背景 然后利
  • VS019创建C++工程基本步骤

    1 打开VS2019新建工程 2 选择C 空项目 点击下一步 3 设置项目名称和项目位置 然后点击创建 4 设置自己喜欢的布局方式 关于背景网上有很多设置方法 5 新建入口Main c工程 右键源文件 添加 新项目 6 选择C 文件 取个名
  • 持续集成与持续交付(CI/CD):探讨在云计算中实现快速软件交付的最佳实践

    文章目录 持续集成 CI 的最佳实践 持续交付 CD 的最佳实践 云计算环境下的特别注意事项 个人主页 程序员 小侯 CSDN新晋作者 欢迎 点赞 评论 收藏 收录专栏 云计算 文章内容 软件交付 希望作者的文章能对你有所帮助 有不足的地方
  • python爬取站长素材上的图片

    Python爬取站长素材上的图片 罗纳尔康 首先这是一个学习的案例 我将其记录下来 因为所学的内容有点多 爬取这个图片 我是用的xpath来解析网页 当然也可以用bs4来进行解析 看个人喜好 该案例比较简单 但涉及的内容并不少 1 分析每页