Python爬虫从入门到精通:(11)数据解析_站长素材图片的爬取(爬取俄罗斯高清图片名称和地址)* _Python涛哥

2023-11-17

站长素材图片的爬取(爬取俄罗斯高清图片名称和地址)

地址:https://sc.chinaz.com/tupian/eluosi.html
在这里插入图片描述

我们先来分析下页面,获取图片名称和地址定位:
在这里插入图片描述

我们很容易获取到了图片名称和地址是在<div id="container">/<div>/<div>/<a>/<img>标签下,我们用xpath来解析下:

headers = {
    'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/93.0.4577.82 Safari/537.36'
}
url = 'https://sc.chinaz.com/tupian/eluosi.html'
response = requests.get(url=url, headers=headers)
response.encoding = 'utf-8'
page_text = response.text

# 开始解析
tree = etree.HTML(page_text)
div_list = tree.xpath('//div[@id="container"]/div/div')


for div in div_list:
  	# 局部数据解析 
    title = div.xpath('./a/img/@alt')
    img_src = div.xpath('./a/img/@src')
    
    # 打印下,看下结果
    print(title,img_src)

在这里插入图片描述

我们发现,图片名称没问题,但地址却没有提取出来。。。

难道代码流程写错了吗?如果错的话,那名称怎么会正常提取的到呢?
在这里插入图片描述

好吧,我们再来分析下源码:

翻着翻着,我突然发现,后面的图片地址属性不是src,而是src2。

在这里插入图片描述

这是上面原因呢?

原来,图片在没加载的时候是src2,加载后那就是src。(我们可以在Network里的响应看下,这里肯定都是没加载的静态数据)

那我们提取的属性就应该是src2,那改下代码看下:

for div in div_list:
    title = div.xpath('./a/img/@alt')
    img_src = div.xpath('./a/img/@src2')
    print(title,img_src)

果然,全都获取到了。
在这里插入图片描述


上述问题解释

这里涉及到了又一个反爬机制:图片懒加载

反爬机制:图片懒加载,广泛应用在了一些图片的网站中。

只有当图片被显示在浏览器可视化范围之内,才会将img的伪属性变成真正的属性。

如果是requests发起的请求,requests请求是没有可视化范围,因此我们一定要解析的是img伪属性的属性值(图片地址)

到此,我的文章所学过的反爬机制:

roboys UA伪装 动态加载数据的捕获 图片懒加载

后面我们会学习更多的反爬机制!


好了,既然我们都获取到了,现在我们下载前五页的图片。

完整代码如下:

import requests
from lxml import etree
import os

# 创建文件夹保存图片
dirName = 'eluosi'
if not os.path.exists(dirName):
    os.mkdir(dirName)
    
headers = {
        'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/93.0.4577.82 Safari/537.36'
    }

# url模板
url = 'https://sc.chinaz.com/tupian/eluosi_%d.html'

# 循环5次,爬取5页
for page in range(1, 6):
    if page == 1:
        new_url = 'https://sc.chinaz.com/tupian/eluosi.html'
    else:
        new_url = format(url % page)

    response = requests.get(url=new_url, headers=headers)
    response.encoding = 'utf-8'
    page_text = response.text

    tree = etree.HTML(page_text)
    div_list = tree.xpath('//div[@id="container"]/div/div')
    
    # 局部数据分析
    for div in div_list:
        title = div.xpath('./a/img/@alt')[0]
        img_src = 'https:' + div.xpath('./a/img/@src2')[0]

        img_path = dirName + '/' + title + '.jpg'
        img_data = requests.get(url=img_src, headers=headers).content
        
        # 保存图片
        with open(img_path, 'wb+') as f:
            f.write(img_data)
        print(title + ' 下载成功!')

最后,肤白貌美大长腿的俄罗斯美女就下载到了硬盘了
在这里插入图片描述

