python 爬虫之js逆向爬虫详解
随着网站前端技术的不断发展,越来越多的网站采用JS进行渲染,并加上了一些反爬机制,导致传统的爬虫技术有些力不从心。本文将为大家介绍如何进行JS逆向爬虫,并且不少于1000字。
一、JS逆向爬虫的介绍
JS逆向是一种分析反爬机制的行为,通过分析反爬机制如何加密、混淆和模拟JS代码的执行,使之能够成功处理并渲染网页。由于JS逆向的方式需要进行复制粘贴,因此开发过程中需要耗费一定的时间和精力。
在Python上,我们可以使用Requests和Selenium等库来获取页面元素或模拟人类操作。Requests库是一种强大、简洁的HTTP请求库。而Selenium是一个自动化测试框架,用于模拟用户在浏览器中的操作。过程如下:
使用Requests
import requests# 获取页面
r = requests.get(url)
html = r.content# 对页面进行解析
# ...使用Seleniumfrom selenium import webdriver# 创建浏览器对象
browser = webdriver.Chrome()
browser.get(url)# 获取页面
html = browser.page_source# 对页面进行解析
# ...# 关闭浏览器
browser.quit()
二、JS逆向的原理
当浏览器使用JS渲染页面时,它会从客户端下载HTML文件并下载相关的JS库。当完成下载之后,浏览器会自动执行所有与页面相关的JS代码,根据代码来生成和修改HTML元素的DOM结构。这意味着,我们需要模拟并执行JS代码轨迹,对页面元素进行解析,即可获取页面信息。
三、如何进行JS逆向爬虫
在进行JS逆向之前,我们首先需要对目标网页进行分析,找出JS代码的执行顺序以及可能的加密方式、参数等。JS代码通常使用jQuery、Vue.js、React和AngularJS等框架编写,我们需要对其进行模拟执行并提取关键信息。
1.分析页面
我们首先需要分析目标页面,找出JS渲染的部分并正确定位到需要获取的数据和信息。我们需要找到JS代码的执行顺序、可能存在的加密方式和传递参数的方式等。
2.分析JS代码和参数
找到JS代码并对其进行分析后,我们需要利用Python模拟执行该JS代码并获取相应数据。我们需要确定参数的位置和值,并利用Python解析数据以获取需要的数据。
例如,当网站使用jQuery进行JS渲染时,我们可以找到与文件相关联的URL链接,发送AJAX请求获取HTML代码 ,并解析其中的数据。设置AJAX请求的参数、头部信息并发送请求,获取到HTML代码并用Python进行解析。
import requests
import re
from pprint import pprint
from pyquery import PyQuery as pqdef parse_page(html):doc = pq(html)return doc('title').text()def get_html(url, headers):res = requests.get(url, headers=headers)html = res.text# 解析html,过滤掉其他标签,只要标题return parse_page(html)headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.3'
}
url = 'https://www.baidu.com'
print(get_html(url, headers))
3.模拟Ajax请求或操作浏览器
如果网站的JS逆向需要进行Ajax请求的模拟发送,可以使用类似于request库之类的Python库来发送请求,或者使用Selenium模拟浏览器操作。
from selenium import webdriver
from selenium.webdriver.chromeoptions import Options#设置浏览器头和禁用图片加载
chrome_options = Options()
chrome_options.add_argument(‘–no-sandbox’)
chrome_options.add_argument(‘–disable-dev-shm-usage’)
chrome_options.add_argument(‘–disable-gpu’)
chrome_options.add_argument(‘–disable-setuid-sandbox’)
chrome_options.add_argument(‘–headless’)
chrome_options.add_argument(‘–disable-extensions’)#创建浏览器对象
browser = webdriver.Chrome(options=chrome_options)#通过js来控制点击“下一页”翻页
#这里假定下一页链接是’next’的,如果需要替换
#只需要这里用find_element_by_xpath方法查找并替换即可
js = “document.querySelector(‘a[href=“next”]’).click()”#在浏览器中打开链接
browser.get(url)#以固定的时间间隔执行JS方法
browser.execute_script(js)
time.sleep(10)#获取页面
html = browser.page_source#对页面进行解析
#…
#关闭浏览器
browser.quit()
四、JS逆向爬虫的注意事项
1. 遵守网站规则和政策
进行网站爬取时,需要遵守相关政策、遵守社区规则,不得进行侵权或者影响到网站原有服务和资源的使用。
2. 注意程序效率
由于JS逆向需要模拟JS代码的执行,程序效率可能会变得较低。我们应该设计科学的程序结构,以最小的代价来完成任务。
3. 遵循爬虫规则
爬虫是给用户带来便利的工具,但是应该遵守相关的爬虫规则,不要给被爬网站造成负面影响,否则可能会被严惩。
4. 确保数据准确性
在进行数据爬取操作时,我们需要确保数据的准确性和完整性,防止出现数据损失或错误。
五、总结
JS逆向爬虫是解决JS解密反爬措施的有效方式。在Python中使用Requests和Selenium等库,我们可以模拟执行JS代码,获取到所需要的数据。在进行JS逆向爬虫时,我们需要分析JS和页面的结构,遵守爬虫规则,保证程序的效率和数据的准确性。
相关文章:
python 爬虫之js逆向爬虫详解
随着网站前端技术的不断发展,越来越多的网站采用JS进行渲染,并加上了一些反爬机制,导致传统的爬虫技术有些力不从心。本文将为大家介绍如何进行JS逆向爬虫,并且不少于1000字。 一、JS逆向爬虫的介绍 JS逆向是一种分析反爬机制的…...
SpringBoot:WebSocket实现消息撤回、图片撤回
下面只是讲述一下实现思路,代码基本没有哈!有时间单独发表一篇关于websocket的相关操作的博客。 1. 消息撤回、图片撤回 个人觉得关于撤回,需要下述几个过程: 发送的消息的标签上可以定义一个属性,这个属性的值应该是…...
输出指定日期区间内的所有天、周、月
部分方法需要依赖hutool工具包。 <dependency><groupId>cn.hutool</groupId><artifactId>hutool-all</artifactId><version>4.5.10</version> </dependency>需求:输出2023-04-17到2023-05-23期间所有的天、周、月。…...
【线性规划模型】
线性规划模型:原理介绍和预测应用 引言 线性规划是运筹学中一种重要的数学优化方法,被广泛应用于各个领域,包括工业、经济、物流等。 线性规划模型的原理 线性规划模型的目标是在一组线性约束条件下,寻找一组变量的最优解&…...
android 12.0卸载otg设备开机不加载otg设备
1.概述 在12.0定制化开发过程中,客户有功能需求,通过系统属性值控制是否加载挂载otg设备,当设置为卸载模式时,要求不能挂载otg设备,开机也不能挂载otg设备 2.卸载otg设备开机不加载otg设备的核心代码 frameworks/base/services/core/java/com/android/server/StorageMan…...
通过 Wacom 的 Project Mercury 提高远程办公效率
过去几年中,我们的工作方式发生了翻天覆地的变化。疫情加快了对远程办公和协作的采纳,导致人们更加依赖技术来联系团队和提高工作效率。 但是,那些依靠专门硬件和软件来完成工作的创作者呢?艺术家、设计师和开发人员需要使用专门…...
Linux-0.11 文件系统namei.c详解
Linux-0.11 文件系统namei.c详解 模块简介 namei.c是整个linux-0.11版本的内核中最长的函数,总长度为700行。其核心是namei函数,即根据文件路径寻找对应的i节点。 除此以外,该模块还包含一些创建目录,删除目录,创建目…...
计算机网络学习笔记
<!-- GFM-TOC --> 计算机网络体系结构 传输层:TCP和UDP 什么是三次握手? 什么是四次挥手? TCP如何实现流量控制? TCP的拥塞控制是怎么实现的? TCP如何最大利用带宽? TCP与UDP的区别 TCP如何保…...
Pod相关操作命令
Pod相关操作命令 Pod setup # CocoaPods 将信息下载到~/.cocoapods/repos 目录下。如果安装 CocoaPods 时不执行此命令,在初次执行pod intall 命令时,系统也会自动执行该指令 pod --version # 检查 CocoaPods 是否安装成功及其版本号 pod repo update #…...
图灵完备游戏:信号计数 解法记录
使用1个全加器 2个半加器完成。这关的思想主旨在于如何把输出4,输出2,输出1的情况统一在一根导线上。 首先用一个全加器来完成输入2-4这三个引脚的计数,因为全加器输出范围二进制是00 - 11,而输入正好有两个引脚数位是2和1&…...
数据结构图的基础概念
1、图的概念 图(Graph):是由顶点的有穷非空集合和顶点之间边的集合组成。顶点(Vertex):图中的数据元素。边(Edge):顶点之间的逻辑关系,边可以是有向的或无向的,也可以带有权重(可以表示距离,花费等…...
一场九年前的“出发”:奠基多模态,逐鹿大模型
原创:谭婧 全球AI大模型的技术路线,没有多少秘密,就那几条路线,一只手都数得过来。 而举世闻名的GPT-4浑身上下都是秘密。 这两件事并不矛盾。为什么呢? 这就好比,回答“如何制造一台光刻机?”。…...
什么是url跳转漏洞?
什么是url跳转漏洞 简介原因:如何防止 简介 URL跳转漏洞是一种Web应用程序安全问题,指的是在应用程序处理URL跳转时,由于程序员的疏忽或设计不当,攻击者可能通过构造恶意URL来实现对应用程序的攻击。 原因: 跳转条件…...
生物学经典blast比对算法,R语言和Python如何实现?
Blast比对算法原理与实现方式 做生物的同学肯定听说过blast比对这个方法,一般在NCBI等网站上可以在线进行比对,也可以在本地服务器进行比对,那么blast算法究竟是怎么实现对不同序列的比对呢? 本文分享经典blast算法的基础原理&…...
Android 开机动画支持mp4格式视频播放
前 言 Android系统在启动的过程中,最多可以出现三个画面,每一个画面都用来描述一个不同的启动阶段。无论是哪一个画面,它们都是在一个称为帧缓冲区(frame buffer,简称fb)的硬件设备上进行渲染的。 自定义…...
软考A计划-试题模拟含答案解析-卷十
点击跳转专栏>Unity3D特效百例点击跳转专栏>案例项目实战源码点击跳转专栏>游戏脚本-辅助自动化点击跳转专栏>Android控件全解手册点击跳转专栏>Scratch编程案例 👉关于作者 专注于Android/Unity和各种游戏开发技巧,以及各种资源分享&am…...
Kafka入门(安装和SpringBoot整合)
文章目录 一、Docker安装Kafka1. 创建网络2. 安装zookeeper3. 安装Kafka 二、Kafka介绍1. Kafka简介 三、SpringBoot整合Kafka1. 引入pom依赖2. application.propertise配置3. Hello Kafka(Producer)4. Consumer Kafka5. 带回调的生产者6. 自定义分区器7. kafka事务提交8. 指定…...
gitLab相关命令
gitLab相关命令 1) 远程仓库相关命令 git clone 远程仓库地址 #检出仓库git remote -v #查看远程仓库git remote add [name][url] #添加远程仓库,git remote add origin 远程仓库地址git remote rm [name] #删除远程仓库,git remote rm origingit remo…...
一些查看日志时的常用命令
文章目录 1、grep -r 搜索内容 *2、l * 关键字 *3、tail -f 文件名4、tail -n X 文件名5、cat 文件名 | grep "关键字" -C X同理可得,-A同理可得,-B 一些查看日志时的常用命令 1、grep -r 搜索内容 * 作用:在一堆文件里࿰…...
Javascript 的执行环境(execution context)和作用域(scope)及垃圾回收
执行环境有全局执行环境和函数执行环境之分,每次进入一个新执行环境,都会创建一个搜索变量和函数的作用域链。函数的局部环境不仅有权访问函数作用于中的变量,而且可以访问其外部环境,直到全局环境。全局执行环境只能访问全局执行…...
工业安全零事故的智能守护者:一体化AI智能安防平台
前言: 通过AI视觉技术,为船厂提供全面的安全监控解决方案,涵盖交通违规检测、起重机轨道安全、非法入侵检测、盗窃防范、安全规范执行监控等多个方面,能够实现对应负责人反馈机制,并最终实现数据的统计报表。提升船厂…...
【Java学习笔记】Arrays类
Arrays 类 1. 导入包:import java.util.Arrays 2. 常用方法一览表 方法描述Arrays.toString()返回数组的字符串形式Arrays.sort()排序(自然排序和定制排序)Arrays.binarySearch()通过二分搜索法进行查找(前提:数组是…...
1.3 VSCode安装与环境配置
进入网址Visual Studio Code - Code Editing. Redefined下载.deb文件,然后打开终端,进入下载文件夹,键入命令 sudo dpkg -i code_1.100.3-1748872405_amd64.deb 在终端键入命令code即启动vscode 需要安装插件列表 1.Chinese简化 2.ros …...
Mac软件卸载指南,简单易懂!
刚和Adobe分手,它却总在Library里给你写"回忆录"?卸载的Final Cut Pro像电子幽灵般阴魂不散?总是会有残留文件,别慌!这份Mac软件卸载指南,将用最硬核的方式教你"数字分手术"࿰…...
ardupilot 开发环境eclipse 中import 缺少C++
目录 文章目录 目录摘要1.修复过程摘要 本节主要解决ardupilot 开发环境eclipse 中import 缺少C++,无法导入ardupilot代码,会引起查看不方便的问题。如下图所示 1.修复过程 0.安装ubuntu 软件中自带的eclipse 1.打开eclipse—Help—install new software 2.在 Work with中…...
Springboot社区养老保险系统小程序
一、前言 随着我国经济迅速发展,人们对手机的需求越来越大,各种手机软件也都在被广泛应用,但是对于手机进行数据信息管理,对于手机的各种软件也是备受用户的喜爱,社区养老保险系统小程序被用户普遍使用,为方…...
【生成模型】视频生成论文调研
工作清单 上游应用方向:控制、速度、时长、高动态、多主体驱动 类型工作基础模型WAN / WAN-VACE / HunyuanVideo控制条件轨迹控制ATI~镜头控制ReCamMaster~多主体驱动Phantom~音频驱动Let Them Talk: Audio-Driven Multi-Person Conversational Video Generation速…...
基于TurtleBot3在Gazebo地图实现机器人远程控制
1. TurtleBot3环境配置 # 下载TurtleBot3核心包 mkdir -p ~/catkin_ws/src cd ~/catkin_ws/src git clone -b noetic-devel https://github.com/ROBOTIS-GIT/turtlebot3.git git clone -b noetic https://github.com/ROBOTIS-GIT/turtlebot3_msgs.git git clone -b noetic-dev…...
PostgreSQL——环境搭建
一、Linux # 安装 PostgreSQL 15 仓库 sudo dnf install -y https://download.postgresql.org/pub/repos/yum/reporpms/EL-$(rpm -E %{rhel})-x86_64/pgdg-redhat-repo-latest.noarch.rpm# 安装之前先确认是否已经存在PostgreSQL rpm -qa | grep postgres# 如果存在࿰…...
SQLSERVER-DB操作记录
在SQL Server中,将查询结果放入一张新表可以通过几种方法实现。 方法1:使用SELECT INTO语句 SELECT INTO 语句可以直接将查询结果作为一个新表创建出来。这个新表的结构(包括列名和数据类型)将与查询结果匹配。 SELECT * INTO 新…...
