繁体   English   中英

我想从属性内容中获取每个家的url

[英]I want to get the urls of each home from the attribute content

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


const url = "https://www.airbnb.co.in/s/Haridwar--Uttarakhand/homes?tab_id=home_tab&refinement_paths%5B%5D=%2Fhomes&flexible_trip_lengths%5B%5D=one_week&price_filter_input_type=0&price_filter_num_nights=5&l2_property_type_ids%5B%5D=1&search_type=autocomplete_click&query=Haridwar%2C%20Uttarakhand&place_id=ChIJyVfuuA5HCTkR8_VApnaRRE4&date_picker_type=calendar&source=structured_search_input_header";

async function scrapHomesPage(url)
{
    try
    {
    const browser = await puppeteer.launch({headless:false});
    const page = await browser.newPage();
    
    await page.goto(url);
    
    const html = await page.evaluate(()=> document.body.innerHTML);
    const $ =  cheerio.load(html); 
    
    const homes = $('[itemprop="url"]').map((i, element) => $(element).attr("content")).get();
    console.log(homes);
    }
    catch(err)
    {
        console.error(err);
    }
    
}

scrapHomesPage("https://www.airbnb.co.in/s/Haridwar--Uttarakhand/homes?tab_id=home_tab&refinement_paths%5B%5D=%2Fhomes&flexible_trip_lengths%5B%5D=one_week&price_filter_input_type=0&price_filter_num_nights=5&l2_property_type_ids%5B%5D=1&search_type=autocomplete_click&query=Haridwar%2C%20Uttarakhand&place_id=ChIJyVfuuA5HCTkR8_VApnaRRE4&date_picker_type=calendar&source=structured_search_input_header");

我试图添加所有我可以等待页面加载所有内容的内容。 我尝试等待选择器等。我总是得到一个空数组,而不是我应该得到一个数组,其中包含 Airbnb 网站上针对该特定位置列出的每个房屋的所有链接。

我看不出有任何理由在这里使用 Cheerio。 这只是获取所需数据的另一层间接访问,涉及额外的依赖关系、页面的第二次解析以及当页面与您创建的 HTML 快照不同步时可能出现错误。 如果确实需要使用它,可以使用page.content()而不是page.evaluate(() => document.body.innerHTML)

至于主要问题,您似乎缺少对page.waitForSelector的调用:

const puppeteer = require("puppeteer"); // ^19.0.0

const url = "your url";

let browser;
(async () => {
  browser = await puppeteer.launch();
  const [page] = await browser.pages();
  await page.goto(url, {waitUntil: "domcontentloaded"});
  await page.waitForSelector('[itemprop="url"]');
  const content = await page.$$eval(
    '[itemprop="url"]',
    els => els.map(el => el.getAttribute("content"))
  );
  console.log(content);
})()
  .catch(err => console.error(err))
  .finally(() => browser?.close());

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM