【爬虫】7.3. CSS位置偏移反爬案例分析与实战

这篇具有很好参考价值的文章主要介绍了【爬虫】7.3. CSS位置偏移反爬案例分析与实战。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

CSS位置偏移反爬案例分析与实战

1. 案例分析

上一节学习了Selenium这个自动化测试工具,但这个工具不是万能的,不容易爬取的数据依然存在,例如网页利用CSS控制文字的偏移位置,或者通过一些特殊的方式隐藏关键信息,这都会对数据爬取造成干扰。可以看这一部分代码:

from selenium import webdriver
from pyquery import PyQuery as pq
from selenium.webdriver.common.by import By
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.support.wait import WebDriverWait

browser = webdriver.Chrome()
browser.get('https://antispider3.scrape.center/')
WebDriverWait(browser, 10) \
    .until(EC.presence_of_all_elements_located((By.CSS_SELECTOR, '.item')))
html = browser.page_source
doc = pq(html)
names = doc('.item .name')
for name in names.items():
    print(name.text())
Wonder
清 白 风 家
法 老 的 宠 妃 终 结 篇 ( 上 下 册 )
( ) 二 己 为 士 知 册 全
年 一 孩 追 些 们 那 女 起 的 我 ,
全 ( 册 三 城 倾 我 ) 非
明 朝 儿 那 事 些

以上是这一段代码的部分输出结果,可以看出来,大部分书名都是乱序的,这是因为网页使用了CSS位置偏移,一下是“清白家风”这一本书的书名部分的代码:

<h3 data-v-7f1a77ef="" class="m-b-sm name"><span data-v-7f1a77ef="" class="char" style="left: 0px;"></span><span data-v-7f1a77ef="" class="char" style="left: 16px;"></span><span data-v-7f1a77ef="" class="char" style="left: 48px;"></span><span data-v-7f1a77ef="" class="char" style="left: 32px;"></span></h3>

我们可以看到span中的style属性,表示CSS样式,left的取值各不相同,并且我们在查看span节点的完整样式时候,可以看到:

.item .bottom .name .char[data-v-7f1a77ef] {
    display: inline-block;
    position: absolute;
}

以上是span节点的两个额外样式,是display和position,而后者表示绝对定位,设置这个样式之后,就可以通过left样式控制span节点在页面中的偏移位置了。了解了为什么会出现这样的情况之后,我们就可以直接通过这个偏移位置来重新安排一下文字的顺序。

这里穿插一些题外话:span节点里面的文本有格式,而pyquery可以省略这些格式,使用get_attribute()或者text就不行了,所以建议复习一下puquery。以下是一个span节点,可以看出格式问题:

<span data-v-7f1a77ef="" class="char" style="left: 0px;"></span>

2.爬取实战

思路:利用正则表达式将偏移量提取出来,接着根据偏移量对字体进行排序处理。文章来源地址https://www.toymoban.com/news/detail-703161.html

from selenium import webdriver
from pyquery import PyQuery as pq
from selenium.webdriver.common.by import By
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.support.wait import WebDriverWait
import re


def parse_name(name_html):
    has_whole = name_html('.whole')
    if has_whole:
        return name_html.text()
    else:
        chars = name_html('.char')
        items = []
        for char in chars.items():
            items.append({
                'text': char.text().strip(),
                'left': int(re.search('(\d+)px', char.attr('style')).group(1))
            })
        items = sorted(items, key=lambda x: x['left'], reverse=False)
        return ''.join([item.get('text') for item in items])


browser = webdriver.Chrome()
browser.get('https://antispider3.scrape.center/')
WebDriverWait(browser, 10) \
    .until(EC.presence_of_all_elements_located((By.CSS_SELECTOR, '.item')))
html = browser.page_source
doc = pq(html)
names = doc('.item .name')

for name_html in names.items():
    name = parse_name(name_html)
    print(name)
browser.close()

