我正在尝试获取背景图像的 URL。背景图像位于 a href 标签中。
href 标签,style="background-img:url("")"
我正在使用cheerio(类似于Jquery的node.js模块)。当我尝试获取它时,它给了我错误,
类型错误:无法读取未定义的属性“替换”
我的代码是:
$("div.listing.listing-blog.listing-blog-1.clearfix.columns-1.columns-1 > article > .item-inner  .featured.clearfix  a").map(function () {
    let imgURL = $(this).css("background-image");
    imgURL = imgURL.replace(/.*\s?url\([\'\"]?/, '').replace(/[\'\"]?\).*/, '');
    return { imgURL };
  }).get();
Run Code Online (Sandbox Code Playgroud)
这是需要背景图像 URL 的元素:
<article class="post-431236 type-post format-standard has-post-thumbnail   listing-item listing-item-blog  listing-item-blog-1 main-term-51 bsw-5 ">
<div class="item-inner clearfix">
<h2 class="title"> <a href="https://arynews.tv/en/nab-money-laundering-reference-shehbaz-sharif/" class="post-url post-title">
POST TITLE </a>
</h2>
<div class="featured clearfix">
<a alt="nab, shehbaz sharif, pml-n, benami assets" title="NAB prepares money-laundering reference against Shehbaz Sharif: sources" data-bs-srcset="{"baseurl":"https:\/\/arynews.tv\/wp-content\/uploads\/2020\/09\/","sizes":{"210":"shehbaz-1-1-210x136.jpg","279":"shehbaz-1-1-279x220.jpg","357":"shehbaz-1-1-357x210.jpg","750":"shehbaz-1-1.jpg"}}" …Run Code Online (Sandbox Code Playgroud) 我在请求应用程序上执行了一个简单的Cheerio解析。不知道为什么在尝试设置数组时会出现这个未定义的错误,但是我猜该值不存在。
        var $ = cheerio.load(body);
        var json = [  
            { "range": "", "address": "", "state": "", "zip": "", "info": "" }
        ];
        $('.findCourse').each(function (i, elem) {
            // Range Name
            console.log("iteration - ", i);
            console.log("name - ", $(this).text().trim());
            json[i].range = $(this).text().trim();
        });
Run Code Online (Sandbox Code Playgroud)
这是我的控制台响应,它读取并设置它在已抓取的html中找到的前两个项目。
iteration -  0
name -  Pollock's Ferry Hunting Club Inc.
iteration -  1
name -  Eagle 1
Run Code Online (Sandbox Code Playgroud)
TypeError:无法设置未定义的属性“范围”
Run Code Online (Sandbox Code Playgroud)at Object.<anonymous> (/usr/local/node_app/server.js:30:31) at exports.each (/usr/local/node_app/node_modules/cheerio/lib/api/traversing.js:267:24) at Request.request.post.form.__EVENTTARGET [as _callback] (/usr/local/node_app/server.js:26:30) at Request.self.callback (/usr/local/node_app/node_modules/request/request.js:121:22) at Request.EventEmitter.emit (events.js:98:17) at Request.<anonymous> (/usr/local/node_app/node_modules/request/request.js:978:14) …
我在node.js上使用cheerio(即jQuery服务器端)来解析网页.当试图获取href元素的属性时,我收到以下错误:
TypeError:Object#没有方法'attr'
我的代码是:
$('#commandes_pagination li a').each(function(index, element) {
    console.log(element.attr('href'));
});
Run Code Online (Sandbox Code Playgroud)
HTML是这样的:
<ul class="liste04" id="commandes_pagination">
    <li>        
        <a shape="rect" title="" href="/refonte/account/ajax/orderlist/1" class="page_num page_active" id="commandes_page-1">1</a>
    </li>
    <li>
        <a shape="rect" title="" href="/refonte/account/ajax/orderlist/2" class="page_num" id="commandes_page-2">2</a>
    </li>
</ul>
Run Code Online (Sandbox Code Playgroud)
我可以通过使用$(this).attr("href")而不是element.attr("href")但我无法弄清楚原因.任何解释都非常感谢!
我正在学习Nodejs,并尝试使用node.js进行网络报废
我正在使用节点模块request和cheerio
但是当我请求url时,它会返回一些符号而不是html正文
var request = require('request');
var cheerio = require('cheerio');
request({
    url:"http://mangafox.me/manga/shingeki_no_kyojin/v00/c000/1.html"
},(err, res, body) => {
    if(err) throw err;
    else {
        var $ = cheerio.load(body);
        console.log(body);
        }
});
Run Code Online (Sandbox Code Playgroud)
在命令提示符下输出
谁能告诉我这里有什么问题?
谢谢
我正在尝试从Node中的文件读取。这是我的代码:
const cheerio = require('cheerio');
var fs = require('fs');
var path = process.argv[2];
var glossArr = []
fs.readFileSync(path, {encoding: "utf8"}, function (err, markup){
    console.log('function executing')
    if (err) throw err;
    const $ = cheerio.load(markup);
    var glossar = $('body').children().last();
    var index = $('body').children().last().prev();
    glossar.children().children().children().each(function(i, elem) {
    var obj = {};
        var container = $(this).children();
    var unter = container.children();
    var begriff = unter.first().text();
    var text = unter.last().text();
    obj[begriff] = text;
    obj['file'] = path;
    glossArr.push(obj)
    });    
});
console.log('done reading file...')
var glossString = JSON.stringify(glossArr) …Run Code Online (Sandbox Code Playgroud) 我正在使用 node.js/cheerio(与 jQuery 语法相同)来解析页面。当我使用时:
$ = cheerio.load(body);
console.log($('.td-title a').text());
Run Code Online (Sandbox Code Playgroud)
我的控制台中有很长的字符串,来自单词“mainaboutcontactusprofile”等。如何制作一组 td 文本?
我正在使用 Cheerio 并通过 Node.js 请求进行一些基本的网络抓取,但似乎无法弄清楚如何访问数据。该页面通过请求加载,我可以使用 Cheerio 控制台.log 页面标题,但是当我访问脚本时,它是一堆复杂的对象。
在页面的正文部分,它看起来像..
<body> 
  <script src="someUrl" script type="text/javascript" /> 
  <script src="someUrl" script type="text/javascript" /> 
  <script src="someUrl" script type="text/javascript" />
  <script type="text/javascript">var months = [6,12,24,36,48,60]; var amounts = [5000,10000,15000,20000,25000]</script>
Run Code Online (Sandbox Code Playgroud)
我试图获取最后一个脚本中的变量,将它们作为变量存储在我的节点脚本中以供使用,但我似乎无法访问它们,即使是文本。
当我在节点中尝试这个时,我得到页面标题,然后是控制台中一些巨大的对象响应,而不是要解析的变量文本。建议?
$ = cheerio.load(body);
console.log($('title').text());
var text = $('script');
console.dir(text[3]);
Run Code Online (Sandbox Code Playgroud) 我正在尝试使用 Puppeteer 框架运行脚本。(我是软件的相对新手)。每次我尝试运行时,都会出现以下错误。我确信代码没有问题,因为它之前在另一台机器上运行良好。这个错误在 main.js 进行(唯一的)函数调用时被记录下来。
SyntaxError: Invalid or unexpected token
    at new Script (vm.js:80:7)
    at createScript (vm.js:274:10)
    at Object.runInThisContext (vm.js:326:10)
    at Module._compile (internal/modules/cjs/loader.js:664:28)
    at Object.Module._extensions..js (internal/modules/cjs/loader.js:712:10)
    at Module.load (internal/modules/cjs/loader.js:600:32)
    at tryModuleLoad (internal/modules/cjs/loader.js:539:12)
    at Function.Module._load (internal/modules/cjs/loader.js:531:3)
    at Function.Module.runMain (internal/modules/cjs/loader.js:754:12)
    at startup (internal/bootstrap/node.js:283:19)
Run Code Online (Sandbox Code Playgroud)
var puppeteer = require('puppeteer');
var $ = require('cheerio');
const url = 'https://www.reddit.com/controversial/';
?
puppeteer
  .launch()
  .then(function(browser) {
    return browser.newPage();
  })
  .then(function(page) {
    return page.goto(url).then(function() {
      return page.content();
    });
  })
  .then(function(html) {
    $('h2', html).each(function() {
        console.log($(this).text());
        console.log('\r\n');
    });
    })
  .catch(function(err) …Run Code Online (Sandbox Code Playgroud) 我正在用cheerio 和meteor 刮一个社交网络。我可以登录,搜索一些信息并在页面上抓取我想要的信息。我正在发出请求并将 html 传递给cheerio,就像用 Meteor.js抓取一样。
问题是,只有当我通过网络浏览器加载页面时,才会出现页面的一部分:
在浏览器中:
<div A>
    <div B>
        <ul (...)>
            <li (...)>...</li>
            ...
            <li (...)>...</li>
        </ul>
    </div> <-- end B -->
    <script id="NAME_1" type="fs/embed+m"></script>
    <script type="text/javascript">fs.dupeXHR("NAME_1","NAME_2",{"renderControl":"custom","templateId":"NAME_1"});</script>
</div> <-- end A -->
Run Code Online (Sandbox Code Playgroud)
在 console.log(cherio.load(html)) 中:
<div A>
    <script id="NAME_1" type="fs/embed+m"></script>
    <script type="text/javascript">fs.dupeXHR("NAME_1","NAME_2",{"renderControl":"custom","templateId":"NAME_1"});</script>
</div> <-- end A -->
Run Code Online (Sandbox Code Playgroud)
我假设 html 是由cheerio 加载的,而不执行脚本。我对吗?如果是这样,有什么方法可以让cheerio 执行脚本,这样我就可以在放置内容后抓取页面?
我正在使用以下选项发出 http 请求来模拟浏览器请求,所以我认为这不是请求本身的问题(无头浏览器不会让它变得更好)。
Options = function (cookie) {
  this.headers = {
    "Accept": "*/*",
    "Connection": "keep-alive",
    "User-Agent":"Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) …Run Code Online (Sandbox Code Playgroud)