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

[爬虫]解决机票网站文本混淆问题-实战讲解

 前言
最近有遇到很多小伙伴私信向我求助,遇到的问题基本上都是关于文本混淆或者是字体反爬的问题。今天给大家带来其中一个小伙伴的实际案例给大家讲讲解决方法

📝个人主页→数据挖掘博主ZTLJQ的主页

b1691e6f246947eeb06ee06469621bc2.gif

个人推荐python学习系列:

☄️爬虫JS逆向系列专栏 - 爬虫逆向教学

☄️python系列专栏 - 从零开始学python


首先呢我们要讲的就是去哪儿网实战案例,那么私信我的这位小伙伴呢是想爬机票的信息,那么我们首先第一步就是打开网站

 打开网站以后呢,我们就可以随便选择一个飞机的方向,比如我选择北京到马尼拉的机票,点击以后就会出现这个画面如下:

 我们可以看到,每一个时间段、航班的不同都会产生不同的价格,那么按照平时我们看到这样的静态网站直接打开F12定位一下价格,用XPATH或者正则表达式就直接爬取完毕了,但是这个问题就出现在这里了,让我们打开F12抓包工具,定位到价格会出现如下图所示的画面:

网页显示的价格

 网页源码中定位到标签元素的价格

 我们可以看到,b标签下的i标签拼凑起来是978 和原本的价格971是不一样的,但是我们又可以发现一个规律,b标签下面还有一个b标签,这个b标签中的1就是我们需要的价格,如下图:

 似乎我们已经找对方向了,那么接下来我们多看看几个价格,找一下其中的规律,我们接着往下面看一个价格如下图:

网页显示的价格

  网页源码中定位到标签元素的价格

 我们会发现b标签下的i标签是9412明显不是我们想要的数据,但是下面的b标签中131不就是我们需要的数据吗?如下图:

 这里我们会发现9412中最后一个2是我们要的数据,下面的b标签中131也是我们需要的数据,这个数据再按顺序排列一下就是1312就成为了我们的价格,但是这个顺序是怎么看的呢?我们仔细看,下面的b标签中style元素中有一项 left:-64px,这个值得引起我们的注意,在前端中px代表的是像素,也就是移动的举例,left表示左边,我们发现前面有一个width=16px,是不是说明每一个数字的占位宽带代表着16个像素,而1这个数字要向左移动64个像素,也就是最前面,这样就说的过去了,如下图:

 

 

那么我们就可以知道,上面的i标签是用来迷惑我们的,下面的b才是我们需要爬取的数字,并且b标签的style代表的是偏移的位置,也就是用来帮助我们对数字进行排序的,那么有了这个思路我们就可以开始写代码了。

首先呢我们先写一个文本,可以直接复制机票网站源码中偏移的标签