到了这里,关于【爬虫】7.3. CSS位置偏移反爬案例分析与实战的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Logistic回归(逻辑回归)实战案例分析

    Lgistic回归也叫逻辑回归,是广义线性回归的一种,通常用于解决二分类问题。 表达式如下: 经过logit变换,则可以写成广义线性表达式 通常做回归是用其广义线性表达式,且logistic回归的结果概率表现为S型曲线,一般以小于0.5的样本都分类为0,大于0.5的样本都分类为1。

    2024年04月25日
    浏览(43)
  • 某网站JS加密、OB混淆与CSS反爬实战分析

      最近一段时间接触了一些小说网站的业务。发现很多的小说网站,甚至一些小站它们的安全防护措施做的都很到位!例如上次说到的的五秒盾也是存在于一个小说小站。今天要讲的这个网站它集 JS加密 、 ob混淆 、 CSS反爬 于一体 目标站点 : aHR0cHM6Ly93d3cuaG9uZ3NodS5jb20vY29

    2024年02月12日
    浏览(47)
  • C++ 软件常用分析工具及项目实战问题分析案例集锦

    目录 1、库依赖关系查看工具Dependency Walker 2、GDI对象查看工具GDIview 3、PE信息查看工具PeViewer/MiTeC EXE Explorer 4、进程信息查看工具Process Explorer 5、进程监控工具Process Monitor 6、API函数调用监测工具API Monitor C++软件异常排查从入门到精通系列教程(专栏文章列表,欢迎订阅,持续

    2024年02月03日
    浏览(51)
  • Python实现因子分析(附案例实战)

            因子分析(Factor Analysis)是一种数据简化的技术。它通过研究众多变量之间的内部依赖关系探求观测数据中的基本结构,并用少数几个假想变量来表示其基本的数据结构。这几个假想变量能够反映原来众多变量的主要信息。原始的变量是可观测的显在变量,而假想

    2024年02月02日
    浏览(37)
  • 【SPSS】相关分析和偏相关分析详细操作过程(附案例实战)

    🤵‍♂️ 个人主页:@艾派森的个人主页 ✍🏻作者简介:Python学习者 🐋 希望大家多多支持,我们一起进步!😄 如果文章对你有帮助的话, 欢迎评论 💬点赞👍🏻 收藏 📂加关注+ 目录 相关分析与散点图 相关系数  使用SPSS进行相关分析  偏相关分析   相关分析要点 相

    2024年02月01日
    浏览(62)
  • 架构师的36项修炼-09架构实战案例分析

    本课时的主题是架构案例分享,通过案例分析来加深对前面所学内容的理解。下面将分析三种不同的系统架构案例。 1.分析初创互联网公司的架构演化案例,看一个小的系统架构是如何演化成一个较为成熟的、能够承受百万级订单的互联网系统架构。 2.分析一个分布式存储的

    2024年01月24日
    浏览(51)
  • 【Python爬虫案例】抖音下载视频+X-Bogus参数JS逆向分析

    选择自己感兴趣的抖音博主,本次以“经典老歌【车载U盘】”为例 每次请求的页面会有很多接口,需要对接口进行筛选: 第一步筛选XHR筛选 第二步筛选URL中带有post 通过筛选play_add值找到视频的地址 通过对比两次请求发现只有X-Bogus数值会有变化,max_cursor是用翻页,后文再

    2024年03月15日
    浏览(124)
  • 【Python案例实战】水质安全分析及建模预测

    1.水资源的重要性 水是生命之源,是人类生存和发展的基础。它是生态系统中不可或缺的组成部分,对于维系地球上的生命、农业、工业、城市发展等方面都具有至关重要的作用。 2.水质安全与人类健康的关系 水质安全直接关系到人类的健康和生存。水中的污染物和有害物质

    2024年02月03日
    浏览(78)
  • 企业Spark案例--酒店数据分析实战提交

    第1关:数据清洗--过滤字段长度不足的且将出生日期转: package com.yy   import org.apache.spark.rdd.RDD import org.apache.spark.sql.{DataFrame, Dataset, SparkSession} object edu{     /**********Begin**********/     // 此处可填写相关代码     case class Person(id:String,Name:String,CtfTp:String,CtfId:String,G

    2024年02月09日
    浏览(58)
  • 知识图谱之汽车实战案例综述与前瞻分析

    目录 知识图谱的前置介绍 什么是知识图谱 知识图谱概念由来 知识图谱总体架构  常用的获取知识的方法  网络爬虫 wikidata 知识图谱模型设计 设计方法论  UMLS语义网络 知识图谱模型设计之归纳法 模型设计流程 产品生命周期模型  高层抽象可复用 底层明细需适配 开源框架

    2024年02月02日
    浏览(42)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包