爬虫-怎么拿到JS生成的结果?

本文介绍了一种在Python环境中调用JavaScript代码的方法,通过使用PyExecJS库,实现了对特定JS逻辑的解析与执行,有效解决了跨语言逻辑复用的问题。

解决思路

1.找到JS代码

2.在python重写逻辑,或者python调用js执行的模块拿到结果

看看在哪里调用了这个js逻辑

点击方法名 进入

发现调用了新的函数

再次查看visit的调用函数,找到参数的生成方式为

 onclick="visit(\'' + autourl[b] + '\')"  

发现新的函数

function auto(b) {
    t = (tim - ts[b]) / 100;
    tt = t.toString().split('.');
    if(tt.length==1) t = t.toString() + '.00';
    else if(tt[1].length < 2)  t = t.toString() + '0';
    if (t > 4) document.getElementById("txt" + b).innerHTML = '<font color=red>连接超时!<\/font>';
    else document.getElementById("txt" + b).innerHTML = 'takes ' + t + 's.   <a href="javascript:;" class="ok" onclick="visit(\'' + autourl[b] + '\')"> 现在访问 <\/a>'
}

发现经常会需要用到Gword 我们可以解析拿到这个数据

 

好开始刚

我们拿到了Gword

 这个地方有2个解决方案了

  • 1是用Python重写编写相关逻辑
  • 2通过Python调用JS直接实现

我们把需要用到的js代码复制到一个文件里面

 

 

通过Python 执行JS库 execjs

execjs可以在python中运行javascript代码

官网:https://pypi.org/project/PyExecJS/

安装:pip install PyExecJS

可以切换清华源

安装成功之后在pycharm中引入一下,不出错误,表示运行成功

我们对JS进行编译

import execjs
with open('scmor.js', 'r', encoding='utf-8') as f:
    js = f.read()
    ctx = execjs.compile(js)  # 对JS进行编译
print(ctx.call('visit','QSQ7XggEHBUhXDxYLwIFHwh4ZRkwXFI0Pw4jGj5ZXlI='))  #给visit 进行传递参数 拿到我们的url 

 

JavaScript生成的内容对于传统静态网页抓取工具(如纯Python的BeautifulSoup)来说是不可见的,因为它们无法直接理解运行在浏览器中的JavaScript。但是有几种方法可以处理这种情况: 1. **Selenium**:这是一个自动化测试工具,它会启动真正的浏览器环境(比如Chrome或Firefox),允许你在动态环境下操纵页面,再利用内置的WebDriver API来抓取内容。使用Selenium之前,需要安装webdriver(对应浏览器的版本)。 ```python from selenium import webdriver # 创建一个新的浏览器实例 driver = webdriver.Chrome() # 让浏览器导航到网页 driver.get("http://example.com") # 执行JavaScript代码,例如点击按钮触发动态加载 element = driver.find_element_by_id('some-button-id') element.click() # 获取动态加载后的页面源码 source_code = driver.page_source ``` 2. **Headless模式**:Selenium支持无头模式,这意味着你可以创建一个不会显示窗口的浏览器实例。这对于不想看到真实界面又需要JS渲染内容的情况很有用。 3. **API和Web Scraping Services**:有些网站提供API来访问他们的数据,可以直接调用而无需处理复杂的前端交互。如果没有API,一些第三方服务如Scrapy-Splash(基于Splash)可以在中间层处理JavaScript渲染,将渲染后的HTML返回给Scrapy爬虫。 4. **HTML5的Web Workers**: 如果网站使用了Web Workers技术处理部分计算,你可能需要分析网页的结构并在合适的时间点等待数据更新完成。 处理JavaScript生成的内容往往需要一定的技术和耐心,因为每种情况都可能不同。记得始终尊重网站的robots.txt规则和使用策略。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值