gpt4 book ai didi

java - 使用java在网页中查找单词

转载 作者:塔克拉玛干 更新时间:2023-11-02 08:02:55 24 4
gpt4 key购买 nike

我正在尝试在特定网页中搜索特定词,我正在使用 Java 和 Eclipse。问题是,如果我使用一个几乎没有内容的网页,它工作正常,但是当我在一个“大”网页中尝试时,它找不到这个词。

例如:我试图在网页中查找单词 ["InitialChatFriendsList":https://www.facebook.com,如果找到word 然后打印 WIN!!!

这是完整的 Java 代码:

public class BR4Qustion {               
public static void main(String[] args) {
BufferedReader br = null;
try {
URL url = new URL("https://www.facebook.com");
br = new BufferedReader(new InputStreamReader(url.openStream()));

String foundWord = "[\"InitialChatFriendsList\"";
String sCurrentLine;

while ((sCurrentLine = br.readLine()) != null) {
String[] words = sCurrentLine.split(",");
for (String word : words) {
if (word.equals(foundWord)) {
System.out.println("WIN!!!");
break;
}
}
}
} catch (IOException e) {
e.printStackTrace();
} finally {
try {
if (br != null)
br.close();
} catch (IOException ex) {
System.out.println("*** IOException for URL : ");
}
}
}
}

最佳答案

问题

除了您的代码存在一些小缺陷(您应该使用try-with-ressources 和新的 IO 库 NIO),它看起来完全没问题 并且似乎没有逻辑错误。


您在这里遇到了不同的问题。尝试阅读 Facebook 时,您首先需要登录您的帐户,否则您将看到起始页:

Starting page of Facebook

我猜您认为从浏览器(例如 Google Chrome)登录就足够了,但事实并非如此。登录信息保存在您使用的特定浏览器的本地存储中,例如在其 cookies 中。我们在 session 中交谈。


展示

作为一个小实验,使用您的谷歌浏览器访问 Facebook 并登录。之后用 Internet Explorer 访问它,它将未登录并且您正在再次阅读起始页。

您的 Java 代码也会发生同样的情况,您只是在阅读起始页,因为对于“Java 浏览器”您还没有登录。您可以通过转储您的 BufferedReader 正在阅读的内容来检查它:

final URL url = new URL("https://www.facebook.com");
try (final BufferedReader br = new BufferedReader(new InputStreamReader(url.openStream()))) {
// Read the whole page
while (true) {
final String line = br.readLine();
if (line == null) {
break;
}

System.out.println(line);
}
}

看看输出,它可能是起始页的来源。


见解

通过浏览器登录 Facebook 后,该网站向我发送以下 cookie:

Cookies of Facebook

突出显示的 c_user cookie 绝对与 session 相关。如果我删除它并刷新页面,那么我就不再登录了。


解决方案

为了工作,您的 Java 代码需要通过填写表单并提交(或仅通过发送相应的 POST 请求)自行登录,然后收听 Facebook 的回答并保存所有这些 cookie 信息。然而,自己做这件事将是一项艰巨的任务,我不推荐这样做。相反,您可以使用从 Java 内部模拟浏览器的 API,例如 HTMLUnit .或者,您可以使用像 Selenium 这样的库您可以通过它的驱动程序界面直接控制您最喜欢的浏览器。

另一种方法是劫持 session 。您尝试从您的浏览器本地文件中提取相关的 cookie 数据,并在您的 Java 应用程序中重新创建具有相同内容的 cookie 数据。对于非专家来说,如果没有 API,这也是一项艰巨的任务。


备注

现在,非常重要的是,请注意 Facebook(以及 Twitter 等其他网站)有一个公共(public)可用 API ( Facebook for Developers ),旨在简化与自动化软件的交互。当然也有 Java API Wrapper 可用,比如 Facebook4J .因此,如果您尝试抓取 Facebook 等网站,您应该只使用这些 API。

另请注意,许多网站(包括 Facebook)在其服务条款 (TOS) 中声明,通过不使用其 API 的自动化软件进行的交互将被视为违反这些条款。这可能会导致法律后果

服务条款的摘录:

  1. Safety
    1. You will not collect users' content or information, or otherwise access Facebook, using automated means (such as harvesting bots, robots, spiders, or scrapers) without our prior permission.

关于java - 使用java在网页中查找单词,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45905285/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com