Java 使用Jsoup登录并抓取数据
我想使用Java 使用Jsoup登录并抓取数据,java,cookies,jsoup,Java,Cookies,Jsoup,我想使用Jsoup来抓取一个只有在我登录时才可用的页面。我想这意味着我需要在一个页面上登录,然后将cookies发送到另一个页面。 我阅读了之前的一些帖子,并编写了以下代码: public static void main(String[] args) throws IOException { Connection.Response res = Jsoup.connect("login.yahoo.com") .data("login", "myusername", "p
Jsoup
来抓取一个只有在我登录时才可用的页面。我想这意味着我需要在一个页面上登录,然后将cookies发送到另一个页面。我阅读了之前的一些帖子,并编写了以下代码:
public static void main(String[] args) throws IOException {
Connection.Response res = Jsoup.connect("login.yahoo.com")
.data("login", "myusername", "passwd", "mypassword")
.method(Method.POST)
.execute();
Document doc=res.parse();
String sessionId = res.cookie("SESSIONID");
Document doc2 = Jsoup.connect("http://health.groups.yahoo.com/group/asthma/messages")
.cookie("SESSIONID", sessionId)
.get();
Elements Eles=doc2.getElementsByClass("message");
String content=Eles.first().text();
System.out.println(content);
我的问题是如何知道我的cookie名称(即“SESSIONID”)在这里发送我的登录信息?我使用.cookies()
方法从登录页面获取所有cookies:
BDK
YM
T
PH
Y
F
我一个接一个地试了,但没有一个奏效。我可以从其中一些页面获取sessionId,但是我无法从第二个页面成功获取节点,这意味着我没有成功登录。谁能给我一些建议吗?非常感谢 您是否尝试过这样做:
Connection.Response res = Jsoup.connect("https://login.yahoo.com/config/login?")
.data("login", "myusername", "passwd", "mypassword")
.method(Method.POST)
.execute();
Map<String, String> cookies = res.cookies();
Connection connection = Jsoup.connect("http://health.groups.yahoo.com/group/asthma/messages");
for (Map.Entry<String, String> cookie : cookies.entrySet()) {
connection.cookie(cookie.getKey(), cookie.getValue());
}
Document doc= connection.get();
// #code selector
// Example
// Element e=doc.select(".ygrp-grdescr").first();
// System.out.println(e.text()); // Print => This list will be for asthmatics, and anyone whose life is affected by it. Discussions include causes, problems, and treatment
Connection.Response res=Jsoup.connect(“https://login.yahoo.com/config/login?")
.data(“登录”、“我的用户名”、“密码”、“我的密码”)
.method(method.POST)
.execute();
映射cookies=res.cookies();
连接=Jsoup.connect(“http://health.groups.yahoo.com/group/asthma/messages");
对于(Map.Entry cookie:cookies.entrySet()){
cookie(cookie.getKey(),cookie.getValue());
}
Document doc=connection.get();
//#代码选择器
//范例
//元素e=doc.select(“.ygrp grdescr”).first();
//System.out.println(e.text());//Print=>此列表适用于哮喘患者以及生活受到影响的任何人。讨论包括原因、问题和治疗
我希望这能解决您的问题。我也很难用jsoup登录网站 我想到的是SeleniumWebDriver和jsoup的混合 Webdriver可以远程控制浏览器,通常用于测试目的 对于我的应用程序来说,让浏览器可见并在屏幕上乱动是不可取的。所以我使用了“静默”webdriver:HtmlUnitDriver。您可以使用以下代码行对其进行实例化:
HtmlUnitDriver driver = new HtmlUnitDriver(true); // true meaning javascript support (Using rhino i be leave)
现在登录到我使用的网站:
String baseUrl = "http://www.thesite.com";
driver.manage().timeouts().implicitlyWait(30, TimeUnit.SECONDS);
driver.get(baseUrl);
driver.findElement(By.id("TextBoxUser")).clear();
driver.findElement(By.id("TextBoxUser")).sendKeys("username");
driver.findElement(By.id("TextBoxPass")).clear();
driver.findElement(By.id("TextBoxPass")).sendKeys("password");
driver.findElement(By.id("Button1")).click();
获取页面内容:
String htmlContent = driver.getPageSource();
开始使用jsoup:
Document document = Jsoup.parse(htmlContent);
这对我很有效
Steffn Otto JensenYahoo有许多cookie,通过https进行登录,以及其他安全问题。我想补充一点,确保除了常规的selenium驱动程序之外,还添加了
HtmlUnitDriver
jar。除此之外,非常感谢,在与Jsoup相处了6个小时后,这是一个救命恩人