【问题标题】:Jsoup web scrapingJsoup网页抓取
【发布时间】:2013-01-02 22:25:11
【问题描述】:

我正在尝试使用 jSoup 抓取具有以下内容的网站。我对 jSoup 很陌生,并且仍在尝试弄清楚。我想做的是能够获取产品名称和价格并将它们放入一个excel文件中,名称在A列,价格在B列,0.00可以忽略或放在C列更容易.任何帮助都会很棒,只是因为我知道有人会问,这不是家庭作业。
提前感谢我真的很感激。

<tr>
        <td class="sku" width="40" align="center">AAN13097</td>
        <td class="productName" width="440"><a name="<!-- Empty field [Field4]  -->"></a> 
                                American Antler Dog Chew Large (40-60 lb Dogs)                                          </td>
        <!--<td id="weight_816">0</td>-->
        <td class="quantity" width="20" align="center">
            <input type="text" name="816:qnty" id="qnty_816" class="inputQuantity">
            <input type="checkbox" name="itemnum" value="816" id="itemnum_816" class="itemnum">
        </td>
        <!--<td class="extWeight" id="extWeight_816">0.0</td>-->
        <td width="80" align="center" id="price_816">$9.70</td>
        <td width="120" align="center" class="extPrice" id="extPrice_816">$0.00</td>
    </tr>
                                                                                                                <!-- rec 815 -->

<tr>
        <td class="sku" width="40" align="center">AAN13096</td>
        <td class="productName" width="440"><a name="<!-- Empty field [Field4]  -->"></a> 
                                American Antler Dog Chew Medium (20-40 lb Dogs)                                         </td>
        <!--<td id="weight_815">0</td>-->
        <td class="quantity" width="20" align="center">
            <input type="text" name="815:qnty" id="qnty_815" class="inputQuantity">
            <input type="checkbox" name="itemnum" value="815" id="itemnum_815" class="itemnum">
        </td>
        <!--<td class="extWeight" id="extWeight_815">0.0</td>-->
        <td width="80" align="center" id="price_815">$7.15</td>
        <td width="120" align="center" class="extPrice" id="extPrice_815">$0.00</td>
    </tr>

** 这会是表格元素,因为这是列表之前的“表格”代码,如果不是,我应该在 html 代码中寻找什么?

<table border="0" cellpadding="8" cellspacing="0" id="orderForm" width="700">
<thead>
<tr>
<th width="40px" align="center">Line</th>
<th width="420" align="center">Item description&nbsp;</th>
<th width="40px" align="center">Quantity</th>
<th width="80px" align="center">Unit Price</th>
<th width="120px" align="center">Amount</th>
</tr>
</table><div class="tableCont"><table border="0" cellpadding="8" cellspacing="0"    
id="orderForm" width="700" height="350px">
<tbody>                                                                                                           
<!-- rec 1638 -->
<a name="1638"></a>

【问题讨论】:

  • 网页抓取可能违反某些网站的使用条款。你确定你有这样做的权限吗?
  • 是的,这是我使用的供应商,他们没有技术人员,因此他们没有 csv 文件中的项目可导入我的订单管理软件。

标签: java web-scraping jsoup


【解决方案1】:

应该这样做。但是您发布的 HTML 不包含 tr 的表 parent,当然必须在 HTML 中才能使此代码起作用,否则 Jsoup 将删除 tr/td 元素并且代码将不起作用。

Document doc = Jsoup.parse(html); // html attribute should contain tr elements HTML content
String productName = doc.select("tr .productName").first().text(); // Get name
Element extPriceElement = doc.select("tr td.extPrice").first();
String id = extPriceElement.id().replaceAll("extPrice_", ""); // Get id     
String productPrice = doc.select("tr #price_" + id).first().text(); // Get price
String productExtPrice = extPriceElement.text(); // Get ext price
System.out.println("Product name : " + productName);                
System.out.println("Price : " + productPrice);
System.out.println("Ext price : " + productExtPrice);

【讨论】:

  • 这是表格元素吗,因为这是列表之前的“表格”代码
猜你喜欢
  • 1970-01-01
  • 2019-04-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-07-21
  • 2015-02-27
  • 2016-04-04
  • 2021-06-28
相关资源
最近更新 更多