この質問をする前に、私はいくつかの異なる方法を試しました。もちろん、いくつかの方向性/答えをグーグルで調べてみました. StackOverflow を確認しましたが、解決策が見つからないようです。
基本的に、たとえばURLとxpathに基づいてデータを返すツールを作成したい
URL: http://www.google.co.uk/search?q=wicked+games
XPath: id('rso')/li/div/h3/a
これらの結果を返す必要があります
たとえば、 http://renualsoft.com/jordon/person.xmlなどの正確な XML ファイルを取得する場合、他の URL から XML をうまく解析できますが、Google でこれを行う方法がわかりません。
私はこれを試しました
DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
factory.setNamespaceAware(true);
DocumentBuilder builder;
Document doc = null;
XPathExpression expr = null;
builder = factory.newDocumentBuilder();
doc = builder.parse("http://www.google.co.uk/search?q=wicked+games");
XPathFactory xFactory = XPathFactory.newInstance();
XPath xpath = xFactory.newXPath();
expr = xpath.compile("id('rso')/li/div/h3/a/@href");
Object result = expr.evaluate(doc, XPathConstants.NODESET);
NodeList nodes = (NodeList) result;
for (int i = 0; i < nodes.getLength(); i++) {
System.out.println(nodes.item(i).getNodeValue());
}
ただし、この例外が発生します
Exception in thread "main" java.io.IOException: Server returned HTTP response code: 403 for URL: http://www.google.co.uk/search?q=wicked+games
at sun.net.www.protocol.http.HttpURLConnection.getInputStream(HttpURLConnection.java:1625)
at com.sun.org.apache.xerces.internal.impl.XMLEntityManager.setupCurrentEntity(XMLEntityManager.java:633)
at com.sun.org.apache.xerces.internal.impl.XMLVersionDetector.determineDocVersion(XMLVersionDetector.java:189)
at com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(XML11Configuration.java:799)
at com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(XML11Configuration.java:764)
at com.sun.org.apache.xerces.internal.parsers.XMLParser.parse(XMLParser.java:123)
at com.sun.org.apache.xerces.internal.parsers.DOMParser.parse(DOMParser.java:237)
at com.sun.org.apache.xerces.internal.jaxp.DocumentBuilderImpl.parse(DocumentBuilderImpl.java:300)
at javax.xml.parsers.DocumentBuilder.parse(DocumentBuilder.java:177)
at NewEmptyJUnitTest.query(NewEmptyJUnitTest.java:35)
at NewEmptyJUnitTest.main(NewEmptyJUnitTest.java:77)
Java Result: 1
他の場所で答えを探してみましたが、私が言ったように、役に立つものは何も見つかりませんでした。