【问题标题】:How to extract a link with Jsoup? [closed]如何使用 Jsoup 提取链接? [关闭]
【发布时间】:2016-01-27 15:30:16
【问题描述】:

我正在使用 JSoup 来抓取网络并获取结果。我想执行关键字搜索。例如我爬 http://www.business-standard.com/ 用于以下关键字:

谷歌海得拉巴

它应该为我提供链接:

http://www.business-standard.com/article/companies/google-to-get-7-2-acres-in-hyderabad-it-corridor-for-its-campus-115051201238_1.html.

我写了下面的代码,但没有给我合适的结果。

import java.io.IOException;

import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;
import org.jsoup.nodes.Element;
import org.jsoup.select.Elements;

public class App {

  public static void main(String[] args) {

    Document doc;
    try {
        doc = Jsoup.connect("http://www.business-standard.com").userAgent("Mozilla").get();
        String title = doc.title();
        System.out.println("title : " + title);

        Elements links = doc.select("a:contains(google)");
        for (Element link : links) {
            System.out.println("\nlink : " + link.attr("href"));
            System.out.println("text : " + link.text());
        }
    } catch (IOException e) {
        e.printStackTrace();
    }
  }
}

结果如下:

标题:印度新闻、最新新闻头条、疯牛病直播、NSE 直播、股市直播、财经新闻、商业新闻和印度经济市场分析 - 商业标准新闻 链接:/photo-gallery/current-affairs/mumbai-central-turns-into-wi-fi-zone-courtesy-goo‌​gle-power-2574.htm 文字:孟买中心变成 Wi-Fi 区,由 Google 提供 链接:plus.google.com/+businessstandard/posts 文字:谷歌+

Jsoup 1.8.2

【问题讨论】:

  • 你的问题是什么?
  • Google 抓取网络并将其抓取的内容作为两个单独的进程编制索引。
  • 没有得到适当的结果是什么意思?任何不允许的 4 字母单词?
  • 结果如下:- 标题:印度新闻、最新新闻头条、BSE 直播、NSE 直播、股市直播、财经新闻、商业新闻和印度经济市场分析 - 商业标准新闻链接:/photo-gallery/current-affairs/mumbai-central-turns-into-wi-fi-zone-courtesy-google-power-2574.htm 文本:孟买中心变成 Wi-Fi 区,由 Google 电源提供链接:plus.google.com/+businessstandard/posts 文字:Google+
  • 您需要定义一个规则来确定“关键字”是什么。然后您需要索引这些用法,并且您的搜索需要以该数据集为基础。 JSoup 只会成为更大解决方案的一小部分(充其量)。

标签: java web-crawler jsoup


【解决方案1】:

试试这个网址:

http://www.business-standard.com/search?q=<keyword>

示例代码

Document doc;
try {
    String keyword = "google hyderabad";
    doc = Jsoup //
            .connect("http://www.business-standard.com/search?q=" + URLEncoder.encode(keyword, "UTF-8")) //
            .userAgent("Mozilla") //
            .get();

    String title = doc.title();
    System.out.println("title : " + title);

    Elements links = doc.select("a:contains(google)");
    for (Element link : links) {
        System.out.println("\nlink : " + link.absUrl("href"));
        System.out.println("text : " + link.text());
    }
} catch (IOException e) {
    e.printStackTrace();
}

输出

您要查找的链接在第二个位置。

title : Search

link : http://www.business-standard.com/article/pti-stories/google-to-invest-more-in-india-set-up-new-campus-115121600841_1.html
text : Google to invest more in India, set up new campus in Hyderabad

link : http://www.business-standard.com/article/companies/google-to-get-7-2-acres-in-hyderabad-it-corridor-for-its-campus-115051201238_1.html
text : Google to get 7.2 acres in Hyderabad IT corridor for its campus

link : http://www.business-standard.com/article/technology/swine-flu-closes-google-hyderabad-office-for-2-days-109071500023_1.html
text : Swine flu closes Google Hyderabad office for 2 days

link : http://www.business-standard.com/article/pti-stories/facebook-posts-strong-4q-as-company-closes-gap-with-google-116012800081_1.html
text : Facebook posts strong 4Q as company closes gap with Google

link : http://www.business-standard.com/article/pti-stories/r-day-bsf-camel-contingent-march-on-google-doodle-116012600104_1.html
text : R-Day: BSF camel contingent marches on Google doodle

link : http://www.business-standard.com/article/international/daimler-ceo-says-apple-google-making-progress-on-car-116012501298_1.html
text : Daimler CEO says Apple, Google making progress on car

link : https://plus.google.com/+businessstandard/posts
text : Google+

讨论

下面的示例代码仅获取第一个结果页面。如果您需要获取更多结果,请提取下一个链接页面 (#hpcontentbox div.next-colum &gt; a) 并使用 Jsoup 进行抓取。

您会注意到我提供给您的上述链接还有其他参数:

  • itemPerPages:不言自明(默认为 19)
  • page :搜索结果页面索引(如果没有提供,默认为1)
  • company-code : ?? (可以为空)

您可以尝试将itemPerPages 赋予具有较大值(100 或更多)的 url。这可能会减少您的抓取时间。

absUrl 方法用于获得绝对网址而不是相对网址。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2023-03-18
    • 2018-09-17
    • 2015-11-03
    • 1970-01-01
    • 1970-01-01
    • 2019-07-15
    • 1970-01-01
    相关资源
    最近更新 更多