python爬虫06 - js2py和selenium初探。

内容

js2py简介
动态HTML技术了解
selenium+chromedriver获取动态数据

用google chrome先打开这个页面http://www.porters.vip/verify/sign/(这网页有反爬 容易打不开)
需求是爬取网页的内容
在这里插入图片描述

检查
看这个network
在这里插入图片描述

response 和 preview有数据
在这里插入图片描述
在这里插入图片描述
但是那里面不是我们想要的数据
我们想要的 点击查看详情的数据
在这里插入图片描述
所以我们可以先清空数据再在网页中点击这个黄色按钮
在这里插入图片描述
页面就出现了一些数据
在这里插入图片描述
在这里插入图片描述
按照常规操作 请求这个url text.decode 加入个请求头 cookie 但是其实没有这么简单 这样请求 就会返回一个403对象
在这里插入图片描述
403错误是一种在网站访问过程中,常见的错误提示,表示资源不可用。

403就意味着你请求成功了 但是拒绝 或者是禁止访问 但是服务器已经处理了你的请求了 所以就是被反爬了

我们看看检查中的network中
在这里插入图片描述

在这里插入图片描述
sign 就是签名的意思
我们分析一下红框中的数据
sign值是一个16位进制的32位数据(32个字符)
在这里插入图片描述
而且呢 签名的这个数据是随机的
action 和 randstr 的数据也是随机的 只不过一个随机的是数字 一个是字母 tim是个时间戳
在这里插入图片描述
其实 也就是它这个反爬是它在这个参数做了反爬
我们每次请求这个url时得把参数写进去 但是

首先我们的这个网站是基于js开发的
js是开发web页面的脚本语言 经常在网页中添加一些动态功能
这个js是嵌入到html中来实现它的功能
所以我们得去html网页源码中找一些蛛丝马迹 当然网页源代码中是没有这些文本内容的 可以找找 验证确实没有
在这里插入图片描述
那我们来找下js (javasript)
在这里插入图片描述
在这里插入图片描述

sign 就是签名的意思 md5的js肯定是加密的 所以还是先点开sign的js
打开的代码就是js代码(不是python代码也不是java代码是javascript代码)
ajax就是前端的一个技术 先不用管 我们看到上面有个function 那么我们前面学到函数的对象类型就是一个function
在这里插入图片描述
那么这一块就是个函数 它的名字叫做fetch
在这里插入图片描述
那么它这个函数的主要作用就是: 刚才的网站有一个按钮 点击按钮过后会刷新出新的数据 那么点击这个按钮时就会触发fetch方法 fetch方法就会调用它这个Get方式 向目标url发起请求
在这里插入图片描述
也就是这个url http://www.porters.vip/verify/sign/fet
在这里插入图片描述
但是只是向url发起请求肯定不行呀 还得携带一些参数 那就找参数的关键词
在这个uri函数中
在这里插入图片描述
action 就是多个随机数 randints (rand随机数 int数字类型 )
tim时间戳 randstr就是随机的一个英文字母 randstrs就是多个随机英文字母
然后再看hexs 是前面的参数action tim randstr 都进行了一个md5的加密
然后将这些数据拼接后 再返回 提交这个参数
在这里插入图片描述
因为上面的代码都是js代码 但是我们也可以用python将js代码中的所有内容功能全部模拟下来 生成随机数 随机字母 请求url…
也就是讲到了一个点现在很多网站都开始用js加密技术了
有时候我们需要用python执行js代码 而我们用的是python 那么两种毫不相干的语言 那就要用到js2py模块

1. js2py简介

1.1 js2py模块使用

• Python中执行JS代码,通常两个库:js2py,pyexecjs
• js2py是纯python实现的库,用于在python中运行js代码,本质上是将js代码翻译成python代码
• js2py安装 pip install js2py

1.2 快速入门

里面的console.log 是js代码中一个方法 我们看一下
比如我们在此页面检查 点开console 在控制台输入代码
在这里插入图片描述
js的代码可以了解 但不是本章的主要学习对象
输入alert(‘python’) 回车 就会弹出python的弹窗
在这里插入图片描述

import js2py

js2py.eval_js('console.log("hello wrold")')

func_js = """    
function add(a,b){  
    return a+b
}
"""
#给func_js赋值等于一个文档字符串  这个函数的名字是 add()有两个参数a 和b 中括号[ ]不是字典的意思 里面是函数的内容: 返回结果a+b   这就是这个js代码的一个形式
add = js2py.eval_js(func_js)
print(add(1, 2))

'hello wrold'
3

将js代码中的变量通过python来输出

先声明一个变量 var a= 后面还有;a

import js2py
print('python')
print(js2py.eval_js('var a = "python";a'))

python
python

将js代码中函数通过python来输出</

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值