当前位置: 首页 > news >正文

CSS 伪元素也可以被用于反爬案例?来学习一下。26

先说一下什么是 CSS 中的伪元素,CSS 伪元素的概念是指在 CSS 中使用的一些特殊的元素,它们不存在于 HTML 文档中,而是由浏览器生成的元素,用于提供额外的样式控制。这些伪元素在 HTML 代码中不存在,但可以在 CSS 中通过特定的语法来选择它们。

文章目录

    • 常见的 CSS 伪元素
    • 用 CSS 伪元素显示数字
    • CSS 伪元素反爬

常见的 CSS 伪元素

  • :before :允许在元素之前插入生成内容;
  • :after :允许在元素之后插入生成内容;
  • :selection 伪元素用于定义被选中文本的样式,如颜色和背景色;
  • :placeholder-shown伪元素用于定义带有 placeholder 属性的 input 元素或 textarea 元素中 placeholder 文本的样式,当用户没有在输入框中输入内容时,placeholder 文本才会显示;
  • dir() 伪元素,用于根据元素的文本方向(ltr 或 rtl)来应用样式;
  • :lang() 伪元素,用于根据元素的 lang 属性来应用样式;
  • :fullscreen 伪元素,用于在元素进入全屏模式时应用样式;
  • :indeterminate 伪元素,用于定义 input[type="checkbox"] 元素不确定状态的样式;

本次反爬案例中,我们使用的就是 :before:after 伪元素。

用 CSS 伪元素显示数字

在爬虫训练场中,可以直接建立一个伪元素反爬页面,然后输入如下内容。

{% extends "base.html" %} {% block link %}{% endblock link %} {% block style %}
<style type="text/css">
  .txt::after {
    content: "123";
    font-size: 16px;
  }
</style>

{% endblock style %} {% block content %}
<div class="container">
  <span class="txt"></span>
</div>
{% endblock %}

运行代码之后,你可以看到页面渲染效果,下图所示的数字 123 是无法被选中的,而且在网页 DOM 元素中并不存在,它是由 after 添加到目标元素 span 之后的内容,注意伪元素是在元素内容之后插入,不会占用文档流中的空间。

CSS 伪元素也可以被用于反爬案例?来学习一下。26
有了这些基础之后,那我们就可以实现一个比较【有效果】的反爬案例了,将某些关键内容使用伪元素渲染。

CSS 伪元素反爬

实现伪元素反爬的重点其实是动态 CSS 文件生成,在这里我们模拟读取数据,然后使用 IO 读写,将 css 文件渲染到前台即可。

# CSS 伪类实现反爬
@antispider.route('/css_antispider')
def css_antispider():

    with open(app.root_path + '/data/blogs.json', 'r', encoding='utf-8') as f:
        json_data = json.loads(f.read())

    # 将数据生成到 CSS 中
    css_str = ""
    for index, item in enumerate(json_data):
        browse = item["browse"]
        comment = item["comment"]
        collection = item["collection"]

        css_str += f""".browse{index+1}::after{{content:'{browse}';font-size:14px;}}.comment{index+1}::after{{content:'{comment}';font-size:14px;}}.collection{index+1}::after{{content:'{collection}';font-size:14px;}}\n"""

    with open(app.static_folder + '/css/blog_antispider.css', 'w') as f:
        f.write(css_str)

    return render_template("antispider/css.html",data=json_data)

其中重点查看的是 CSS 代码循环部分,我们动态生成了三个类,而且用索引为其进行编号,单独一行得到的 CSS 样式如下。

.browse1::after {
  content: "5950";
  font-size: 14px;
}
.comment1::after {
  content: "49";
  font-size: 14px;
}
.collection1::after {
  content: "206";
  font-size: 14px;
}

本案例使用了 12 条数据,最终得到的结果如下所示。

CSS 伪元素也可以被用于反爬案例?来学习一下。26
前台渲染数据时,只要遵循 css 样式表中的规则即可。

详细代码可以在 爬虫训练场 站点查看,示例代码如下所示。

CSS 伪元素也可以被用于反爬案例?来学习一下。26
为了提高页面加载速度,我们在 Python 中对刚刚生成的 CSS 文件进行一下压缩,使用的库是 csscompressor,安装之后参考下述代码对 CSS 文件进行压缩。

from csscompressor import compress

compressed_css = compress(css_str)

with open(app.static_folder + '/css/blog_antispider.min.css', 'w') as f:
    f.write(compressed_css)

至此,完成本反爬案例,具体地址请访问:CSS 伪元素反爬

CSS 伪元素也可以被用于反爬案例?来学习一下。26

📢📢📢📢📢📢
💗 你正在阅读 【梦想橡皮擦】 的博客
👍 阅读完毕,可以点点小手赞一下
🌻 发现错误,直接评论区中指正吧
📆 橡皮擦的第 833 篇原创博客

从订购之日起,案例 5 年内保证更新

  • ⭐️ Python 爬虫 120,点击订购 ⭐️
  • ⭐️ 爬虫 100 例教程,点击订购 ⭐️

相关文章:

  • 给网站做认证/郑州关键词网站优化排名
  • 先做网站还是先申请域名/百度信息流广告推广
  • 公司建设网站申请报告/品牌网络推广怎么做
  • 长沙网站建设长沙/搜索大全浏览器
  • 合肥做网站便宜/网络优化器
  • 用web做购物网站怎么做搜索/服务营销包括哪些内容
  • 医疗电气设备安规术语理解
  • 从南丁格尔图到医学发展史
  • Delphi 11.2 安装 CnWizards 组件包
  • 基础数字(一)位运算 哈希(数组中元素出现次数)
  • 高精度减法【c++】超详细讲解
  • WPS Office 2019 版本 excel透视图创建及删除
  • 完美Crack:Froala Editor 4.0.16 Patch
  • Jenkins配置邮箱接收构建通知
  • python学习笔记---进程和线程【廖雪峰】
  • Spring学习系列(二)
  • 汽车智能化,集度做加法
  • [idekCTF 2023] Malbolge I Gluttony,Typop,Cleithrophobia,Megalophobia