Cheerio从HTML页面获取常见问题解答问答,该页面的答案隐藏在AccordionSummaryToggle

问题描述

抓取常见问题解答页面答案

我正在尝试抓取FAQ页面,并将页面上的每个问题和答案分成一个不同的对象。

我可以这样提取问题:

$(".accordion-group").map((i,e) => ({
   title: $("head > title").text(),question: $(".faqfield-question",e).text(),/ FAQ Answer can't render without pressing + button
   answer: "FAQ Answer here:" + $(".faqfield-answer",}));

但是我无法访问答案,因为标签$(".faqfield-answer")隐藏在手风琴的“ +”拨动开关后面

作为解决方法...

我能够在此行底部的此行中找到以下所有.faqfield-answers

console.log($('script[id="__NEXT_DATA__"]').get(0).children[0].data);

但是,鉴于此JSON块,我不确定如何提取.faqfield-answer。所有答案(而不是一次)都在“ block_content”中

{
  "props": {
    "initialProps": {
      "pageProps": {
        "errorCode": 0,"contentData": {
          "field_fp_page_components": {
            "paragraph": [{
              "field_fp_hd_onedigital_vcaptn": [],"field_fp_hd_onedigital_videothum": []
            },{
              "field_common_1d_block": {
                "block_content": [
                  "{\"name\":\"FAQBlock\",... \"answer\":{\"processed\":\"\u003cdiv class=\\\"faqfield-answer\\\"\u003e\u003cp\u003eYes,as part of our commitment to support ...,\"answer\":{\"processed\":\"\u003cdiv class=\\\"faqfield-answer\\\"\u003e\u003cp\u003eYes.

我对Cheerio还是很陌生,我们将为您提供任何帮助!

解决方法

$('script [id =“ NEXT_DATA ”]')。get(0).children [0] .data本身就是JSON,所以...

const block_content = JSON.parse(
        $('script[id="__NEXT_DATA__"]').get(0).children[0].data
      ).props.initialProps.pageProps.contentData.field_fp_page_components
        .paragraph[1].field_common_1d_block.block_content;
    

为您提供另一个JSON,以获取faqfield-answer

JSON.parse(block_content).faq_details.map((faq) => ({answer: $("div",faq.answer.processed).text()))

为您提供每个答案!

密钥两次使用JSON.parse