亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

在 Java 中使用 Scanner 進行網頁抓取

在 Java 中使用 Scanner 進行網頁抓取

HUH函數 2022-06-30 18:02:14
我應該使用 URL 和掃描程序類進行網絡抓取,并從網站上的 HTML 代碼中僅找出過去 8 天的能源消耗量。所以我有一個 24x8 的數組來適應所有的數字。我正在使用 .findInLine 來識別小時前:我在這里使用第一個部分來識別第一個小時的數字塊。while (in.findInLine("00-01") == null) in.nextLine();in.nextLine() // skip rest of the line containing "00-01"<td>00-01</td><td align="right"> 11872</td><td align="right"> 12146</td><td align="right"> 12861</td><td align="right"> 12561</td><td align="right"> 13493</td><td align="right"> 13386</td><td align="right"> 12732</td><td align="right"> <b>12249</b></td>我的問題是我不知道如何提取這些數字并將它們放入數組中,因為我有 24 個這些部分。
查看完整描述

2 回答

?
皈依舞

TA貢獻1851條經驗 獲得超3個贊

給定輸入,以下將提取每行的數字。


  Pattern pattern = Pattern.compile("\\d+");

    while (in.hasNext())

    {

      String str = in.nextLine();

      Matcher m = pattern.matcher(str);

      while (m.find())

      {

        //Change this to add to add to an array

        System.out.println(m.group());           


      }

    }


查看完整回答
反對 回復 2022-06-30
?
慕哥6287543

TA貢獻1831條經驗 獲得超10個贊

鑒于您的輸入有限,我僅使用純掃描儀界面就做到了:


public class Scrap {


private final static String HOUR_PATTERN = "<td>\\d{2}-\\d{2}</td>";

private final static String TD_DELIMETER = "\\s|<|>";


public static void main(String[] args) {

    Scanner in = new Scanner(Scrap.class.getResourceAsStream("/input"));

    List<Integer> res = new ArrayList<>();

    while (in.hasNext()) {

        if (!in.hasNext(HOUR_PATTERN)) {

            System.out.println(in.next());

            continue;

        }

        String found = in.next(HOUR_PATTERN);

        Pattern delim = in.delimiter();

        in.useDelimiter(TD_DELIMETER);

        for (int i = 0; i < 8; i++) {// you wrote it is going to be 8 entries

            while (in.hasNext()) {

                if (in.hasNextInt()) {

                    res.add(in.nextInt());

                } else {

                    System.out.println(in.next());

                }

            }

        }

        in.useDelimiter(delim);

    }

    System.out.println(res);

}

}

給定輸入


blelblebll


<td>00-01</td>

<td align="right"> 11872</td>

<td align="right"> 12146</td>

<td align="right"> 12861</td>

<td align="right"> 12561</td>

<td align="right"> 13493</td>

<td align="right"> 13386</td>

<td align="right"> 12732</td>

<td align="right"> <b>12249</b></td>


<td>00-01</td>

<td align="right"> 11872</td>

<td align="right"> 12146</td>

<td align="right"> 12861</td>

<td align="right"> 12561</td>

<td align="right"> 13493</td>

<td align="right"> 13386</td>

<td align="right"> 12732</td>

<td align="right"> <b>12249</b></td>



<td>00-01</td>

<td align="right"> 11872</td>

<td align="right"> 12146</td>

<td align="right"> 12861</td>

<td align="right"> 12561</td>

<td align="right"> 13493</td>

<td align="right"> 13386</td>

<td align="right"> 12732</td>

<td align="right"> <b>12249</b></td>



<td>00-01</td>

<td align="right"> 11872</td>

<td align="right"> 12146</td>

<td align="right"> 12861</td>

<td align="right"> 12561</td>

<td align="right"> 13493</td>

<td align="right"> 13386</td>

<td align="right"> 12732</td>

<td align="right"> <b>12249</b></td>

生產


[11872, 12146, 12861, 12561, 13493, 13386, 12732, 12249, 11872, 12146, 12861, 12561, 13493, 13386, 12732, 12249, 11872, 12146, 12861, 12561, 13493, 13386, 12732, 12249, 11872, 12146, 12861, 12561, 13493, 13386, 12732, 12249]

它基于您的輸入示例,因此它現在可能適用于實時標記。


或者,您可以將<.*?>其用作分隔符并僅關注數字模式。


查看完整回答
反對 回復 2022-06-30
  • 2 回答
  • 0 關注
  • 168 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號