【问题标题】:Formatting the string result of text()格式化 text() 的字符串结果
【发布时间】:2016-05-20 16:01:53
【问题描述】:

美好的一天,有谁知道如何在 text() 给出的结果中格式化或添加一些额外的字符串(像逗号)?我在网页抓取中使用它。

这是刮板的sn-p:

var makeupCatBrand = $('span.caption').children('h6').text().trim()

这是我使用console.log(makeupCatBrand)时的结果:

Jeffree StarCharlotte TilburyRCMA MakeupNatasha DenonaAnna SuiJeffree StarSugarpillAnna SuiArmour BeautyOCCSugarpillCover FXIT Cosmetics rms beautyMake-Up AtelierCover FXCover FXIT Cosmetics beautyblenderBY TERRYKevyn AucoinbeautyblenderIT Cosmetics Charlotte TilburyBY TERRYCover FXViseartCover FXWayne GossRCMA MakeupAnna SuiAnna SuiCover FXOCCAnna SuiCharlotte Tilbury

我尝试将它推送到一个数组,但所有这些都只显示为数组中的一个索引。

我想为每个品牌添加至少一个逗号(Jeffree Star、Charlotte Tilbury 等),以便在推送到数组之前轻松拆分它。非常感谢任何答案或想法

哦,他们都是同一个班级,没有ID,这就是为什么我要一个一个刮他们会很困难

这是两个品牌的 html 代码(它们都具有相同的格式,所以我只包括一个,如果该品牌的产品有两种或更多可用的色调,则唯一的变化) :

<li class="shop_t_browse">
    <a class="tile" href="/p/jeffree-star-velour-liquid-lipstick" >
        <span class="img txt_c">
            <img class="inlineblock"     src="//dy6g3i6a1660s.cloudfront.net/eNiRpXtM7WlLKE7qyhAw4AR-BH4/320_p-cd/jeffree-star-velour-liquid-lipstick.jpg" alt="Jeffree Star Velour Liquid Lipstick" />
        </span>
        <span class="caption">

            <h6>Jeffree Star</h6>
            <h5>Velour Liquid Lipstick</h5>
            <p><strong>$18 USD</strong></p>
            <small class="shop_msg_color">
                24 shades available
            </small>
            <small class="rating_reviews txt_pale hidden_mobile">
                <div class="ratingInfo">
                    <span class="rating_image_small" style="background-position: 0 -250.0000000000px;"></span>
                    <span class="txt_pale glyph_stat"> / 674</span>
                </div>
            </small>
        </span>
    </a>
</li>

【问题讨论】:

  • 添加包含该信息的 HTML 代码。
  • $('span.caption').children('h6') 返回什么?
  • @JoeHanink 控制台日志很长,我会编辑我的帖子以显示一些品牌的 html 代码
  • 这很奇怪,你从一个数组(选择器到 h6)开始,然后你想用逗号将它们连接起来,这样你就可以在逗号上将它们拆分回一个数组...
  • @JoeHanink 我认为这只是相互连接的字符串。我想把它推到一个数组,因为代码刮过 h6,但我不知道怎么做。

标签: javascript jquery web-scraping cheerio superagent


【解决方案1】:

据我所知,您可以,因为您似乎有多个孩子,请分别检查每个孩子。

所以这就是它的工作原理。

var makeupCatBrand;
$('span.caption').children('h6').each(function(){
    makeupCatBrand += $(this).text().trim();
    makeupCatBrand += ", ";
})

【讨论】:

  • 这有帮助,但是第一个品牌中有一个未定义的词(undefinedJeffree Star),有什么想法吗?
  • 与未定义的共享html我会看看工作:)
  • 其中一个品牌的 html 在问题中,所有其他品牌的 html 代码都相同,所以我没有费心复制所有这些。我在 console.log makeupCatBrand 后遇到了这个问题。无论如何,@Christian Hedemann 的回答产生了相同的结果,但没有未定义的词,但我仍然想知道是什么导致了该问题以供参考
【解决方案2】:

您必须使用replace() 方法将空格替换为逗号或逗号和空格,如下所示:

makeupCatBrand.replace(" ", ",");

makeupCatBrand.replace(" ", ", ");

第一个参数是要替换的字符串部分,第二个参数是要替换的字符串。

您也可以使用split() 方法来获取字符串数组,如下所示:

var strArray = makeupCatBrand.split(" ");

您可以按原样拆分字符串,这样如果您想在最终结果中保留它,您可以添加一个逗号和空白。

【讨论】:

  • Tnx 回答:D
【解决方案3】:
var children = $('span.caption').children('h6');

var resultsArray = [];
for (var i=0;i<children.length;i++) {
  resultsArray[i] = children[i].textContent;
}

console.log(resultsArray);

工作代码 - http://jsbin.com/hozasahota/1/edit?html,js,output

【讨论】:

  • jsbin 在哪里?
  • 我在我的代码中尝试过,但它返回了许多与长度相同的未定义
【解决方案4】:

一行,用','分隔:

var makeupCatBrand = $('span.caption').children('h6').map(function(){return $(this).text()}).get().join(',');

...因为它是 ',' 可以省略,因为它是默认值。我把它放在代码中是为了表明分隔符可以自定义。

【讨论】:

  • 这也有帮助,比我接受的答案略好,tnx!
【解决方案5】:
var arr = [];
$('span.caption').children('h6').each(function()
{
    arr.push($(this).text().trim());
});
console.log(arr.join(","));

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-06-23
    • 1970-01-01
    • 2023-03-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-10-03
    相关资源
    最近更新 更多