利用jsoup抓取网页的图文信息,只需要网页上的文章和图片,怎么样同时抓取这两个信息?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了利用jsoup抓取网页的图文信息,只需要网页上的文章和图片,怎么样同时抓取这两个信息?相关的知识,希望对你有一定的参考价值。

就是我需要同时抓取文章和图片,因为图片是插入在文章中的,图片我可以只存储url,然后需要存入数据库,是要做成类似这种<p>asjkda</p><img src="a.jpg"/><p>salkd</p>的html文档存入数据库吗?怎么实现?

参考技术A 觉得吧~如果你想抓取网页分页信息可以使用第三方工具进行抓取,但是问题就来了,加入你是要自己程序实现的话,这样就很麻烦。所以建议自己实现比较好。因为分页内容,每一页都有一个特定的链接,而且很相似,就只有那个指定页数的参数不同而已。所以你可以先用遍历方式将每个网页抓取后解析,然后再存起来,这样比较实际点。
但是我建议你可以在客户端也使用分页模式,这样的话,根据需求去获取,就不会一下子请求的数据量太大。追问

那我现在可以抓取整个html文档,只留下含有和的部分,如何操作呢?

使用 Jsoup 抓取网页时转到下一页

【中文标题】使用 Jsoup 抓取网页时转到下一页【英文标题】:Going to next page when web scraping with Jsoup 【发布时间】:2021-06-28 14:11:21 【问题描述】:

我正在尝试使用 Jsoup 抓取此 https://www.actksa.com/ar/training-courses/training-in/Jeddah,我编写的代码仅获取第一页上的主题。

try 
                String url = "https://www.actksa.com/ar/training-courses/training-in/Jeddah";

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

                Elements data = doc.select("tr");
                int size = data.size();
                Log.d("doc", "doc: "+doc);
                Log.d("data", "data: "+data);
                Log.d("size", ""+size);
                for (int i = 0; i < size; i++) 

                    String title = data.select("td.wp-60")
                            .eq(i)
                            .text();

                    String detailUrl = data.select("td.wp-60")
                            .select("a")
                            .eq(i)
                            .attr("href");
                    parseItems.add(new ParseItem(title, detailUrl));
                    Log.d("items"," . title: " + title);

如何继续从下一页抓取主题? 我注意到我可能可以使用分页,但我不确定如何使用。其次,当转到下一页时,链接会略有变化,所以我可以使用它。转到下一页并继续抓取标题的代码是什么?

【问题讨论】:

【参考方案1】:

该站点的分页似乎由?page=&lt;int&gt; 查询参数控制。 只需将现有代码包装在将控制当前页面的 for 循环中。

int numPages = 5; // the number of pages to scrape
for (int i = 0; i < numPages; i++) 
    String url = "https://www.actksa.com/ar/training-courses/training-in/Jeddah?page=" + i;

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

    Elements data = doc.select("tr");
    int size = data.size();
    Log.d("doc", "doc: "+doc);
    Log.d("data", "data: "+data);
    Log.d("size", ""+size);
    for (int j = 0; j < size; j++) 
         String title = data.select("td.wp-60")
                .eq(j)
                .text();
         String detailUrl = data.select("td.wp-60")
                .select("a")
                .eq(j)
                .attr("href");
        parseItems.add(new ParseItem(title, detailUrl));
        Log.d("items"," . title: " + title);
    

如果您想在不硬编码数字的情况下获取所有页面,则将递增放在一个 while 循环中,当页面上的表格没有内容时该循环将中断。例如https://www.actksa.com/ar/training-courses/training-in/jeddah?page=6 不是一个有效的页面,只是显示一个带有空表的页面。

【讨论】:

以上是关于利用jsoup抓取网页的图文信息,只需要网页上的文章和图片,怎么样同时抓取这两个信息?的主要内容,如果未能解决你的问题,请参考以下文章

jsoup抓取网页数据

使用 Jsoup 抓取网页时转到下一页

使用jsoup抓取和解析网页数据

Jsoup抓取解析网页和poi存取excel综合案例——采集网站的联系人信息

jsoup抓取页面源码的问题、源码被隐藏、

如何利用java中url实现网页内容的抓取