任何Javascript都会阻止我的程序抓取此页面

时间:2012-12-01 09:06:08

标签: java javascript html web-crawler jsoup

    Document doc = Jsoup.connect("http://www.utah.edu/").get();
    Elements lists = doc.select("ul");
    for (Element list: lists) {
        Elements li = list.select("li a");
        if (li.size() > 0) {
            ArrayList<String> anchors = new ArrayList<String>();
            for (Element e : li) {
                anchors.add(e.text());
            }
            System.out.println(anchors);
        }
    }

我正在尝试抓取this pageul标记所呈现的所有html列表。但它失败了。我怀疑页面中有脚本阻止我的程序这样做。

修改:为了使我的问题更简单,请考虑以下代码:

Document doc = Jsoup.connect("http://www.utah.edu/").get();
Elements lists = doc.select("ul");
System.out.println(lists.size());

输出:

0

1 个答案:

答案 0 :(得分:1)

一个可能的答案是,jsoup发送的 User-Agent 标头让utah.edu认为它是机器人而不是浏览器。所以它返回其他页面内容。

org/jsoup/helper/HttpConnection.java已实施的get()中,默认情况下不会发送 User-Agent 标头,除非另有说明。

因此,您需要使用userAgent()手动设置它。

示例,伪造Chrome:

String ua = "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.11 (KHTML, like Gecko) Chrome/23.0.1271.95 Safari/537.11";
Document doc = Jsoup.connect("http://www.utah.edu/").userAgent(ua).get();