尝试使用 Java 解析 HTML 目录列表中的链接

发布于 2024-11-05 01:42:20 字数 501 浏览 1 评论 0 原文

请有人帮我解析 HTML 页面中的这些链接

  • http://nemertes.lis.upatras.gr/dspace/handle/123456789/2299
  • http://nemertes.lis.upatras .gr/dspace/handle/123456789/3154
  • http://nemertes.lis.upatras.gr/dspace/handle/123456789/3158

我想使用“进行解析句柄”这个词在这些链接中很常见。

我正在使用命令 [Pattern pattern = Pattern.compile(" 但它解析了我所有的 href 页面的链接。

有什么建议吗?
谢谢

Please can someone help me parse these links from an HTML page

  • http://nemertes.lis.upatras.gr/dspace/handle/123456789/2299
  • http://nemertes.lis.upatras.gr/dspace/handle/123456789/3154
  • http://nemertes.lis.upatras.gr/dspace/handle/123456789/3158

I want to parse using the "handle" word which is common in these links.

I'm using the command [Pattern pattern = Pattern.compile("<a.+href=\"(.+?)\"");] but it parse me all the href links of the page.

Any suggestions?
Thanks

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

秋千易 2024-11-12 01:42:20

您的正则表达式正在查看所有 标签。 “handle”始终用作“/dspace/handle”等,因此您可以使用类似的内容来抓取您要查找的网址:

Pattern pattern = Pattern.compile("<a.+href=\"(/dspace/handle/.+?)\"");

Your regular expression is looking at ALL <a href... tags. "handle" is always used as "/dspace/handle" etc. so you can use something like this to scrape the urls you're looking for:

Pattern pattern = Pattern.compile("<a.+href=\"(/dspace/handle/.+?)\"");
又怨 2024-11-12 01:42:20

看起来你的正则表达式做错了什么。而不是

Pattern pattern = Pattern.compile("<a.+href=\"(.+?)\"");

尝试:

Pattern pattern = Pattern.compile("<a\\s+href=\"(.+?)\"");

第一个模式上的“a.+”至少匹配任何字符一次。如果您打算设置空格字符,请改用“\s+”。

以下代码完美运行:

    String s = "<a href=\"http://nemertes.lis.upatras.gr/dspace/handle/123456789/2299\"/> " +
            "<a href=\"http://nemertes.lis.upatras.gr/dspace/handle/123456789/3154\" /> " +
            "<a href=\"http://nemertes.lis.upatras.gr/dspace/handle/123456789/3158\"/>";

    Pattern p = Pattern.compile("<a\\s+href=\"(.+?)\"", Pattern.MULTILINE);
    Matcher m = p.matcher(s); 
    while(m.find()){
        System.out.println(m.start()+" : "+m.group(1));
    }

输出:

0 : http://nemertes.lis.upatras.gr/dspace/handle/123456789/2299
72 : http://nemertes.lis.upatras.gr/dspace/handle/123456789/3154
145 : http://nemertes.lis.upatras.gr/dspace/handle/123456789/3158

Looks like your regex is doing something wrong. Instead of

Pattern pattern = Pattern.compile("<a.+href=\"(.+?)\"");

Try:

Pattern pattern = Pattern.compile("<a\\s+href=\"(.+?)\"");

the 'a.+' on your first pattern is matching any character at least one time. If you intended to set the space character the use '\s+' instead.

The following code works perfect:

    String s = "<a href=\"http://nemertes.lis.upatras.gr/dspace/handle/123456789/2299\"/> " +
            "<a href=\"http://nemertes.lis.upatras.gr/dspace/handle/123456789/3154\" /> " +
            "<a href=\"http://nemertes.lis.upatras.gr/dspace/handle/123456789/3158\"/>";

    Pattern p = Pattern.compile("<a\\s+href=\"(.+?)\"", Pattern.MULTILINE);
    Matcher m = p.matcher(s); 
    while(m.find()){
        System.out.println(m.start()+" : "+m.group(1));
    }

output:

0 : http://nemertes.lis.upatras.gr/dspace/handle/123456789/2299
72 : http://nemertes.lis.upatras.gr/dspace/handle/123456789/3154
145 : http://nemertes.lis.upatras.gr/dspace/handle/123456789/3158
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文