gpt4 book ai didi

java - 如何使用 Jsoup 抓取 Google SERP?

转载 作者:行者123 更新时间:2023-11-30 02:50:49 27 4
gpt4 key购买 nike

我试图使用 600 个不同的搜索从 google 抓取链接,在此过程中我开始收到以下错误。

错误

org.jsoup.HttpStatusException: HTTP error fetching URL. Status=503, URL=http://ipv4.google.com/sorry/IndexRedirect?continue=http://google.com/search/...


现在我已经完成了研究,发生这种情况是因为谷歌学者禁令限制了您的搜索范围,并且需要解决 captch 才能继续,而 jsoup 无法做到这一点。

代码

Document doc = Jsoup.connect("http://google.com/search?q=" + keyWord)
.userAgent("Mozilla/5.0 (compatible; Googlebot/2.1; +http://www.google.com/bot.html)")
.timeout(5000)
.get();


互联网上的答案非常模糊,没有提供明确的解决方案,有人提到cookie可以解决这个问题,但没有说“如何”做到这一点。

最佳答案

一些改进抓取的提示:

1。使用代理

代理允许您减少被验证码捕获的机会。您应该使用 50 到 150 个代理,具体取决于您的平均结果集。这里有两个可以提供一些代理的网站:SEO-proxies.comProxify Switch Proxy .

// Setup proxy
String proxyAdress = "1.2.3.4";
int proxyPort = 1234;
Proxy proxy = new Proxy(Proxy.Type.HTTP, InetSocketAddress.createUnresolved(proxyAdress, proxyPort))

// Fetch url with proxy
Document doc = Jsoup //
.proxy(proxy) //
.userAgent("Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10.4; en-US; rv:1.9.2.2) Gecko/20100316 Firefox/3.6.2") //
.header("Content-Language", "en-US") //
.connect(searchUrl) //
.get();

2。验证码

如果您被验证码捕获,您可以使用一些在线验证码解决服务( Bypass CaptchaDeathByCaptcha 等)。以下是自动解决验证码的通用分步过程:

  • 检测验证码错误页面

--

try {

// Perform search here...

} catch(HttpStatusException e) {
switch(e.getStatusCode()) {
case java.net.HttpURLConnection.HTTP_UNAVAILABLE:
if (e.getUrl().contains("http://ipv4.google.com/sorry/IndexRedirect?continue=http://google.com/search/...")) {
// Ask online captcha service for help...
} else {
// ...
}
break;

default:
// ...
}
}
  • 下载验证码图像 (CI)

--

Jsoup                     //
//.cookie(..., ...) // Some cookies may be needed...
.connect(imageCaptchaUrl) //
.ignoreContentType(true) // Needed for fetching image
.execute() //
.bodyAsBytes(); // byte[] array returned...
  • 在线发送 CI 到在线验证码服务

--

这部分依赖于验证码服务API。您可以在这个8 best captcha solving services找到一些服务文章。

  • 等待回复...(1-2 秒最佳)
  • 填写表单并回复并使用 Jsoup 发送

    Jsoup FormElement是这里的救星。看这个working sample code了解详情。

3。其他一些提示

Hints for Google scrapers文章可以为您提供更多改进代码的指导。您会发现此处提供的前两个提示以及更多提示:

  • Cookie:每次 IP 更改时清除它们或根本不使用它们
  • 线程:您不应打开两个以上的连接。 Firefox limits itself to 4 connections每个代理。
  • 返回结果:将 &num=100 附加到您的网址以减少发送的请求
  • 请求率:让您的请求看起来更人性化。每个 IP 每 24 小时发送的请求不应超过 500 个。

引用文献:

关于java - 如何使用 Jsoup 抓取 Google SERP?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38713069/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com