标签: cheerio

从实时比分网站抓取网页

我正在尝试从实时比分网站获取数据。我使用node.js 与express.js、request.js 和cheerio.js 来从网页获取HTML。它适用于 HTML 的某些部分,但不适用于实时部分。

我正在尝试从网站http://www.flashresultats.com抓取数据。当我使用 Chrome 开发人员工具时,我可以看到 HTML 内容,但当我使用 JavaScript 代码时,结果为空。

这是我试图提取的内容的 Chrome 捕获:

HTML 抓取

这是我正在使用的代码:

var express = require('express');
var fs = require('fs');
var request = require('request');
var cheerio = require('cheerio');
var app = express();

url = 'http://www.flashresultats.fr'

request(url, function(error, response, html){
    if(!error){
        var $ = cheerio.load(html);
        var myvar = $('#g_1_UJzOgxfc').html();
        console.log(myvar);
    }
    else {
        console.log('Error');
    }
})
Run Code Online (Sandbox Code Playgroud)

html javascript node.js web-scraping cheerio

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

jQuery 获取除子元素 X 之外的子元素的 HTML

如何使用 jQuery/Javascript<p>在第一个中选择两个元素的 HTML <div class="description?正则表达式也很好。这个 jQuery 选择实际上是在 Node.js 中在一个cheerio对象上完成的。

使用

$( $('.description')[0] ).children().not('h2').html()
Run Code Online (Sandbox Code Playgroud)

似乎只抓取文本

Foo Bar
Run Code Online (Sandbox Code Playgroud)

代替

<p>Foo</p> 
<p>Bar</p>
Run Code Online (Sandbox Code Playgroud)

HTML:

<div class='description'>
  <h2>Hello world</h2>
  <p>Foo</p>
  <p>Bar</p>
</div>

<div class='description'>
  <h2>Goodbye world</h2>
  <p>Didi</p>
  <p>Deedee</p>
</div>
Run Code Online (Sandbox Code Playgroud)

html javascript jquery node.js cheerio

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

酶,如何通过属性找到包装器的孩子?

我在 Redux 应用程序中有以下 React 组件。

<Modal>
<Modal.Header closeButton onClick={props.onHide}>
    <Modal.Title>A Sample Modal</Modal.Title>
</Modal.Header>
<Modal.Body>
</Modal.Body>
Run Code Online (Sandbox Code Playgroud)

现在,在我的测试代码中,我有以下内容

const wrapper = mount(<modal/>);
const closeButton = wrapper.find("['closeButton']");
expect(closeButton.length).to.equal(1); // error - expected 0 to be 1
Run Code Online (Sandbox Code Playgroud)

但是选择器没有找到关闭按钮。帮助?

更新:我正在使用 React Modal 库,HTML 的内容似乎发生了变化。

mocha.js cheerio reactjs redux enzyme

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

Cheerio 在脚本标签中查找文本

我想提取脚本标签中的js脚本。

这是脚本标签:

<script>
  $(document).ready(function(){

    $("#div1").click(function(){
      $("#divcontent").load("ajax.content.php?p=0&cat=1");
    });

    $("#div2").click(function(){
      $("#divcontent").load("ajax.content.php?p=1&cat=1");
    });

  });
</script>
Run Code Online (Sandbox Code Playgroud)

我有一个像这样的 ids 数组['div1', 'div2'],我需要提取其中的 url 链接:所以如果我调用一个函数:

getUrlOf('div1');
Run Code Online (Sandbox Code Playgroud)

它会返回ajax.content.php?p=0&cat=1

javascript node.js cheerio

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

Cheerio 选择具有多个类并用空格分隔的元素

我有这个 html,只想选择类为“图像容器景观”的 div。

<div class="image-container landscape">
        ...
</div>
...
<div class="image-container portrait">
        ...
</div>
Run Code Online (Sandbox Code Playgroud)

使用$(element).find('.image-container')选择第一个 div 中的一个。但我只想要带有“风景”的那一张。我尝试使用$(element).find('.image-container landscape')但它不起作用,也许是因为它假设landscape是一个标签。我该怎么做呢?

node.js web-scraping cheerio

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

Node.js - 使用Cheerio的回调函数

我在Node中构建一个scraper,它使用requestcheerio来加载页面并解析它们.

重要的是我只在请求和Cheerio完成加载页面后才进行回调.我正在尝试使用async扩展,但我不完全确定在哪里放回调.

request(url, function (err, resp, body) {
    var $;
    if (err) {
        console.log("Error!: " + err + " using " + url);
    } else {
        async.series([
            function (callback) {
                $ = cheerio.load(body);
                callback();
            },
            function (callback) {
               // do stuff with the `$` content here
            }
        ]);
    }
});
Run Code Online (Sandbox Code Playgroud)

