Bing搜索Jsoup - 我怎样才能避免验证码?

时间:2015-08-01 17:31:06

标签: java jsoup

keywordexist = false;
try {
    res = Jsoup
            .connect(
                    bingSearchUrl.replaceAll("keyword", "intitle:\""
                            + keyword + "\""))
            .userAgent(
                    "Mozilla/5.0 (Windows NT 6.2; WOW64) AppleWebKit/537.15 (KHTML, like Gecko) Chrome/24.0.1295.0 Safari/537.15")
            .referrer("http://www.bing.com")
            .method(Connection.Method.GET).execute();
    doc = res.parse();
    System.out.println(bingSearchUrl.replaceAll("keyword", "intitle:\""
            + keyword + "\""));
    elements = doc.select("li[class^=b_algo]");
    System.out.println(doc.html());
    System.out.println(elements.html());
    // String divContents =
    // doc.select(".id-app-orig-desc").first().text();
    // elements.remove("div");
    if (elements.html().contains("<strong>" + keyword + "</strong>")) {
        keywordexist = true;
        System.out.println("keyword exists");
    }
} catch (IOException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
}

我正在尝试使用jsoup检查我在Bing Search中的关键字列表,但每当我运行我的程序时,jsoup将始终连接到Bing的验证码页面,有什么方法可以避免这种情况吗?我认为这可以通过添加一个useragent和referrer来解决,但它似乎没有任何影响。

1 个答案:

答案 0 :(得分:0)

我使用了类似于你的代码并获得了所有结果。然而,我注意到以下两点:

  • 我认为你应该在两次搜索之间放慢速度。例如,添加3000到5000毫秒的随机暂停。

  • 不要忘记转义查询参数

示例代码

String bingSearchUrl = "http://www.bing.com/search?q=keyword";
String keyword = "stackoverflow jsoup";

String uaString = "Mozilla/5.0 (Windows NT 6.2; WOW64) AppleWebKit/537.15 (KHTML, like Gecko) Chrome/24.0.1295.0 Safari/537.15";
String url = bingSearchUrl.replaceAll("keyword", URLEncoder.encode("intitle:\"" + keyword + "\"", "UTF-8"));

Document doc = Jsoup.connect(url).userAgent(uaString).get();

System.out.println(doc.select("li h2"));