java - 使用Java抓取网页数据

标签 java html

我现在正在尝试使用 Java 实现一个简单的 HTML 网页抓取工具。现在我遇到了一个小问题。 假设我有以下 HTML 片段。

<div id="sr-h-left" class="sr-comp">
    <a class="link-gray-underline" id="compare_header"  rel="nofollow" href="javascript:i18nCompareProd('/serv/main/buyer/ProductCompare.jsp?nxtg=41980a1c051f-0942A6ADCF43B802');">
        <span style="cursor: pointer;" class="sr-h-o">Compare</span>
    </a>
</div>
<div id="sr-h-right" class="sr-summary">
    <div id="sr-num-results">
        <div class="sr-h-o-r">Showing 1 - 30 of 1,439 matches, 

我感兴趣的数据是底部显示的整数 1.439。我只是想知道如何从 HTML 中获取该整数。 我现在考虑用正则表达式,然后用java.util.Pattern帮忙把数据取出来,但是还不是很清楚这个过程。 如果你们能给我一些关于这个数据抓取的提示或想法,我将不胜感激。 非常感谢。

最佳答案

正则表达式可能是最好的方法。像这样的东西:

Pattern p = Pattern.compile("Showing [0-9,]+ - [0-9,]+ of ([0-9,]+) matches");
Matcher m = p.matches(scrapedHTML);
if(m.matches()) {
    int num = Integer.parseInt(m.group(1).replaceAll(",", ""));
    // num == 1439
}

我不确定您所说的“过程”是什么意思,但代码的作用如下:p 是与“Showing...”行匹配的正则表达式模式。 m 是将该模式应用于抓取的 HTML 的结果。如果 m.matches() 为真,则表示模式与 HTML 匹配,并且 m.group(1) 将是第一个正则表达式组(括号中的表达式)模式是 ([0-9,]+),它匹配一串数字和逗号,因此它将是“1,459”。 replaceAll() 调用将其转换为“1459”,而 Integer.parseInt() 将其转换为整数 1459

关于java - 使用Java抓取网页数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2615727/

相关文章:

java - 在android中用 Dagger 注入(inject)适配器

java - 如何从 Java 客户端获取 httponly cookies?

java - 强制 JScrollPane 滚动 (X) 像素

javascript - 更改段落中的按钮元素

java - 是否有任何库可以从 .class 文件(字节码)中提取类、方法、成员和字段依赖项名称?

java - 嵌套类的接口(interface)静态方法

javascript - 如何在 HTML 页面变长时触发事件?

javascript - 移动端的 HTML5 可视化

html - Flexbox - 每行可容纳 2,3 或 1 件元素

html - 如果类只能包含一个元素,为什么还要有 id 这样的东西呢?