使用 HTTP 请求获取 Elon Musk 的推文有哪些方法?

问题描述 投票:0回答:1

我需要使用 HTTP 请求获取 Elon Musk 的推文。 Twitter API 最初并未考虑

我想到的就是使用对 Twitter 的请求来获取页面的 HTML 代码,将其解析为链接并按顺序跟踪它们,直到找到消息(推文)的文本。然而,twitter html 代码不包含对此有用的链接(以我的经验来看)。特定推文的链接也不包含其(推文)文本。还有其他方法可以解决这个问题吗?

URL url = new URL("https://twitter.com/elonmusk");
        HttpURLConnection con = (HttpURLConnection) url.openConnection();
        con.setRequestMethod("GET");
        con.setRequestProperty("User-Agent", "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 YaBrowser/24.1.0.0 Safari/537.36");
        con.setRequestProperty("Content-Type", "text/html");
        int responsecode = con.getResponseCode();
        System.out.println("response code = " + responsecode);

        BufferedReader reader = new BufferedReader(new InputStreamReader(con.getInputStream()));
        String text = "";
        StringBuilder res = new StringBuilder();

        while ((text = reader.readLine()) != null) {
            res.append(text + "\n");
        }

        reader.close();
        System.out.println(res);

我将以文本形式附上程序结果的链接(我保证没有病毒)

https://dropmefiles.com/bH1zN

java http parsing twitter httprequest
1个回答
0
投票

客户端代码(换句话说,HTML。并且,从那里,该 html 通过例如 head 标签包含的 CSS 和 JS)本身就是 twitter API 的用户。 HTML 不包含推文的原因是 HTML 是静态的 - 向每个人提供相同的 HTML(以及 js 和 css)。 js 调用 twitter.com。当然,您可以检查它是如何执行此操作并尝试“模仿”它 - 如果浏览器可以加载它,则任何应用程序都可以加载它。但请注意,这是对 API 的“滥用”,今天有效的方法明天可能就无效了。

如果你想追究这一点(因此,故意注册必须每隔一天重写或至少调整你的代码;twitter 将与其 HTML/CSS/JS 同步更改其 API,当然不会告诉你他们正在这样做,并且会积极尝试将你拒之门外。抓取所有 Twitter 具有很大的经济价值,因此,Twitter 在团队上花费了数百万美元来阻止你做你想做的事情。最后,“你赢了” (如果浏览器可以做到这一点,你也可以),但是需要相当多的技巧才能做到这一点):

成为浏览器

我建议您使用浏览器开发工具来查看网络流量。您将找到推文内容(可能已加密,但是浏览器必须具有解密密钥,因此这不是真正的加密,只是混淆)。无论 twitter.com/link/to/tweet 发送的 HTML+CSS+JS 调用顺序是什么,您都会执行相同的顺序,瞧。然而,Twitter 正在积极使用技巧来试图将您拒之门外(您可能必须将这些调用伪造为每个标头中的确切措辞,毫无疑问将涉及一堆令牌,您需要弄清楚如何获取这些以及在哪里重复它们),但最终,如果浏览器可以做到这一点,那么您也可以。

使用浏览器

这些工具的“上下文”是

前端测试,而不是网页抓取。然而,像 selenium 这样的工具是存在的:它们可以让你“机器人化”浏览器。一个真正完整的浏览器将被启动,但它不是由键盘和鼠标控制,而是由 selenium 控制。您编写一个程序,使用 selenium 告诉真实的浏览器(因此,这意味着该应用程序将使用一些重要的资源;浏览器不是轻量级工具)加载 URL 并运行所有 javascript 并应用所有 CSS。然后,您向浏览器询问其 DOM 中的某些元素。您可以使用它让浏览器完成执行所有 javascript 的艰巨工作,从而进行所有这些 API 调用。 毫无疑问,Twitter 团队也在试图阻止这种情况,因此,您将花费无数的时间来哄骗浏览器通过 Selenium 选项,使其像人类一样行事,足以伪造 twitter.com 所采取的任何缓解措施反对这一点。即使你今天可以让它工作,明天也可能无法工作 - 这些解决方案通常非常依赖于页面的外观,所以如果 Twitter 稍微改变了它的“外观”,你很可能需要调整你的相应的代码。

...或者长大

API 的存在是有原因的。它们被“设计”为“好”——稳定且有正确的文档记录。通常我会告诉你长大后弄清楚:与这些数据的供应商做出安排,而不是试图违背他们的意愿将其挤出,并与他们进行无休止的军备竞赛,试图阻止你和你的工作围绕他们的尝试。

但是,这是两方之间的交易。现在 Twitter 最近在 API 方面的行为强烈表明他们不会在这方面成长,因此,上述激烈的竞争可能是你唯一的选择。 NB:请注意,理论上您在这里面临一些法律风险。您故意躲避安全措施。可能的安全措施与在前门贴一张纸条相同,上面写着:“嘿,小偷!请不要开门!” - 但仍然是一种安全措施。 DMCA 等法律可能适用。不要接受 Stack Overflow 的法律建议。我不是律师。我当然不是你的律师。

© www.soinside.com 2019 - 2024. All rights reserved.