美文网首页Java技术分享Java 杂谈
【爬虫】网络爬虫入门获取信息

【爬虫】网络爬虫入门获取信息

作者: 墨迹嘿嘿 | 来源:发表于2019-01-07 14:32 被阅读4次
    image

    在互联网普及的现今社会,网络数据信息对人们的帮助越来越大,减少了之前通过报纸,杂志,电视,广播,书籍等等获取信息的方式,爬虫信息就变成了一种获取信息的渠道。

    网页和普通文档的基本区别就是:它存在超级链接。需要的信息往往通过链接指向网页中,超链接标签为下面所示:

    <pre style="margin: 0px; padding: 0px; max-width: 100%; box-sizing: border-box !important; overflow-wrap: break-word !important; background: none;">

    <a href="网址信息url"></a>

    </pre>

    某新闻网网页截图:

    image

    如上图所示,某新闻网站,其中需要的文本信息就是用a标签包裹起来的超级链接。

    <pre style="margin: 0px; padding: 0px; max-width: 100%; box-sizing: border-box !important; overflow-wrap: break-word !important; background: none;">

    <a href="http://www.herbert.com/life/2019/01-03/8719330.shtml" target="_blank">十大网红城市兰州排名第六</a>

    </pre>

    对于这种超链接,我们可以使用正则表达式提取文本信息,但是复杂的正则表达式可读性不好。另一种还可以使用专用的HTML解析器来实现提取网址信息

    下面简单我们写一个提取超链接的代码块

    <pre style="margin: 0px; padding: 0px; max-width: 100%; box-sizing: border-box !important; overflow-wrap: break-word !important; background: none;">

    String url ="http://www.herbert.com/";
    //解析的对象就是一个文档信息
    Document document =Jsoup.connect(url).get();
    Elements elements = doc.select("a[href]");
    //循环遍历每一个超链接
    for(Element el : elements){
    //得到href属性中的值,也就是超链接的地址信息
    String elHref = el.attr("href");
    System.out.println(elHref);
    }

    </pre>

    目前已经拿到每一个超链接的地址信息了,就可以采集超链接对应的文档信息。

    现在我们采集信心详情页,也就是超级链接对应的文档信息

    <pre style="margin: 0px; padding: 0px; max-width: 100%; box-sizing: border-box !important; overflow-wrap: break-word !important; background: none;">

    Document doc = Jsoup.connect("http://www.herbert.com/life/2019/01-03/8719330.shtml").get();
    //获取网页源码信息
    System.out.pritnln(doc.html());

    </pre>

    这里Document对象就是DOM树的根节点。然后去取想要的每一个节点的信息。

    现在采集标题,在此,标题是下面代码信息

    <pre style="margin: 0px; padding: 0px; max-width: 100%; box-sizing: border-box !important; overflow-wrap: break-word !important; background: none;">

    <h1 style="display:block; position:relative; text-align:center; clear:both">
    十大网红城市兰州排名第六
    </h1>

    </pre>

    image

    获取标题中的内容

    <pre style="margin: 0px; padding: 0px; max-width: 100%; box-sizing: border-box !important; overflow-wrap: break-word !important; background: none;">

    Elements es = doc.select("h1");
    //如果没有找到h1标签就返回
    if (es.first() == null){
    return;
    }
    //获取h1标签的内容
    String title = es.get(0).text();
    System.out.println(title);

    </pre>

    另外还有获取HTML中Class和Id选择器的一些方法,比如有下面的一个节点

    <pre style="margin: 0px; padding: 0px; max-width: 100%; box-sizing: border-box !important; overflow-wrap: break-word !important; background: none;">

    <p id="red">这个段落是红色。</p>

    </pre>

    <pre style="margin: 0px; padding: 0px; max-width: 100%; box-sizing: border-box !important; overflow-wrap: break-word !important; background: none;">

    <h1 class="center">
    This heading will be center-aligned
    </h1>

    </pre>

    这种形式的可以通过下面代码获取

    <pre style="margin: 0px; padding: 0px; max-width: 100%; box-sizing: border-box !important; overflow-wrap: break-word !important; background: none;">

    Elements es = document.getElementsByClass("center");

    Element content = document.getElementById("red");

    </pre>

    对于某些特定的网站可以通过请求接口直接获取数据,并对JSON串进行解析,得到数据。

    另外有一些网站信息的url地址是通过递增的方式形成的,比如:

    <pre style="margin: 0px; padding: 0px; max-width: 100%; box-sizing: border-box !important; overflow-wrap: break-word !important; background: none;">

    http://www.herbert.com/page/index.shtml
    http://www.herbert.com/page/index_1.shtml
    http://www.herbert.com/page/index_2.shtml
    http://www.herbert.com/page/index_3.shtml

    </pre>

    <pre style="margin: 0px; padding: 0px; max-width: 100%; box-sizing: border-box !important; overflow-wrap: break-word !important; background: none;">

    http://www.herbert.com/page/0000001
    http://www.herbert.com/page/0000001/2
    http://www.herbert.com/page/0000001/3
    http://www.herbert.com/page/0000001/4

    </pre>

    猜你喜欢
    往期精选

    【爬虫】数据结构实现折半查找的算法

    【爬虫】Java基本技术一览表

    ♡ 大 · 家 · 都 · 爱 ♡

    SpringBoot + Redis 实现缓存机制

    SpringBoot + Dubbo + Mybatis 分层实现分布式服务

    SpringBoot 整合Dubbo构建分布式服务

    任务调度框架梳理 -基于Quartz

    image
    1.jpg

    相关文章

      网友评论

        本文标题:【爬虫】网络爬虫入门获取信息

        本文链接:https://www.haomeiwen.com/subject/eksurqtx.html