簡體   English   中英

努力抓取多個頁面 - Cheerio.js

[英]Struggling to scrape multiple pages - Cheerio.js

我正在嘗試使用 Javascript 和 Cheerio 創建一個網絡抓取工具,當我嘗試從抓取頁面中的 url 抓取數據時遇到了一些困難。 例如,我抓取第一頁的一些細節(包括鏈接頁面的 URL),然后當我嘗試使用回調函數抓取鏈接頁面時,我無法將返回值分配給對象。 兩個刮板都單獨工作,但是我在讓它們異步運行時遇到問題,並且變量 detailsPage 始終返回為未定義。

任何幫助將不勝感激!

const cheerio = require("cheerio");
const axios = require("axios");

const scrapeAllData = () => {
  return scrapeListingPage(scrapeFullDetailsPage, "www.fakeURL.com");
};



function scrapeListingPage(callbackFn, url) {
  axios.get(url)
    .then(response => {
      const $ = cheerio.load(response.data);
      let products = [];
      let singleProduct = {};

      $(".page-content-thumbs-two .row .col-sm-8").each((i, e) => {
        singleProduct = {
          price: $(e).find($("h3")),
          shortDescription: $(e).find($("p")),
          fullProductDetailsURL: $(e).find($("a")).attr("href"),
          detailsPageData: {}
        };
        singleProduct.detailsPage = scrapeFullDetailsPage(singleProduct.fullDescriptionURL);
        products.push(singleProduct);
      });
      console.log("Product DATA --> ", products);
    });
}

function scrapeFullDetailsPage(url) {
  axios.get(url).then(res => {
    const $ = cheerio.load(res.data);
    let detailsPageData = {};
    $("#container").each((i, e) => {
      detailsPageData.fullDescription = $(e)
        .find($("p span"))
        .text();
    });
    console.log("detailsPageData", detailsPageData);
    return detailsPageData;
  });
}

scrapeAllData();

你的singleProduct.detailsPage總是為空的原因是scrapeFullDetailsPage()函數本質上是異步的,因為 axios 庫是基於 Promise 的。

請研究如何使 axios 同步作為一種潛在的解決方案,我希望它有所幫助。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM