gpt4 book ai didi

java - 从需要登录的网页获取数据 Java

转载 作者:行者123 更新时间:2023-12-01 22:40:00 27 4
gpt4 key购买 nike

所以最近我决定自学如何从网页获取数据。我设法从另一个网页的 JSON 中获取数据,但是当我尝试从该网站复制所有内容时,它没有显示我实际需要的数据。

我正在尝试的页面例如:http://www.tremorgames.com/index.php?action=shop&page=2 (您可能需要注册)。我想要获取的数据例如是游戏名称/价格或库存,如果我能获取一个,那么我就能获取全部。

问题是开发工具显示了代码,但是当我尝试使用 Java 将所有内容复制到文件中时,它没有显示大部分代码。

(我也尝试过 Jsoup,但它也不起作用)。这是我从网页复制的内容:

BufferedReader reader = null;
try {
URL url = new URL("http://www.tremorgames.com/index.php?action=shop&page=2");
reader = new BufferedReader(new InputStreamReader(url.openStream()));
StringBuffer buffer = new StringBuffer();
int read;
char[] chars = new char[1024];
while ((read = reader.read(chars)) != -1)
buffer.append(chars, 0, read);

return buffer.toString();
} finally {
if (reader != null)
reader.close();
}

正如我所说,我正在努力学习,因此欢迎任何指点(我已经搜索了一段时间,直到放弃并编写了其余的代码)。

提前致谢。

最佳答案

好吧,我不久前完成了这个,但忘了回答我自己的问题。我为此使用了 HtmlUnit,因为它看起来是最简单的。

import com.gargoylesoftware.htmlunit.WebClient;  
import com.gargoylesoftware.htmlunit.html.HtmlInput;
import com.gargoylesoftware.htmlunit.html.HtmlPage;
import com.gargoylesoftware.htmlunit.html.HtmlSubmitInput;

为了从某个网页获取数据,我需要先登录该网站。为此,我需要启动一个网络客户端。需要记住的是,需要使用相同的 Web 客户端,因此您需要在调用登录方法的方法中启动 WebClient(此方法稍后还将发送 WebClient 以获取数据和您可能需要的任何其他内容)。

WebClient webClient = new WebClient(); //Initiate a WebClient variable.  
webClient = tremorLogin(webClient);

然后在 tremorLogin 中,我将登录网站并将客户端返回到 webClient 变量。

//Login into Tremor Games and return the client(Saves the cookies).
private static WebClient tremorLogin(WebClient webClient) throws Exception
{
webClient.getOptions().setJavaScriptEnabled(false);
HtmlPage currentPage = webClient.getPage("http://www.tremorgames.com/"); //Load page at the STRING address.
HtmlInput username = currentPage.getElementByName("loginuser"); //Find element called loginuser for username
username.setValueAttribute(user); //Set value for username
HtmlInput password = currentPage.getElementByName("loginpassword"); //Find element called loginpassword for password
password.setValueAttribute(pass); //Set value for password
HtmlSubmitInput submitBtn = currentPage.getElementByName("Submit"); //Find element called Submit to submit form.
currentPage = submitBtn.click(); //Click on the button.

return webClient;
}

loginuser 文本是您查看网站源代码时所调用的用户名文本字段。

HtmlInput username = currentPage.getElementByName("loginuser");

登录密码文本是您检查网站源代码时所调用的密码文本字段。

HtmlInput password = currentPage.getElementByName("loginpassword");

user是你的用户名(字符串类型),pass是你的密码(字符串类型)

username.setValueAttribute(user);  
password.setValueAttribute(pass);

写完用户名和密码后,您需要单击提交按钮,为此您需要在网站的源代码中查找按钮的名称(与用户名和密码文本字段的方式相同。找到后按钮的名称,您需要单击第二行。

 HtmlSubmitInput submitBtn = currentPage.getElementByName("Submit"); //Find element called Submit to submit form.
currentPage = submitBtn.click(); //Click on the button.

返回此信息后,您的网络客户端将保存在原始方法中,稍后您可以从那里获取所有数据或您可能想从网站获取的任何其他数据。在原来的方法中你可能会有类似的东西

HtmlPage currentPage = webClient.getPage("http://www.tremorgames.com/index.php?action=shop&searchterm=steam&search_category=5&sort=price_asc&page=1");
String pageSource = currentPage.asXml();

在 pageSource 中将网站设置为 xml 后,您将拥有与在开发人员工具中看到的完全相同的文本/代码,稍后您只需在其中搜索所需的数据即可。

希望这能为人们提供帮助并节省时间。

关于java - 从需要登录的网页获取数据 Java,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26312123/

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