我正在尝试从实时比分网站获取数据。我使用node.js 与express.js、request.js 和cheerio.js 来从网页获取HTML。它适用于 HTML 的某些部分,但不适用于实时部分。
我正在尝试从网站http://www.flashresultats.com抓取数据。当我使用 Chrome 开发人员工具时,我可以看到 HTML 内容,但当我使用 JavaScript 代码时,结果为空。
这是我试图提取的内容的 Chrome 捕获:

这是我正在使用的代码:
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) 如何使用 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) 我在 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 的内容似乎发生了变化。
我想提取脚本标签中的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
我有这个 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中构建一个scraper,它使用request和cheerio来加载页面并解析它们.
重要的是我只在请求和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正确加载内容之前过早地开始移动,而我正试图通过异步加载来控制任何错误.
我对异步编程和回调都很陌生,所以如果我在这里缺少一些简单的东西请告诉我.
我必须执行以下操作:给定从服务器加载的页面,我必须在加载后自动在该页面中提交表单,并使用相同的字符串(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) 我一直试图抓住10个网站,我们正在建立一个网站,链接到原始网站,在node.js上使用cheerio,我们得到的问题是有些网站已经改变,现在使用ajax调用来带来他们的数据,我的问题是我们如何获取该信息,例如首先触发按钮点击然后获取DOM.
其次:相同的dom结构不是获取所有数据,它是检索一个页面的信息,而不是在具有相同DOM结构的另一个页面上获取元素.任何帮助,将不胜感激.
感谢致敬. 编辑1:相关代码
Run Code Online (Sandbox Code Playgroud)$('#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); });
编辑2:Cherios初始化
Run Code Online (Sandbox Code Playgroud)request(guitar_url,function(error,response,html){ if(!error){ var $ = cheerio.load(html); $("#content #right-content").filter(function(){..children and other variables …
我正在使用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) 我正在使用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访问变量值?
cheerio ×10
node.js ×9
javascript ×5
html ×3
jquery ×3
web-scraping ×3
ajax ×1
asynchronous ×1
enzyme ×1
mocha.js ×1
reactjs ×1
redux ×1
request ×1