0

この質問をする前に、私はいくつかの異なる方法を試しました。もちろん、いくつかの方向性/答えをグーグルで調べてみました. StackOverflow を確認しましたが、解決策が見つからないようです。

基本的に、たとえばURLとxpathに基づいてデータを返すツールを作成したい

URL:        http://www.google.co.uk/search?q=wicked+games
XPath:      id('rso')/li/div/h3/a

これらの結果を返す必要があります

http://puu.sh/3V4JG.jpg

たとえば、 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

他の場所で答えを探してみましたが、私が言ったように、役に立つものは何も見つかりませんでした。

4

1 に答える 1