0

我有一个相当混乱的问题。我实际上只做了一天的网络,所以请原谅我,如果我犯了一个愚蠢的错误,我深表歉意。我的问题是我无法以编程方式访问 URL,我可以通过复制粘贴到 chrome 中访问该 URL。

我正在使用一个名为 jsoup ( http://jsoup.org/apidocs/ ) 的库,它从网站的原始 html 中解析文本。一般来说,我的目标是使用可以附加字符串的基本 url,并从中获取网页。我正在使用代码(编辑那些要求更多代码的人,我知道这仍然很稀疏,但这是错误之前的唯一代码)

String url = "https://www.google.com/search?q=definition+of+";
url += search; //search is the passed in string
Document doc = Jsoup.connect(url).get(); //url is the String in question

获取网页。我的最终目标是在搜索单词定义时使用此方法获取 chrome 搜索顶部框的文本。即此处顶部的框:https ://www.google.com/search?q=definition+of+apple

但是,当我尝试使用上面的链接作为我的 url 时,我遇到了一个问题,因为我得到了一个 org.jsoup.HttpStatusException,所以我认为这是一个网络问题。是什么导致这个 url 在输入 chrome 时有效,但在 Java 中无效?(我也不会反对以不同方式获取该框中的信息,因为我目前的方法感觉有点迂回)

完整的错误信息(编辑)

Exception in thread "main" org.jsoup.HttpStatusException: HTTP error fetching URL. Status=403, URL=https://www.google.com/search?q=definition+of+apple
at org.jsoup.helper.HttpConnection$Response.execute(HttpConnection.java:435)
at org.jsoup.helper.HttpConnection$Response.execute(HttpConnection.java:410)
at org.jsoup.helper.HttpConnection.execute(HttpConnection.java:164)
at org.jsoup.helper.HttpConnection.get(HttpConnection.java:153)
at test.Test.parseDef(Test.java:68)
at test.Test.main(Test.java:112)

无论谁回答,感谢您花时间帮助网络新手!

4

3 回答 3

2

最有可能的是,Google 准确地将您的程序识别为“机器人”并采取相应措施。谷歌鼓励机器人使用谷歌自定义搜索 API,不鼓励他们使用面向人的搜索界面。

事实上,所有网络蜘蛛都应该检查 robots.txt,对吧?这是谷歌的:http ://www.google.com/robots.txt 。请注意, /search 是不允许的。

请参阅此问题以获取更多信息。这基本上是您问题的python版本。 为什么 Google 搜索会返回 HTTP 错误 403?

于 2013-08-21T14:46:59.213 回答
0

如果您使用 Jsoup,则必须将空格替换为 %20 而不是 +。

试试这个网址: https ://www.google.com/search?q=definition%20of%20apple

String url = "https://www.google.com/search?q=definition%20of%20";
url += search; //search is the passed in string
Document doc = Jsoup.connect(url).get();
于 2013-08-21T14:32:42.473 回答
0
public static void main(String[] args) {
    Document doc = Jsoup.connect(link)
        .data("query", "Java")
        .userAgent("Mozilla")
        .cookie("auth", "token")
        .timeout(1000)
        .post();
}
于 2015-10-06T08:48:20.137 回答