[Jsoup] 模拟浏览器:get方式简单获取网页数据(一)

从一个URL获取Document对象的其他姊妹章:

模拟浏览器:get方式简单获取网页数据(一)
模拟浏览器:post方式模拟登陆获取网页数据(二)
模拟浏览器:Jsoup工具类的使用及失败重试的retry策略(三)

学习爬虫第一件事情是干什么?你的lead第一件交代给你的任务可能是:把某论坛的的第一页数据爬下来。
你需要从一个网站获取和解析一个HTML文档,并处理相关的数据。你的第一件事情就时候模拟一个浏览器。

1. 事前准备:引入Jsoup的Jar包(Maven pom.xml)

    <!-- jsoup HTML parser library @ http://jsoup.org/ -->
    <dependency>
        <groupId>org.jsoup</groupId>
        <artifactId>jsoup</artifactId>
        <version>1.10.2</version>
    </dependency>

2. 代码示例:

第一种:无参数绑定直接提交:

    // 以 Document 对象形式返回网页
    public void testJsop(){
        Document doc = null;
        try {
            doc = Jsoup.connect("http://www.csdn.net/").timeout(4000).userAgent("Mozilla").get();
            System.out.println(doc);
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

解释说明: connect(String url) 方法创建一个新的 Connection,timeout(int millis) 设置超时时间,userAgent(String userAgent)设置浏览器user-Agent的,userAgent更加详细的讲解可以参看:「浏览器的UserAgent大全」关于和get() 取得和解析一个HTML文件。如果从该URL获取HTML时发生错误,便会抛出 IOException, 应适当的进行处理。


第二种:有参数绑定的提交: 最常见的是分页获取数据,以我们大CSDN论坛来举例

可以从下面的URL中看出传递参数key为page, value为2 即为访问URL的第二页的数据(注:此种不仅仅只针对URL上的参数,有的时候为了获取最终的数据会有中间的url访问, 这需要借助类似火狐的Firebug查看其参数后,再绑定提交。)

http://bbs.csdn.net/forums/Other?page=2

代码为:

    public void testJsop(){
        try {
            Connection conn = Jsoup.connect("http://bbs.csdn.net/forums/Other");
            conn.data("page","2");
            Document doc = conn.timeout(4000).userAgent("Mozilla").get();
            System.out.println(doc);
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

3. 总结及注意:模拟浏览器最基本的前提就是创建connection, 之后在connection上扩展添加属性, 常见的有header, data, cookie等,其绑定方法和上述的用法一样。且要注意的是connect方法中传递的url必须以“http://”为开头,不能直接写url为www.example.com,不然你获取的网页源码可能什么都没有


Jsoup学习讨论QQ群:50695115

Jsoup爬虫代码示例及博客内源码下载:https://github.com/bluetata/crawler-jsoup-maven

更多Jsoup相关文章,请查阅专栏:【Jsoup in action】


本文原创由`bluetata`发布于blog.csdn.net、转载请务必注明出处。


Flag Counter

猜你喜欢

转载自blog.csdn.net/dietime1943/article/details/64443345