绕过JS写爬虫

本文介绍了如何绕过JS抓取东方财富网机构调研数据。通过观察网络请求,找到JS生成表格的API规律,通过改变URL中的page参数获取不同页码的数据。利用urllib等工具可以直接访问这些API获取JSON内容。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

      最近要把很多数据抓下来先存起来,现有历史数据再说。其中,东方财富网有许多数据,其中有一个是机构调研的数据。

      http://data.eastmoney.com/jgdy/tj.html

      我们希望抓取的是js生成的表格。

      这种带有js的网站抓取其实不是那么简单的,基本分为那么几种方法,一种是观察页面,有的会有json数据,有的有js代码可以解析目标的url;一种是使用渲染工具;还有一种就是用工具来点击相关button,来抓取url,进而进一步分析。

      今天我们使用的是第三种。


      我们希望爬取的是表格中的数据,但是如果我们仔细看一下html代码,会发现,这其实是js生成的,下面这张图是源代码的截图。

      这就很尴尬了,怎么办呢?我们自己自己解析url数据访问你的api好了。

      我们用浏

### 处理和绕过 JavaScript 加载内容的技术方案 对于现代网页而言,许多动态内容是由 JavaScript 动态加载的。传统的基于 HTTP 请求的方式无法获取这些由 JavaScript 渲染后的页面内容。为了使 Java 编爬虫程序能够处理这类情况,可以采用以下几种方法: #### 使用 Selenium WebDriver 实现浏览器自动化操作 Selenium 是一种强大的工具,允许通过编程方式控制 Web 浏览器执行一系列动作,如点击按钮、填表单等。它支持多种主流浏览器,并能等待页面完全渲染后再提取所需的数据。 ```java import org.openqa.selenium.WebDriver; import org.openqa.selenium.chrome.ChromeDriver; public class SeleniumExample { public static void main(String[] args) throws InterruptedException { System.setProperty("webdriver.chrome.driver", "path/to/chromedriver"); // 创建 Chrome 浏览器实例 WebDriver driver = new ChromeDriver(); try { // 访问目标网址 String url = "https://example.com"; driver.get(url); Thread.sleep(3000); // 等待页面加载完成 // 获取页面源码 String pageSource = driver.getPageSource(); System.out.println(pageSource); } finally { // 关闭浏览器 driver.quit(); } } } ``` 这种方法虽然简单易用,但由于启动真实浏览器会消耗较多资源,在大规模并发场景下可能不是最优选择[^2]。 #### 利用 Headless Browser 或 Puppeteer 进行无头浏览 Headless Browsers(例如 PhantomJS 已经停止维护)以及更先进的 Puppeteer 可以在不显示图形界面的情况下运行完整的 Chromium 浏览器环境。这使得它们非常适合用于服务器端的任务,比如抓取那些依赖于 JavaScript 执行才能展示全部信息的网站。 Puppeteer 主要应用于 Node.js 平台;而对于 Java 开发者来说,则可以选择类似的库——HtmlUnit 或 JBrowserDriver 来实现相同的功能。这两种解决方案都提供了较好的性能表现并减少了对外部二进制文件的依赖。 #### 解析 AJAX 请求接口直接获取数据 很多情况下,前端应用并不是一次性把所有 HTML 结构发送给客户端,而是通过 AJAX 调用来请求额外的信息片段。如果能够分析出这些 API 的调用模式及其参数构成规律,就可以尝试模仿真实的用户行为向服务端发起相应的 GET/POST 请求从而获得原始 JSON 数据或其他格式的结果集。 这种方式要求开发者具备一定的逆向工程能力和对目标站点内部工作原理的理解程度较高。不过一旦成功解析了 API 接口,往往可以获得更加稳定可靠的数据来源渠道[^1]。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

钱塘小甲子

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值