关注 Python涛哥,学习更多Python知识!

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Python爬虫从入门到精通:(11)数据解析_站长素材图片的爬取(爬取俄罗斯高清图片名称和地址)* _Python涛哥 的相关文章

  • 在 Python 中解析 TCL 列表

    我需要在双括号上拆分以空格分隔的 TCL 列表 例如 OUTPUT 172 25 50 10 01 01 Ethernet 172 25 50 10 01 02 Ethernet Traffic Item 1 172 25 50 10 01
  • 计算另一个字符串中多个字符串的出现次数

    在 Python 2 7 中 给定以下字符串 Spot是一只棕色的狗 斑点有棕色的头发 斑点的头发是棕色的 查找字符串中 Spot brown 和 hair 总数的最佳方法是什么 在示例中 它将返回 8 我正在寻找类似的东西string c
  • Gunicorn 工作人员无论如何都会超时

    我正在尝试通过gunicorn运行一个简单的烧瓶应用程序 但是无论我做什么 我的工作人员都会超时 无论是否有针对应用程序的活动 工作人员在我设置任何内容后总是会超时timeout值到 是什么导致它们超时 当我发出请求时 请求成功通过 但工作
  • 如何在 __init__ 中使用await设置类属性

    我如何定义一个类await在构造函数或类体中 例如我想要的 import asyncio some code class Foo object async def init self settings self settings setti
  • NLTK 2.0分类器批量分类器方法

    当我运行此代码时 它会抛出一个错误 我认为这是由于 NLTK 3 0 中不存在batch classify 方法 我很好奇如何解决旧版本中的某些内容在新版本中消失的此类问题 def accuracy classifier gold resu
  • VSCode Settings.json 丢失

    我正在遵循教程 并尝试将 vscode 指向我为 Scrapy 设置的虚拟工作区 但是当我在 VSCode 中打开设置时 工作区设置 选项卡不在 用户设置 选项卡旁边 我还尝试通过以下方式手动转到文件 APPDATA Code User s
  • 从Django中具有外键关系的两个表中检索数据? [复制]

    这个问题在这里已经有答案了 This is my models py file from django db import models class Author models Model first name models CharFie
  • 在 Django Admin 中调整字段大小

    在管理上添加或编辑条目时 Django 倾向于填充水平空间 但在某些情况下 当编辑 8 个字符宽的日期字段或 6 或 8 个字符的 CharField 时 这确实是一种空间浪费 字符宽 然后编辑框最多可容纳 15 或 20 个字符 我如何告
  • Python 3d 绘图设置固定色阶

    我正在尝试绘制两个 3d 数组 第一个数组的 z 值在范围内 0 15 0 15 第二个来自 0 001 0 001 当我绘图时 色标自动遵循数据范围 如何设置自定义比例 我不想看到 0 001 的浅色 而应该看到 0 15 的浅色 如何修
  • Tensorboard SyntaxError:语法无效

    当我尝试制作张量板时 出现语法错误 尽管开源代码我还是无法理解 我尝试搜索张量板的代码 但不清楚 即使我不擅长Python 我这样写路径C Users jh902 Documents logs因为我正在使用 Windows 10 但我不确定
  • 打印数字时添加千位分隔符[重复]

    这个问题在这里已经有答案了 我真的不知道这个问题的 名称 所以它可能是一个不正确的标题 但问题很简单 如果我有一个数字 例如 number 23543 second 68471243 我想要它使print 像这样 23 54368 471
  • 为什么一旦我离开内置的运行服务器,Django 就无法找到我的管理媒体文件?

    当我使用内置的简单服务器时 一切正常 管理界面很漂亮 python manage py runserver 但是 当我尝试使用 wsgi 服务器为我的应用程序提供服务时django core handlers wsgi WSGIHandle
  • 使用 Python Oauthlib 通过服务帐户验证 Google API

    我不想使用适用于 Python 的 Google API 客户端库 但仍想使用 Python 访问 Google APIOauthlib https github com idan oauthlib 创建服务帐户后谷歌开发者控制台 http
  • 当字段是数字时怎么说...在 mongodb 中匹配?

    所以我的结果中有一个名为 城市 的字段 结果已损坏 有时它是一个实际名称 有时它是一个数字 以下代码显示所有记录 db zips aggregate project city substr city 0 1 sort city 1 我需要修
  • 尽管我已在 python ctypes 中设置了信号处理程序,但并未调用它

    我尝试过使用 sigaction 和 ctypes 设置信号处理程序 我知道它可以与python中的信号模块一起使用 但我想尝试学习 当我向该进程发送 SIGTERM 时 但它没有调用我设置的处理程序 只打印 终止 为什么它不调用处理程序
  • pandas - 包含时间序列数据的堆积条形图

    我正在尝试使用时间序列数据在 pandas 中创建堆积条形图 DATE TYPE VOL 0 2010 01 01 Heavy 932 612903 1 2010 01 01 Light 370 612903 2 2010 01 01 Me
  • Python GTK+ 画布

    我目前正在通过 PyGobject 学习 GTK 需要画布之类的东西 我已经搜索了文档 发现两个小部件似乎可以完成这项工作 GtkDrawingArea 和 GtkLayout 我需要一些基本函数 如 fillrect 或 drawline
  • 在 Google App Engine 中,如何避免创建具有相同属性的重复实体?

    我正在尝试添加一个事务 以避免创建具有相同属性的两个实体 在我的应用程序中 每次看到新的 Google 用户登录时 我都会创建一个新的播放器 当新的 Google 用户在几毫秒内进行多个 json 调用时 我当前的实现偶尔会创建重复的播放器
  • 每当使用 import cv2 时 OpenCV 都会出错

    我在终端上使用 pip3 install opencv contrib python 安装了 cv2 并且它工作了 但是每当我尝试导入 cv2 或运行导入了 cv2 的 vscode 文件时 在 python IDLE 上它都会说 Trac
  • 将索引与值交换的最快方法

    考虑pd Series s s pd Series list abcdefghij list ABCDEFGHIJ s A a B b C c D d E e F f G g H h I i J j dtype object 交换索引和值并

