remot解析rss

466 阅读1分钟

参考:https://blog.csdn.net/baidu_22796075/article/details/83276876

业务需求:我们需要对一个网站进行爬虫,但是该网站可能会有防爬虫机制,当然我们可以用webdriver+jsoup来解决,但是如果这个网站有Rss订阅的话,我们完全可以对Rss进行爬取,因为这个Rss上面有你需要爬取的全部数据,现在的问题就是如何去解析Rss的xml结构内容。

依赖

  <!-- jsoup-->
        <dependency>
            <groupId>org.jsoup</groupId>
            <artifactId>jsoup</artifactId>
            <version>1.11.3</version>
        </dependency>
        <!--rome-->
        <dependency>
            <groupId>com.rometools</groupId>
            <artifactId>rome</artifactId>
            <version>1.8.0</version>
        </dependency>

测试

大家自己去找一个Rss订阅就好了,我就不提供了,url换成Rss的地址。

 try {
            URL url = new URL("");
            // 读取Rss源
            XmlReader reader = new XmlReader(url);
            System.out.println("Rss源的编码格式为:" + reader.getEncoding());
            SyndFeedInput input = new SyndFeedInput();
            // 得到SyndFeed对象,即得到Rss源里的所有信息
            SyndFeed feed = input.build(reader);
            //System.out.println(feed);
            // 得到Rss新闻中子项列表
            List entries = feed.getEntries();
            // 循环得到每个子项信息
            for (int j = 0; j <entries.size(); j++) {
                SyndEntry entry = (SyndEntry) entries.get(j);
                //SyndContent description = entry.getDescription();
                String title=entry.getLink();
                //System.out.println(title);
                //System.out.println(entry.getDescription().getValue());
                Document document= Jsoup.parse(entry.getDescription().getValue());
                Elements elements=document.select("p");
                for (Element element:elements){
                    String text=element.text();
                    if (!text.contains("<p>")){
                        System.out.println(text);
                    }

                }
                System.out.println("---------------------------");

            }
        } catch (Exception e) {
            e.printStackTrace();
        }