我正在做一个小程序,谷歌可以搜索你想要的歌曲并打印它的歌词。我为此目的使用HTMLUnit和Java。我正在搜索目标文本,然后点击第一个谷歌搜索结果。但是,当我从浏览器检查结果时,页面会有所不同。
可能我的错误是因为XPath,但我不确定。因为,我使用了Google Chrome的XPATH查看器以及2个Firefox扩展程序。
在chrome中,我右键单击要查看XPATH的元素,然后右键单击底部窗口中的anchor()。然后,我选择Copy XPath。然后我将适当的“s”更改为“。
到目前为止,这是我的源代码。我现在写了一首随机的歌。
非常感谢你。
源代码:
(我尝试了很多东西。所以,我很抱歉因为源代码很混乱。我没有删除线条来向你展示我到目前为止所尝试的内容。再次感谢你。)
import java.io.IOException;
import java.net.MalformedURLException;
import com.gargoylesoftware.htmlunit.BrowserVersion;
import com.gargoylesoftware.htmlunit.FailingHttpStatusCodeException;
import com.gargoylesoftware.htmlunit.WebClient;
import com.gargoylesoftware.htmlunit.html.HtmlAnchor;
import com.gargoylesoftware.htmlunit.html.HtmlPage;
public class dsa {
public static void main(String args[]) throws FailingHttpStatusCodeException, MalformedURLException, IOException {
WebClient webClient = new WebClient(BrowserVersion.FIREFOX_3_6);
webClient.setThrowExceptionOnScriptError(false);
//webClient.setJavaScriptEnabled(false);
String address = "http://www.google.com/search?q=";
String searchString = "Metallica - Whiskey In The Jar";
//String searchString = "testtesttest";
String someString = address.concat(searchString);
String lastString = someString.concat(" site:randomlyricswebpageblabla.com");
// site:anotherrandomlyricswebpage.com
HtmlPage currentPage = webClient.getPage(lastString);
/*
HtmlTextInput searchBox = (HtmlTextInput) currentPage.getElementById("search_input");
searchBox.setTextContent("Amorphis - From The Heaven Of My Heart");
HtmlButtonInput button = (HtmlButtonInput) currentPage.getElementById("search_button");
HtmlPage newPage = button.click();
*/
//System.out.println(currentPage.asText());
//
//
//HtmlElement element = (HtmlElement)currentPage.getByXPath("//h3").get(0);
//DomNode result = element.getChildNodes().get(0);
//HtmlAnchor hede = (HtmlAnchor) element.getFirstChild();
//HtmlPage newPage = hede.click();
//HtmlElement firstGoogleResult = (HtmlElement) currentPage.getByXPath("//*[@id='rso']/li[1]/div/h3/a").get(0);
//HtmlAnchor testAnchor = (HtmlAnchor) firstGoogleResult.getFirstChild();
HtmlAnchor firstGoogleResult = (HtmlAnchor) currentPage.getByXPath("//*[@id='rso']/li[1]/div/h3/a").get(0);
HtmlPage newPage = firstGoogleResult.click();
//HtmlAnchor linkTest = (HtmlAnchor) newPage.getByXPath("//*[@id='contentdiv_left']/div/div[3]/text()[1]");
//HtmlDivision divContent = (HtmlDivision) newPage.getByXPath("\\div[contains(@class, 'contentdiv_leftbox_data')]");
//System.out.println(divContent.asText());
//System.out.print("*************\n\n\n" + newPage.asText());
System.out.println(newPage.asText());
}
}
我看到了
执行程序后在控制台中推文按钮
资料Tweet
。
那么,我的第一个Google搜索结果的XPath是错误的,还是我在其他地方错了?
非常感谢你。
答案 0 :(得分:0)
由于userAgent
,您收到了错误的数据。
当谷歌收到请求时,它会在其数据库中搜索包含此数据的旧搜索:IP +网络浏览器+您的PC数据。
我不知道HTMLUnit的默认用户代理是什么,但如果您将其设置为与您正在使用的版本相同的版本,则应该得到相同的响应。
另外,我尝试在合适的歌词网站上搜索,而不是google。我不知道任何美国歌词网站,但它应该很容易找到。
希望有所帮助!