【问题标题】:How can I line break p tag in Cheerio?如何在 Cheerio 中换行 p 标签?
【发布时间】:2022-01-02 11:51:41
【问题描述】:

我正在从网站上抓取一些段落,我遇到了这个问题,但我不知道如何解决它。

结构是这样的,例如:

<div class = "container">
   <p> This is a long paragraph 1. </p>
   <p> This is a long paragraph 2. </p>
   <p> This is a long paragraph 3. </p>
   <p> This is a long paragrahp 4. </p>
</div>

所以我做了这样的事情来获取我刚才提到的示例段落中的文本。

function scrapeData() {
    let data = []
    let url = `scraping-url`;
    axios(url)
    .then(response =>{
        const html = response.data
        const $ = cheerio.load(html, {xmlMode: true})

        $('.container', html).each(function(){
            const text = $(this).find('p').text()
            data.push({
              text
            })
            console.log(data)
        })

    }).catch(err => console.log(err))
}

但我得到的结果是{This is a long paragraph 1.This is a long paragraph 2.This is a long paragraph 3.This is a long paragraph 4.} 粘在一起,我想将这些段落分成每个文本块

我希望在我的 console.log(data) 中像这样

{
    This is a long paragraph 1.
    This is a long paragraph 2.
    This is a long paragraph 3.
    This is a long paragraph 4.
}

【问题讨论】:

    标签: javascript jquery web-scraping cheerio


    【解决方案1】:

    调整选择器以匹配p 标签,然后遍历每个标签并构造您的数据。

    试试这个:

       // select p tags in the container
        $('.container p', html).each(function(){
            const text = $(this).text();
            data.push({
              text
            });
        });
    
        console.log(data);
    

    【讨论】:

    • 不幸的是,它看起来像这样。 {text: 'This is paragraph 1.'} {text: 'This is paragraph 2.'} ... {text: 'This is paragraph 4'}。更具体地说,我在外面放了一个循环,用 each 函数像你所做的那样刮掉所有新闻 URL,然后我继续在 each 内使用 each 刮掉里面的新闻段落,所以如果它看起来像我在描述{text: 'info'} {text: 'info'},我不知道它属于哪个新闻的哪个段落。
    • 您说“我想将这些段落分成每个文本块”,而我提供的解决方案允许这样做。就像我说的,您需要构建数据以满足您的需求,并且您可以在循环中做到这一点。 JSON对象是一个键值数据容器,它不能有你想要的结构({string},但是{key:value}),使用Arraydata.push(text)。如果您需要跟踪其他信息,请将其添加为属性:data.push({whatever:data, text:text}); 等。
    • 谢谢,我明白你的意思,我会试试的。非常感谢您的指导!
    【解决方案2】:

    也许在后面加上换行符:

    $('p').after("\n")
    

    或者当你加入他们时:

    $('p').get().map(p => $(p).text()).join("\n")
    

    【讨论】:

      猜你喜欢
      • 2010-11-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-06-14
      • 1970-01-01
      • 2015-01-08
      • 1970-01-01
      相关资源
      最近更新 更多