随机推荐

  • 数字万用表的使用

    参考 连3岁小孩子都能看懂的万用表使用方法 地址 https www bilibili com video BV1Gx411z7x2 p 1 vd source cc0e43b449de7e8663ca1f89dd5fea7d 目录 万用表
  • IDEA中使用UT测试过程中的一些小问题

    当查看代码覆盖率结果 快捷键Ctrl Alt F6 当运行测试查看代码覆盖率的时候 出现如下图所示的界面 No coverage results Click Edit to fix configuration settings 解决办法就是
  • 【区块链学习】Merkle Patricia Tree (MPT) 以太坊中的默克尔树

    本篇博文是自己学习mpt的过程 边学边记录 很多原理性内容非自己原创 好的博文将会以链接形式进行共享 一 什么是mpt MPT是以太坊中的merkle改进树 基于基数树 即前缀树改进而来 大大提高了查找效率 二 前缀树 MPT中的P 就是前
  • Linux 中的 cd 命令及示例

    cd命令在Linux 中称为更改目录命令 它用于有效地从当前工作目录移动到系统中的不同目录 Linux 中 cd 命令的语法 光盘 目录 cd directory 在这里 将 directory 替换为您要导航到的目标目录的路径 cd 命令
  • STM32的I/O口的8种工作模式

    转自http www openedv com posts list 21980 htm 浮空 顾名思义就是浮在空中 上面用绳子一拉就上去了 下面用绳子一拉就沉下去了 开漏 就等于输出口接了个NPN三极管 并且只接了e b c极 是开路的 你
  • 机械臂颜色识别案例

    大家好 我就是那个走在路上经常捡到宝的铁熊老师 那么今天捡到了啥好玩的东西呢 一台五自由度机械臂 从天而降出现在我面前 这话说出口 我自己都不信 哪有那么好的运气 其实这是朋友送我玩的 你也想要这台机械臂么 什么 你不要机械臂 你想要那个朋
  • C++ 游戏开发 打地鼠详解 (含.h文件和.cpp文件)

    基于easyx的打地鼠游戏 期末大作业 C语言版本请见 C语言 打地鼠游戏 超级详解 各个函数与算法 设计思路与流程 一 游戏简介 游戏简介 疯狂打地鼠 是一款经典的单机休闲益智类小游戏 调皮的小地鼠们又出来活动了 你需要做的就是将他们砸回
  • 关于Chrome浏览器这点儿事儿(一):基本尝试修改Chrome启动参数实现全屏禁用双指触摸缩放

    最近 刚上任项目boss 接触客户第一个需求便是浏览器需求 需求如下 其中标注红色的需求 是让我花了几十种方式尝试的主要源 自己做过C 知道可以嵌入外壳 有很多种方案 当然了参考了一位仁兄的文章 https www cnblogs com
  • 二进制安装mysql

    下载安装包 下载mysql二进制安装包 yum y install lrzsz numactl wget http mirrors 163 com mysql Downloads MySQL 5 7 mysql test 5 7 38 li
  • error C2676: 二进制“<”:“const _Ty”不定义该运算符或到预定义运算符可接收的类型的转换

    项目场景 C 中写优先级序列 序列内存的是自定义的结构体 在自定义比较方式的时候系统报错 error C2676 二进制 lt const Ty 不定义该运算符或到预定义运算符可接收的类型的转换 with Ty Node 问题描述 prie
  • Javascript使用turndown 将html 转为md

    1 安装turndown npm i turndown 2 使用trundown并保存为md文件 htmlToMarkdown let down new turndown let md down turndown this html let
  • bin、hex、elf、axf文件解析

    冰冻三尺非一日之寒 滴水穿石非一日之功 文章目录 引言 文件分类 1 bin文件 2 hex文件 3 axf文件 4 elf文件 总结 参考资料 深度理解编译过程 参考资料 深度理解编译文件 引言 bin hex elf axf作为嵌入式开
  • python数据可视化07

    1 绘制等高线图 import numpy as np import matplotlib pyplot as plt def calcu elevation x1 y1 h 1 x1 2 x1 5 y1 3 np exp x1 2 y1
  • 每日一题: 扑克牌中的顺子(C++)

    题目描述 从扑克牌中随机抽5张牌 判断是不是一个顺子 即这5张牌是不是连续的 2 10为数字本身 A为1 J为11 Q为12 K为13 而大 小王为 0 可以看成任意数字 A 不能视为 14 示例 1 输入 1 2 3 4 5 输出 Tru
  • Torchserve打包和部署你训练的深度学习模型

    一 Torchserve介绍 Torchserve是Facebooke公司开发的在线深度学习模型部署框架 它可以很方便的部署pytorch的深度学习模型 读者可以访问Github地址获取最新功能和详细说明 官方地址https github
  • Shell 中常用 Date 日期的计算

    在使用 Crontab 定时任务和 Shell 脚本切割 Nginx 日志文件时 要用到时间戳 当月 上月 下月 上月初 上月末 下月初 下月末等等 其中有些日期不能直接获取 需要经过一定的计算才能得到 一 Date 基础格式化 格式 输出
  • JVM性能优化 —— 类加载器,手动实现类的热加载

    一 类加载的机制的层次结构 每个编写的 java 拓展名类文件都存储着需要执行的程序逻辑 这些 java 文件经过Java编译器编译成拓展名为 class 的文件 class 文件中保存着Java代码经转换后的虚拟机指令 当需要使用某个类时
  • qt5.5程序打包发布以及依赖

    玩qt5也有一段时间了 惭愧的是一直没有好好的发布过程序 因为写的都是小程序没啥需要用到发布 而且qt也说不上很熟悉 本来打算到基本掌握qt之后再来研究研究怎么打包程序 最近晚上的空闲时间多了 闲着也是闲着 于是便来试试 在网上搜索了一下资
  • Newifi3(新路由3)刷潘多拉(Pandora)固件

    最近在淘宝入手了一个二手的newifi3 主要是因为它内存大 而且性价比相当高 512M的ddr2和32M的flash买下来才100左右 下面介绍如何刷 Pandora固件 步骤 1 找一根网线 一端插入路由器wan口 一端插入电脑 把电脑
  • Python爬虫从入门到精通:(11)数据解析_站长素材图片的爬取(爬取俄罗斯高清图片名称和地址)* _Python涛哥

    站长素材图片的爬取 爬取俄罗斯高清图片名称和地址 地址 https sc chinaz com tupian eluosi html 我们先来分析下页面 获取图片名称和地址定位 我们很容易获取到了图片名称和地址是在 div div div