我一直在阅读,cheerio documentation并且无法找到任何内容加载时的回调示例.

最好的方法是什么?当我在脚本上抛出50个URL时,它会在cheerio正确加载内容之前过早地开始移动,而我正试图通过异步加载来控制任何错误.

我对异步编程和回调都很陌生,所以如果我在这里缺少一些简单的东西请告诉我.

asynchronous node.js cheerio

2
推荐指数
1
解决办法
3533
查看次数

使用cheerio自动提交查询(如JQuery)

我必须执行以下操作:给定从服务器加载的页面,我必须在加载后自动在该页面中提交表单,并使用相同的字符串(test worked)填充其所有输入字段.这显然是我的问题的简化,但它足够接近!

目前我正在获取表单,并使用https://github.com/cheeriojs/cheerio来探索它:

var URL = http://www.example.com/form/index.html"
// ...load the page ...
$ = cheerio.load( fetchedPageText );
Run Code Online (Sandbox Code Playgroud)

目前,我有以下代码:

var $ = cheerio.load( fetchedPageText );

var forms = $('form');
for( var i1 = 0, l1 = forms.length; i1 < l1; i1 ++ ){
  var form = forms[ i1 ];

  inputFields = $( 'input', form );


  console.log("******FORM ACTION: ", form.attribs.action );
  console.log("******FORM: ", form );

  for( var i2 = 0, l2 = inputFields.length; i2 < l2; i2 ++ …
Run Code Online (Sandbox Code Playgroud)

html javascript jquery node.js cheerio

2
推荐指数
1
解决办法
4053
查看次数

用cheerio报废的问题

我一直试图抓住10个网站,我们正在建立一个网站,链接到原始网站,在node.js上使用cheerio,我们得到的问题是有些网站已经改变,现在使用ajax调用来带来他们的数据,我的问题是我们如何获取该信息,例如首先触发按钮点击然后获取DOM.

其次:相同的dom结构不是获取所有数据,它是检索一个页面的信息,而不是在具有相同DOM结构的另一个页面上获取元素.任何帮助,将不胜感激.

感谢致敬. 编辑1:相关代码

$('#ProductContent').filter(function(){
                            var price = undefined;
                            var ukulele = false;
                            var model = $(this).find('.ProductSubtitle').text().replace(/\n\s*/g,"");
                            if(model.indexOf(/m/i) != 0){
                                var description = $(this).find('.RomanceCopy').text().replace(/\n\s*|\r/g,"");
                                .
                                .code removed for brevity and the variables present here are populated
                                .
                                //this children is populated only for one page.
                                children =  $(this).find('.SpecsColumn .SpecsTable table tbody').children('tr');
                                console.log('children: '+children.length)
                                console.log(guitar_url);
                                children.each(function(){
                                    var key = $(this).children('td').first().text();
                                    var value = $(this).children('td').last().text();
                                    specs[key] = value;
                                    console.log(specs); 
                                });
Run Code Online (Sandbox Code Playgroud)

编辑2:Cherios初始化

request(guitar_url,function(error,response,html){
                    if(!error){
                        var $ = cheerio.load(html);
                        $("#content #right-content").filter(function(){..children and other variables …
Run Code Online (Sandbox Code Playgroud)

screen-scraping node.js cheerio

2
推荐指数
1
解决办法
2217
查看次数

节点请求,cheerio - 如何处理额外的ajax负载

我正在使用node,request和cheerio来从html页面获取数据.这没有任何问题,但是一个页面通过ajax加载额外的数据来填充不同的容器.初始请求完成后,这些是空的和未定义的,我该如何处理这个最好的方法?

request(url, function (error, response, html) {
if (!error && response.statusCode == 200) {

    var $ = cheerio.load(html);

    forum_url = $('.this.url.is.loaded.separatly.with.ajax'[1].attr('href');
}
});
Run Code Online (Sandbox Code Playgroud)

ajax request node.js web-scraping cheerio

2
推荐指数
1
解决办法
3730
查看次数

使用jQuery/cheerio访问脚本标记中的变量

我正在使用node.js + cheerio进行网页抓取.

请求网站后,我得到这样的东西.

<html>
    <head>
        ...
    </head>
    <body>
        <script>
           var x = {name: "Jeff"};
           var y = 4;
        </script>
    </body>
</html>  
Run Code Online (Sandbox Code Playgroud)

如何通过cheerio/jQuery访问变量值?

javascript jquery node.js cheerio

2
推荐指数
1
解决办法
1872
查看次数