标签: cheerio

从 Request.js 请求方法返回结果?

var request = require('request');
var cheerio = require('cheerio');


    request(url, function (error, response, html) {
        if (!error && response.statusCode == 200) {
            var $ = cheerio.load(html);


            var link = $('.barbar li a');
            var Url = link.attr('href');
            var Title = link.find('span').first().text();
            var results = [Url, Title];


            return results;
        } 
    });

console.log(results);
Run Code Online (Sandbox Code Playgroud)

结果未定...

我想使用结果将超链接添加到 HTML 页面,但我不知道如何访问结果/在回调之外返回它们。我看过其他帖子,但它们都使用其他库,并且通常只有一个在范围内使用 console.log 的示例。

javascript request node.js cheerio

4
推荐指数
1
解决办法
2686
查看次数

使用cheerio查找并替换某些属性

我有一个与此类似的 html 片段

<div class="form-row">
  <input type="text" id="foo1">
</div>
<div class="form-row">
 <input type="text" id="foo2">
</div>
<div class="form-row">
  <input type="text" id="foo3">
</div>
Run Code Online (Sandbox Code Playgroud)

我想使用cheerio将id标签更改为foobar[1,2,3]

我的代码是

 var cheerio = require("cheerio");
 var $ = cheerio.load("html as above");

 var inputs = $('input[id]');

 Object.keys(inputs).forEach(function(key,index) {
   if (key == index) {
     console.log(key,inputs[key])
     //#1
 });
Run Code Online (Sandbox Code Playgroud)

此时(//#1),我想获取 id 属性的值,根据https://github.com/cheeriojs/cheerio上的文档,我可以使用 .data 方法来获取和更改元素中的属性,但是

inputs[key].data("id")
Run Code Online (Sandbox Code Playgroud)

给我一个“TypeError:未定义不是函数”错误

我知道我错过了一些简单的东西,但看不到树木的木材,并且希望得到一些指示。

谢谢

更新#1

正当我以为我已经抓住了它时,它却从我的手指上滑落了……

现在,我想移动一个元素:

我有

<label>xyz<i class="fa fa-list"></i></label>
Run Code Online (Sandbox Code Playgroud)

而且我要

<label>xyz</label><i class="fa fa-list"></i>
Run Code Online (Sandbox Code Playgroud)

代码 - 不起作用;) - 是这个

var icons = $('label i');

icons.each(function(index,icon) …
Run Code Online (Sandbox Code Playgroud)

javascript html-parsing cheerio

4
推荐指数
1
解决办法
6954
查看次数

使用 Puppeteer 查找网站中最大的图像

我正在使用Cheerio来查找网页内最大的图像。这是我使用的代码:

  const { src } = $('img')
      .map((i, el) => ({
        src: el.attribs.src,
        width: el.attribs.width ? Number(el.attribs.width.match(/\d+/)[0]) : -1,
      }))
      .toArray()
      .reduce((prev, current) => (prev.width > current.width ? prev : current));
Run Code Online (Sandbox Code Playgroud)

但是,仅当 with width 内联于 img 时,它才有效。如果没有宽度,我会将其宽度设置为-1并在排序时考虑它

有没有办法使用Puppeteer找到网页中最大的图像而不需要这些技巧?由于浏览器正在渲染所有这些,因此它可以轻松找出哪一个是最大的

javascript node.js cheerio puppeteer

4
推荐指数
1
解决办法
1983
查看次数

nodejs使用cheerio解析xml返回空CDATA

我在nodejs中使用cheerio来解析一些rss feed.我抓住所有将它们放入阵列的物品.我使用3个测试源,它们都为每个"item"元素都有一个"description"子元素.在其中一个Feed中,整个"描述"被包装为CDATA,我无法获得它的价值.这是一个缩写的代码片段

//Open the xml document with cheerio
$ = cheerio.load(arrXmlDocs[i],{ ignoreWhitespace : true, xmlMode : true});

//Loop through every item
$('item').each(function(i, xmlItem){

    //array to hold each item being converted into an array
    var tempArray = [];

    //Loop through each child of <item>
    $(xmlItem).children().each(function(i, xmlItem){
        //Get the name 
        tempArray[$(this)[0].name] = $(this).text();
    }

}
Run Code Online (Sandbox Code Playgroud)

正如所料,没有CDATA的两个RSS提供给我一个像这样的数组

[
    [
        name: 'name of episode',
        description:'description of episode',
        pubdate: 'published date'
    ],
    [
        name: 'name of episode',
        description:'description of episode',
        pubdate: 'published date'
    ]
] …
Run Code Online (Sandbox Code Playgroud)

javascript xml cdata node.js cheerio

3
推荐指数
1
解决办法
3062
查看次数

node js cheerio xml

我有以下代码,它可以正常工作:

<troveUrl>http://trove.nla.gov.au/work/23043869</troveUrl> 
Run Code Online (Sandbox Code Playgroud)

但是我希望从同一页面获得以下'id'之后的值,并且无法得到它!

<work id="23043869" url="/work/23043869">
Run Code Online (Sandbox Code Playgroud)

这是我目前拥有的代码

var request = require ('request'),
    cheerio = require ('cheerio');
    request('http://api.trove.nla.gov.au/result?key=6k6oagt6ott4ohno&zone=book&q-year1-date=2000&l-advformat=Thesis&l-australian=y&q-term2=&q-term3=&q-term0=&q-field1=title%3A&q-type2=all&q-field0=&q-term1=&q-type3=all&q-field3=subject%3A&q-type0=all&q-field2=creator%3A&q-type1=all&l-availability=y%2Ff&q=+date%3A[2000+TO+2014]&q-year2-date=2014&n=1', function (error, response, html) {
      if (!error && response.statusCode == 200) {
        var $ = cheerio.load(html);
        $('troveurl').each(function(i, element){
          var id = $(this);
          console.log(id.text());
        });
      }
    });
Run Code Online (Sandbox Code Playgroud)

任何协助赞赏.

node.js cheerio

3
推荐指数
1
解决办法
5938
查看次数

如何使用cheerio(jquery like selectors,但没有dom)得到javascript变量的内容

有一个包含许多javascript标签的大型html文件.我正在尝试挖出该变量的内容.变量名保持不变,但每个请求的内容都会更改.

examplefile.html

<script type="text/javascript">//.... more js</script>
<script type="text/javascript">//.... more js</script>
<script type="text/javascript">var foo = {"b":"bar","c":"cat"}</script>
<script type="text/javascript">//.... more js</script>
<script type="text/javascript">//.... more js</script>
<script type="text/javascript">//.... more js</script>
Run Code Online (Sandbox Code Playgroud)

想要的控制台结果

> var result = $('script').<some_selection_thingy>
result = {"b":"bar","c":"cat"}
Run Code Online (Sandbox Code Playgroud)

让我解释一下......我的意思是我的问题是 - a)如何选择具有内容'var foo'的数组对象b)如何获取var foo变量的内容以便我可以将该信息导入到本地json变量中以进行进一步处理.

当你在控制台中运行$('script')时,jquery返回一个数组.

> $('script')
[<script type="text/javascript">//.... more js</script>,<script type="text/javascript">//.... more js</script>,<script type="text/javascript">var foo = {"b":"bar","c":"cat"}</script>,<script type="text/javascript">...</script>]
Run Code Online (Sandbox Code Playgroud)

因为这是cheerio实际上并不是jquery,所以dom没有加载所以我不能只做$(foo). 有一个替代方案,我可以使用jsdom而不是cheerio,但我已经读过其他stackoverflow响应(在研究这个问题时),它的性能较差,所以我更愿意学习正确的jquery选择器,我需要挖出这个变量.

server.js

// some cheerio node code
url = 'someurl';
request(url, function(error, response, html){
    var $ = cheerio.load(html);
    result = $('script').map(&:text).select{ |s| s['var …
Run Code Online (Sandbox Code Playgroud)

javascript jquery jquery-selectors cheerio

3
推荐指数
2
解决办法
6134
查看次数

如何使用Node.js访问DOM?

我有一个editor.html包含generatePNG功能:

  <!DOCTYPE html> 
<html> 
<head> 
    <meta charset="UTF-8"> 
    <title>Diagram</title> 

    <script type="text/javascript" src="lib/jquery-1.8.1.js"></script> 
//    <!-- I use many resources -->
<script></script> 

    <script> 

        function generatePNG (oViewer) { 
            var oImageOptions = { 
                includeDecoratorLayers: false, 
                replaceImageURL: true 
            }; 

            var d = new Date(); 
            var h = d.getHours(); 
            var m = d.getMinutes(); 
            var s = d.getSeconds(); 

            var sFileName = "diagram" + h.toString() + m.toString() + s.toString() + ".png"; 

            var sResultBlob = oViewer.generateImageBlob(function(sBlob) { 
                b = 64; 
                var reader = new window.FileReader(); 
                reader.readAsDataURL(sBlob); …
Run Code Online (Sandbox Code Playgroud)

javascript jquery node.js jsdom cheerio

3
推荐指数
1
解决办法
8576
查看次数

使用cheerio获取div的所有子节点?

<div class="hello">
  Text1
  <li>Text2</li>
  <div class="bye">Text3</div>
  Text4 Block
  <div class="bye">Text5</div>
  Last Text5
</div>
Run Code Online (Sandbox Code Playgroud)

因此,我拥有使用cheerio抓取的上述内容$('div.hello')。我想遍历它。如何遍历包括文本节点在内的所有内容?我尝试使用,$('div.hello').contents()但这不是抓取文本节点(“ Text1,Text4 Block”和“ Last Text5”)。我的最终目标是,当我到达具有“再见”。因此,我想要一个包含以下html字符串的数组,

final_array = ['Text1 <li>Text2</li>', '<div class="bye">Text3</div> Text4 Block <div class="bye">Text5</div> Last Text5']
Run Code Online (Sandbox Code Playgroud)

javascript jquery node.js cheerio

3
推荐指数
1
解决办法
3625
查看次数

将cheerio模块导入TypeScript应用

我尝试导入cheeriotypescript基于我的应用程序。

import {cheerio}  from 'cheerio';
console.log(cheerio); //undefined
Run Code Online (Sandbox Code Playgroud)

从package.json:

...
"@types/cheerio": "^0.22.5
...
Run Code Online (Sandbox Code Playgroud)

typescript cheerio

3
推荐指数
1
解决办法
2570
查看次数

cheerio / jquery选择器:如何在标签a中获取文本?

我正在尝试访问网站上的链接。该网站看起来像第一个代码示例,并且链接位于不同的div容器中:

<div id="list">
  <div class="class1">
    <div class="item-class1">
      <a href="http://www.example.com/1">example1</a>
    </div>
  </div>
  <div class="class2">
    <div class="item-class2">
      <a href="http://www.example.com/2">example2</a>
    </div>
  </div>
</div>
Run Code Online (Sandbox Code Playgroud)

我确实尝试使用以下代码提取链接:

var list = [];
$('div[id="list"]').find('a').each(function (index, element) {
  list.push($(element).attr('href'));
});
Run Code Online (Sandbox Code Playgroud)

但是输出看起来像这样:

0: "http://www.example.com/1"
1: "http://www.example.com/2"
Run Code Online (Sandbox Code Playgroud)

但我希望它看起来像这样:

0: example1
1: example2
Run Code Online (Sandbox Code Playgroud)

非常感谢你。

cheerio

3
推荐指数
1
解决办法
1918
查看次数