NodeJS Cheerio提取物系列文章

3qpi33ja  于 2023-01-08  发布在  Node.js
关注(0)|答案(1)|浏览(130)

我需要提取日期和文章的完整网址。

const cheerio = require('cheerio');
const request = require('request');
const resolveRelative = require('resolve-relative-url');
        request('https://www.moneyweb.co.za/', function (error, response, html) {
            if (!error && response.statusCode == 200) {
                const $ = cheerio.load(html);
                $('.border0010-dotted').each(function (i, element) {
                    const title = $(this).find('.title').text().trim()
                    const url = resolveRelative($(this).find('.a href').text().trim(), response.request.uri.href)
                    const date = $(this).attr('.inline-block')
                    const description = $(this).find('.excerpt').text().trim()
                    const feedItem = {
                        title: title,
                        description: description,
                        url: url,
                        date: date
                    }
                    console.log(feedItem)
                })
            }
    });

输出如下所示:

{ title: 'Hiring a new bank CEO rarely improves the share price',
  description: 'New CEOs have done little to boost Europe bank stocks.',
  url: 'https://www.moneyweb.co.za/',
  date: undefined }

我怎样才能得到日期和完整的网址?

goqiplq2

goqiplq21#

几个问题:

  • const date = $(this).attr('.inline-block')应该是find()而不是attr()。一些容器具有alternate日期位置,但$(this).find(".meta .inline-block:last").prev().text();似乎能够获取所有这些位置。
  • .border0010-dotted出现在文章的底部,数据较少,因此我建议使用#home-panel-loop .border0010-dotted将选择器细化到主要内容。
  • URL可以通过访问href属性从.title a元素中提取。.a hrefclass="a"元素中查找<href>标记。
const cheerio = require("cheerio"); // 1.0.0-rc.12
const request = require("request");

request("https://www.moneyweb.co.za/", function (error, response, html) {
  if (!error && response.statusCode === 200) {
    const $ = cheerio.load(html);
    $("#home-panel-loop .border0010-dotted").each(function () {
      const title = $(this).find(".title").text().trim();
      const url = $(this).find(".title a").attr("href");
      const date = $(this)
        .find(".meta .inline-block:last")
        .prev()
        .text()
        .trim();
      const description = $(this).find(".excerpt").text().trim();
      const feedItem = {title, description, url, date};
      console.log(feedItem);
    });
  }
});

相关问题