【问题标题】:Importing URLs for JSOUP to Scrape via Spreadsheet通过电子表格将 JSOUP 的 URL 导入到 Scrape
【发布时间】:2018-07-29 05:24:12
【问题描述】:

我终于让 IntelliJ 工作了。我正在使用下面的代码。它工作完美。我需要它一遍又一遍地循环并从电子表格中提取链接,以一遍又一遍地找到不同商品的价格。我有一个电子表格,其中 C 列从第 2 行开始有几个示例 URL。如何让 JSOUP 使用此电子表格中的 URL,然后输出到 D 列?

public class Scraper {

public static void main(String[] args) throws Exception {

    final Document document = Jsoup.connect("examplesite.com").get();

    for (Element row : document.select("#price")) {

        final String price = row.select("#price").text();

        System.out.println(price);
    }
}

提前感谢您的帮助! 埃里克

【问题讨论】:

  • 看来你这里有三个问题。 1.读取xls文件,2.用Jsoup抓取,3.编辑保存xls文件。
  • 克里斯蒂安,感谢您的回复。你什么意思?该程序现在完美运行,它从我需要的站点读取我需要的内容。我只需要它从工作表中拉出然后导出到工作表,你有什么想法吗? XLS 比 CSV 更受欢迎吗?再次感谢。
  • XLS 不优于 CSV,但重要的是要知道您要阅读和编辑哪一个。 CSV 可以逐行读取为文本文件,但 XLS 需要额外的库。那么它是 XLS 还是 CSV? C 列是最后一个吗?
  • Krystian,可以是任何格式!现在我们的工作表设置为 Product ID |产品名称 |网址 |价格 | URL 是我们试图从中提取的内容,而 Price 是我们希望提取的数据去往的地方。该视频可能与我正在尝试的类似,所以它一定是可能的,但我根本不确定如何到达那里! youtube.com/watch?v=gdi_uekRTeA

标签: java excel web-crawler jsoup scrape


【解决方案1】:

您可以使用 JExcel 库来读取和编辑工作表:https://sourceforge.net/projects/jexcelapi/

当您下载带有库的 zip 文件时,tutorial.html 也非常有用。

cmets 中的解释:

import java.io.File;
import java.io.IOException;

import jxl.Cell;
import jxl.CellType;
import jxl.Workbook;
import jxl.write.Label;
import jxl.write.WritableSheet;
import jxl.write.WritableWorkbook;

import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;

public class StackoverflowQuestion51577491 {

    private static final int URL_COLUMN = 2; // Column C
    private static final int PRICE_COLUMN = 3; // Column D

    public static void main(final String[] args) throws Exception {

        // open worksheet with URLs
        Workbook originalWorkbook = Workbook.getWorkbook(new File("O:/original.xls"));
        // create editable copy
        WritableWorkbook workbook = Workbook.createWorkbook(new File("O:/updated.xls"), originalWorkbook);
        // close read-only workbook as it's not needed anymore
        originalWorkbook.close();
        // get first available sheet
        WritableSheet sheet = workbook.getSheet(0);
        // skip title row 0
        int currentRow = 1;
        Cell cell;
        // iterate each cell from column C until we find an empty one
        while (!(cell = sheet.getCell(URL_COLUMN, currentRow)).getType().equals(CellType.EMPTY)) {
            // raed cell contents
            String url = cell.getContents();
            System.out.println("parsing URL: " + url);
            // parse and get the price
            String price = parseUrlWithJsoupAndGetProductPrice(url);
            System.out.println("found price: " + price);
            // create new cell with price
            Label cellWithPrice = new Label(PRICE_COLUMN, currentRow, price);
            sheet.addCell(cellWithPrice);
            // go to next row
            currentRow++;
        }
        // save and close file
        workbook.write();
        workbook.close();
    }

    private static String parseUrlWithJsoupAndGetProductPrice(String url) throws IOException {
        // download page and parse it to Document
        Document doc = Jsoup.connect(url).get();
        // get the price from html
        return doc.select("#priceblock_ourprice").text();
    }
}

之前: 后:

【讨论】:

  • 非常感谢您的帮助!这非常有帮助,我可以从这里对其进行定制以满足我的需要。我唯一想做的另一件事可能是研究多线程?我们将要解析近 15,000 个 URL,所以我不确定这是否可能。关于将产品名称添加到导出中,我可能还有另一个问题,但我会先尝试弄清楚自己。再次感谢您!
猜你喜欢
  • 2020-10-31
  • 1970-01-01
  • 1970-01-01
  • 2010-11-29
  • 1970-01-01
  • 2011-08-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多