"""text = """
<em class="rel"><b style="width:64px;left:-64px"><i title="1275" style="width: 16px;">4</i><i title="1275" style="width: 16px;">2</i><i title="1275" style="width: 16px;">6</i><i title="1275" style="width: 16px;">5</i></b><b title="1275" style="width: 16px;left:-32px">7</b><b title="1275" style="width: 16px;left:-16px">5</b><b title="1275" style="width: 16px;left:-64px">1</b>
</em>
"""

 接下来导入相应的库,然后写一个空的列表,先把所有的i标签文本获取下来,存入到空列表当中,如下图:

 接下来呢,我们根据上面的规律,需要替换的i标签只有后面3个,所有我们只取新建列表的后3个数据,然后准备替换成b标签中的数据,其次我们需要获取b标签中的文本数据也就是数字,还有style中偏移的数据,用来准备替换新建列表中的排序顺序。

 最后获取style的值,替换偏移的数字即可

下面是所有的代码大家可以参考: 

text = """
<em class="rel"><b style="width:64px;left:-64px"><i title="1275" style="width: 16px;">4</i><i title="1275" style="width: 16px;">2</i><i title="1275" style="width: 16px;">6</i><i title="1275" style="width: 16px;">5</i></b><b title="1275" style="width: 16px;left:-32px">7</b><b title="1275" style="width: 16px;left:-16px">5</b><b title="1275" style="width: 16px;left:-64px">1</b>
</em>
"""import re
from lxml import etreecontent = etree.HTML(text)# 先保存列表 到占位的数据
zhanwei = []
for i in content.xpath('//em[@class="rel"]/b/i'):zhanwei.append(i.text)# 定位到后面3个b标签 也就是去除第一个先
tag = content.xpath('//em[@class="rel"]/b')[1:]
a1 = [(i.text,i.xpath('./@style')[0]) for i in tag]
# 获取styles的偏移值
for p,style in a1:styles = re.findall('width: 16px;left:-(.*?)px',style)[0]print(styles)# 替换 偏移值zhanwei[-int(styles) // 16] = pprint(zhanwei)

当然可能有的小伙伴没有见过-int这种写法,其实还有一种写法,我给大家举例让大家对比使用

# 2种写法
"""
for p,style in a1:styles = re.findall('width: 16px;left:(.*?)px',style)[0]print(styles)# 替换 偏移值zhanwei[int(styles) // 16] = p
""""""
for p,style in a1:styles = re.findall('width: 16px;left:-(.*?)px',style)[0]print(styles)# 替换 偏移值zhanwei[-int(styles) // 16] = p
"""

那么我们就可以完成这种偏移的数据的爬取了,具体大家想要爬取那些数据,大家可以自行写代码,方法和思路都教给大家了,大家加油吧!!!

相关文章:

[爬虫]解决机票网站文本混淆问题-实战讲解

前言 最近有遇到很多小伙伴私信向我求助&#xff0c;遇到的问题基本上都是关于文本混淆或者是字体反爬的问题。今天给大家带来其中一个小伙伴的实际案例给大家讲讲解决方法 &#x1f4dd;个人主页→数据挖掘博主ZTLJQ的主页 ​​ 个人推荐python学习系列&#xff1a; ☄️爬虫J…...

【已解决】Flask项目报错AttributeError: ‘Request‘ object has no attribute ‘is_xhr‘

文章目录 报错及分析报错代码分析 解决方案必要的解决方法可能有用的解决方法 报错及分析 报错代码 File "/www/kuaidi/6f47274023d4ad9b608f078c76a900e5_venv/lib/python3.6/site-packages/flask/json.py", line 251, in jsonifyif current_app.config[JSONIFY_PR…...

【Java基础教程】Java学习路线攻略导图——史诗级别的细粒度归纳,持续更新中 ~

Java学习路线攻略导图 上篇 前言1、入门介绍篇2、程序基础概念篇3、包及访问权限篇4、异常处理篇5、特别篇6、面向对象篇7、新特性篇8、常用类库篇 前言 &#x1f37a;&#x1f37a; 各位读者朋友大家好&#xff01;得益于各位朋友的支持和关注&#xff0c;我的专栏《Java基础…...

IntelliJ IDEA 2023.1 更新内容总结

IntelliJ IDEA 2023.1 更新内容总结 * 主要更新内容 * UI 大改版 * 性能改进项 * 其它更新内容IntelliJ IDEA 2023.1 更新内容总结 主要更新内容 IntelliJ IDEA 2023.1 针对新的用户界面进行了大量重构,这些改进都是基于收到的宝贵反馈而实现的。官方还实施了性能增强措施, …...

什么是计算机蠕虫?

计算机蠕虫诞生的背景 计算机蠕虫的诞生与计算机网络的发展密切相关。20世纪60年代末和70年代初&#xff0c;互联网还处于早期阶段&#xff0c;存在着相对较少的计算机和网络连接。然而&#xff0c;随着计算机技术的进步和互联网的普及&#xff0c;计算机网络得以迅速扩张&…...

【机器学习】吴恩达课程1-Introduction

一、机器学习 1. 定义 计算机程序从经验E中学习&#xff0c;解决某一任务T&#xff0c;进行某一性能P&#xff0c;通过P测定在T上的表现因经验E而提高。 2. 例子 跳棋程序 E&#xff1a;程序自身下的上万盘棋局 T&#xff1a;下跳棋 P&#xff1a;与新对手下跳棋时赢的概…...

DBC转excel(python语言)

重复造轮子&#xff0c;只是为了熟悉一下DBC格式。 与同类工具的不同点&#xff1a; 能批量转换在同一文件夹下的所有DBC&#xff0c;省时省力。很多同类工具转换后的excel列宽较小&#xff0c;不能直接显示全部信息。本代码使用了自适应的列宽&#xff0c;看起来更方便。** …...

Java集合(List、Set、Map)

Java中的集合是用于存储和组织对象的数据结构。Java提供了许多不同的集合类&#xff0c;包括List、Set和Map等&#xff0c;以满足不同的需求。下面将介绍一些常见的Java集合类及其使用方法。 一、List List是一个有序的集合&#xff0c;它允许元素重复出现&#xff0c;并提供…...

Linux--只执行一次的计划任务--at命令

Linux–只执行一次的计划任务–at命令 文章目录 Linux--只执行一次的计划任务--at命令一、atd的启动和at的运行方式二、at总结 一、atd的启动和at的运行方式 atd的启动: systemctl restrat atd #重新启动atd这个服务 systemctl enable atd #让这个服务开机自启动 sy…...

关于贪心算法的一个小结

下面的内容主要参考了数据结构与算法之美。 贪心算法的应用有&#xff1a; 霍夫曼编码&#xff08;Huffman Coding&#xff09; Prim和Kruskal最小生成树算法 01背包问题(当允许取部分物品的时候) 分糖果 我们有m个糖果和n个孩子。我们现在要把糖果分给这些孩子吃&#xff…...

五、DQL-2.基本查询

一、数据准备 1、删除表employee&#xff1a; drop table employee; 2、创建表emp&#xff1a; 3、添加数据&#xff1a; 4、查看表数据&#xff1a; 【代码】 -- 查询数据--------------------------------------------------------- drop table emp;-- 数据准备-----------…...

SSL证书常见问题:SSL证书的概念和作用

什么是SSL证书&#xff1f; SSL证书是一种数字证书&#xff0c;它与身份证、驾照的功能一样&#xff0c;用于证明网站的身份。SSL证书是由全球信任的证书颁发机构&#xff08;CA&#xff09;在验证服务器身份后颁发&#xff0c;安装SSL证书后会激活HTTPS协议&#xff0c;在用户…...

J2EEXML建模

目录 用一个xml-config文件实例&#xff1a; 先看config.xml文件 再看 ActionModel ConfigModel ActionNotFoundException ForwardNotFoundException ConfigModelFactory ActionDuplicateDefinitionException ForwardDuplicateDefinitionException InvalidPathExcept…...

vue中export和export default

参考&#xff1a;vue中export和export default的使用 参考&#xff1a;vue里的export default...

转职做项目经理,我为什么选择PMP?

老实说&#xff0c;在学习PMP之前&#xff0c;我做了很长时间的思想斗争&#xff0c;一是平时工作有些忙&#xff0c;没有大块儿时间集中学习&#xff1b;二是不确定考完之后是否真能用上。但现在我可以很明确的告诉每一个想学习PMP的人&#xff1a;放心学吧&#xff0c;知识不…...

LangChain(5)Conversational Agents

Large Language Models (LLMs) 在语义知识方面表现不错&#xff0c;但也有一些不足&#xff0c;如&#xff1a;不能正确计算数学公式、无法获取最新知识新闻 通过 Agents 可以赋予 LLMs 更多能力&#xff0c;让LLM能够计算、上网查询 agent 简单使用 from langchain import …...

【云原生】Kubernetes临时容器

临时容器 特性状态&#xff1a; Kubernetes v1.25 [stable] 本页面概述了临时容器&#xff1a;一种特殊的容器&#xff0c;该容器在现有 Pod 中临时运行&#xff0c;以便完成用户发起的操作&#xff0c;例如故障排查。 你会使用临时容器来检查服务&#xff0c;而不是用它来构建…...

Jenkins+Robot 接口自动化测试

目录 前言&#xff1a; 设计目标 项目说明 目录结构 配置 jenkins 1.安装插件 2.配置项目 前言&#xff1a; JenkinsRobot是一种常见的接口自动化测试方案&#xff0c;可以实现自动化的接口测试和持续集成。Jenkins是一个流行的持续集成工具&#xff0c;而Robot Framew…...

【Visual Studio Code】---自定义键盘快捷键设置

概述 一个好的文章能够帮助开发者完成更便捷、更快速的开发。书山有路勤为径&#xff0c;学海无涯苦作舟。我是秋知叶i、期望每一个阅读了我的文章的开发者都能够有所成长。 一、进入键盘快捷键设置 1、进入键盘快捷键设置方法1 使用快捷键进入键盘快捷键设置先按 Ctrl K再…...

FastEdit ⚡:在10秒内编辑大型语言模型

概述&#xff1a; 这个仓库旨在通过一个单一的命令&#xff0c;有效地将新鲜且定制化的知识注入到大型语言模型中&#xff0c;以辅助开发人员的工作。 支持的模型&#xff1a;○ GPT-J (6B)○ LLaMA (7B/13B)○ BLOOM (7.1B)○ Falcon (7B)○ Baichuan (7B/13B)○ InternLM (7…...

153页PPT麦肯锡咨询流程管理及企业五年发展布局构想与路径规划

麦肯锡咨询的流程管理以其高度结构化、数据驱动和结果导向的核心特点著称&#xff0c;旨在为客户提供清晰、可行且价值最大化的解决方案。其典型流程可概括为以下几个关键阶段&#xff1a;下载资料请查看文章中图片右下角信息 问题界定与结构化&#xff1a; 这是流程的基石。麦…...

GitHub 趋势日报 (2025年06月02日)

&#x1f4ca; 由 TrendForge 系统生成 | &#x1f310; https://trendforge.devlive.org/ &#x1f310; 本日报中的项目描述已自动翻译为中文 &#x1f4c8; 今日获星趋势图 今日获星趋势图 1339 prompt-eng-interactive-tutorial 1080 courses 624 onlook 596 system-desi…...

小红薯商品搜索详情分析与实现

前言 小红书作为国内知名的社交电商平台,拥有丰富的商品数据和用户评价信息。对于数据分析师、产品经理或电商从业者来说,能够获取小红书的商品数据具有重要的商业价值。本文将详细介绍如何通过逆向工程实现小红书商品搜索API的调用。 免责声明:本文仅用于技术学习和研究目…...

PyTorch——优化器(9)

优化器根据梯度调整参数&#xff0c;以达到降低误差 import torch.optim import torchvision from torch import nn from torch.nn import Sequential, Conv2d, MaxPool2d, Flatten, Linear from torch.utils.data import DataLoader# 加载CIFAR10测试数据集&#xff0c;设置tr…...

SIP、SAP、SDP、mDNS、SSH、PTP

&#x1f308; 一、SIP 会话初始协议 会话初始协议 SIP 是一个在 IP 网络上进行多媒体通信的应用层控制协议&#xff0c;它被用来创建、修改和终结 1 / n 个参加者参加的会话进程。SIP 不能单独完成呼叫功能&#xff0c;需要和 RTP、SDP 和 DNS 配合来完成。 1. SIP 协议的功…...

Cursor使用最佳实践总结

#作者&#xff1a;曹付江 文章目录 1、需求文档怎么写2. 项目文件夹选择3.技术栈的选择4.最重要&#xff1a;Cursor中的Rules&#xff08;规则&#xff09;5.对话模式与模型选择6. New Chat&#xff08;新建对话&#xff09;7.自动化测试8.前后端细调的方法9、完整Cursor项目模…...

Docker 部署前后端分离项目

1.Docker 1.1 什么是 Docker &#xff1f; Docker 是一种开源的 容器化平台&#xff0c;用于开发、部署和运行应用程序。它通过 容器&#xff08;Container&#xff09; 技术&#xff0c;将应用程序及其依赖项打包在一个轻量级、可移植的环境中&#xff0c;确保应用在不同计算…...

【深度学习】15. Segment Anything Model (SAM) :基于提示的分割新时代

Segment Anything Model (SAM) &#xff1a;基于提示的分割新时代 基本介绍 The first foundation model for promptable segmentation. Segment Anything Model&#xff08;简称 SAM&#xff09;是 Meta AI 于 2023 年提出的一种通用型图像分割基础模型。与以往分割模型不同&…...

TDengine 的 AI 应用实战——电力需求预测

作者&#xff1a; derekchen Demo数据集准备 我们使用公开的UTSD数据集里面的电力需求数据&#xff0c;作为预测算法的数据来源&#xff0c;基于历史数据预测未来若干小时的电力需求。数据集的采集频次为30分钟&#xff0c;单位与时间戳未提供。为了方便演示&#xff0c;按…...

Ubuntu系统 | 本地部署ollama+deepseek

1、Ollama介绍 Ollama是由Llama开发团队推出的开源项目,旨在为用户提供高效、灵活的本地化大型语言模型(LLM)运行环境。作为Llama系列模型的重要配套工具,Ollama解决了传统云服务对计算资源和网络连接的依赖问题,让用户能够在个人电脑或私有服务器上部署和运行如Llama 3等…...