问题描述
抓取常见问题解答页面答案
我正在尝试抓取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