
例如:我正在尝试在网页:https://www.facebook.com中找到单词[“ InitialChatFriendsList”,如果找到单词,则打印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时,您首先需要登录到您的帐户,否则您将看到开始页面:

我想您认为从浏览器(例如Google Chrome)登录就足够了,但事实并非如此.登录信息将保存在您使用的特定浏览器的本地存储中,例如保存在其Cookie中.我们从会议上讲话.
展示柜
作为一个小实验,请使用您的Google Chrome浏览器访问Facebook并登录.之后,使用Internet Explorer访问它,它将无法登录,您正在重新阅读起始页.
您的Java代码也会发生同样的情况,您只是在阅读起始页,因为对于“ Javas浏览器”您尚未登录.您可以通过转储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:

突出显示的c_user cookie与该会话肯定相关.如果删除它并刷新页面,则无法登录.
解
为了正常工作,您的Java代码需要自己登录,方法是填写表单并提交(或仅发送相应的POST请求),然后收听Facebook的答复并保存所有这些cookie信息.但是,单独执行此操作将是一项艰巨的任务,我不建议这样做.相反,您可以使用从Java内部模拟浏览器的API,例如HTMLUnit.或者,您可以使用Selenium之类的库,通过该库,您可以直接通过其驱动程序界面控制自己喜欢的浏览器.
另一种方法是劫持会话.在那里,您尝试从浏览器的本地文件中提取相关的cookie数据,并在Java应用程序中重新创建具有相同内容的cookie数据.对于非专家而言,如果没有API,也是一项艰巨的任务.
备注
现在,非常重要的是,请注意,Facebook(以及Twitter等其他网站)具有公共可用的API(Facebook for Developers),该API旨在简化与自动化软件的交互.当然,还有Java API包装器,例如Facebook4J.因此,如果尝试抓取Facebook之类的网站,则应仅使用这些API.
另请注意,许多网站(也包括Facebook)在其服务条款(TOS)中均指出,通过不使用其API的自动化软件进行的互动被视为违反了这些条款.可能会导致法律后果.
TOS摘录:
Safety 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在网页中查找单词 - 乐贴网