【问题标题】:Can't figure out how to scrape specific text - Using Jsoup无法弄清楚如何抓取特定文本 - 使用 Jsoup
【发布时间】:2017-04-06 08:45:09
【问题描述】:

我刚开始学习如何使用 JSoup。我想我已经成功地选择了 html 的这一部分,并且我通过执行 .select("span.title").text 成功地取出了“DARK SOULS III Deluxe Edition”,但在这种情况下我试图获取价格84.98 美元和 55.23 美元。我尝试做 .select("div.col search_price responsive_secondrow").text 但它显示为空白。我想知道是否有人可以帮助我弄清楚如何提取该部分,在此先感谢!这是页面部分的html。

完整的html是view-source:http://store.steampowered.com/search/?filter=topsellers

<a href="http://store.steampowered.com/sub/94174/?snr=1_7_7_topsellers_150_1"  data-ds-packageid="94174" data-ds-appid="374320,442010"onmouseover="GameHover( this, event, 'global_hover', {&quot;type&quot;:&quot;sub&quot;,&quot;id&quot;:94174,&quot;public&quot;:1,&quot;v6&quot;:1} );" onmouseout="HideGameHover( this, event, 'global_hover' )" class="search_result_row ds_collapse_flag" >
                <div class="col search_capsule"><img src="http://cdn.edgecast.steamstatic.com/steam/subs/94174/capsule_sm_120.jpg?t=1476893662"></div>
                <div class="responsive_search_name_combined">
                    <div class="col search_name ellipsis">
                        <span class="title">DARK SOULS III Deluxe Edition</span>
                        <p>
                            <span class="platform_img win"></span>                          </p>
                    </div>
                    <div class="col search_released responsive_secondrow">12 Apr, 2016</div>
                    <div class="col search_reviewscore responsive_secondrow">
                                                        <span class="search_review_summary positive" data-store-tooltip="Very Positive&lt;br&gt;86% of the 29,204 user reviews for games in this bundle are positive.">
                            </span>
                                                </div>


                    <div class="col search_price_discount_combined responsive_secondrow">
                        <div class="col search_discount responsive_secondrow">
                            <span>-35%</span>
                        </div>
                        <div class="col search_price discounted responsive_secondrow">
                            <span style="color: #888888;"><strike>$84.98</strike></span><br>$55.23                          </div>
                    </div>
                </div>


                <div style="clear: left;"></div>
            </a>

【问题讨论】:

    标签: java web web-scraping jsoup


    【解决方案1】:

    使用 doc.select("a.search_result_row") 代替:

    public class JsoupSteamTest {
    
        public static void main(String[] args) throws IOException {
    
            Document doc = Jsoup.connect("http://store.steampowered.com/search/?filter=topsellers").userAgent("Mozilla")
                    .get();
    
            Elements table = doc.select("a.search_result_row");
    
            Iterator<Element> ite = table.iterator();
            while (ite.hasNext()) {
                Element element = ite.next();
                System.out.println(element.text());
    
            }
        }
    }
    

    你会得到一个这样的列表:

    PLAYERUNKNOWN'S BATTLEGROUNDS 23 Mar, 2017 29,99€
    Steel Division: Normandy 44 Coming Soon 39,99€
    DARK SOULS™ III 11 Apr, 2016 -50% 59,99€ 29,99€
    

    您的特殊问题来自具有多个类的 div。

    要选择具有多个类的元素,请在选择中使用点而不是空格:

    doc.select("div.col.search_price.discounted.responsive_secondrow");
    

    看看这个问题:JSOUP get element with multiple classes

    【讨论】:

    • 谢谢 在我看到那个帖子之前,我以为价格是单节课的。我想知道 a.search_result_row 如何过滤标题、日期和价格?我在 html 中看到了很多其他的 a 标签
    • 是的,但“a.search_result_row”表示“a href 元素下的 search_result_row”。它就像一个过滤器
    猜你喜欢
    • 1970-01-01
    • 2012-06-15
    • 1970-01-01
    • 2014-12-18
    • 1970-01-01
    • 2012-02-21
    • 2013-05-19
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多