我正在尝试开发一个简单的网络刮刀.我想在没有HTML代码的情况下提取文本.事实上,我实现了这个目标,但我已经看到在加载JavaScript的某些页面中我没有获得好的结果.
例如,如果某些JavaScript代码添加了一些文本,我看不到它,因为当我打电话时
response = urllib2.urlopen(request)
Run Code Online (Sandbox Code Playgroud)
我没有添加原始文本(因为JavaScript在客户端中执行).
所以,我正在寻找一些解决这个问题的想法.
我有一个网页,其中有一些JS API不会改变dom,但返回一些数字.我想编写一个NodeJS应用程序来下载这些页面并在下载页面的上下文中执行这些功能.
我正在寻找cheerio页面抓取...但是虽然我看到用它来导航和操作DOM是多么容易,但我没有看到任何运行页面功能的访问权限.有可能吗?
相反,我应该在jsdom看?
谢谢
我是Javascript和PhantomJS的新手,但我看起来很简单的目标已经证明比预期更难实现.我想编写一个加载网站的脚本,然后输出该页面上使用的Javascript变量的值.如果我在浏览器中打开该页面并打开Javascript控制台,我可以输入变量名称,它会告诉我与所述变量相关的值.我只是尝试使用PhantomJS重现此功能,以便我可以自动执行此任务.
有人能指出我正确的文件吗?假设PhantomJS是正确的方法,我无法找到如何做这样的事情.也许有一个更简单的选择?
谢谢.
我正在尝试从实时比分网站获取数据。我使用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) 有些网站的页面加载时会动态生成DOM和内容。(基于Angularjs的网站为此而臭名昭著)
您使用什么方法?我同时尝试了phantomjs和jsdom,但似乎无法在抓取之前让页面执行其javascript。
这是一个简单的jsdom示例(不是基于angularjs的,但仍是动态生成的)
var env = require('jsdom').env;
exports.scrape = function(link, callback) {
var config = {
url: link,
headers: {
'User-Agent': 'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/27.0.1453.110 Safari/537.36'
},
done: jsdomDone
};
env(config);
}
function jsdomDone(err, window) {
var info = null;
if(err) {
console.error(err);
} else {
var $ = require('jquery')(window);
console.log($('.profilePic').attr('src'));
}
}
exports.scrape('https://www.facebook.com/elcompanies');
Run Code Online (Sandbox Code Playgroud)
我尝试phantomjs取得了一定的成功。
var page = new WebPage()
var fs = require('fs');
page.onLoadFinished = function() {
console.log("page load finished");
window.setTimeout(function() {
page.render('export.png'); …Run Code Online (Sandbox Code Playgroud) 当我解析静态 html 页面时,我的 node.js 应用程序运行良好。但是,当 URL 是 JavaScript 生成的页面时,该应用程序将无法运行。如何抓取 JavaScript 生成的网页?
我的应用程序.js
var express = require('express'),
fs = require('fs'),
request = require('request'),
cheerio = require('cheerio'),
app = express();
app.get('/scrape', function( req, res ) {
url = 'http://www.apache.org/';
request( url, function( error, response, html ) {
if( !error ) {
var $ = cheerio.load(html);
var title, release, rating;
var json = { title : "" };
$('body').filter(function() {
var data = $(this);
title = data.find('.panel-title').text();
json.title = title;
})
}
fs.writeFile('output.json', …Run Code Online (Sandbox Code Playgroud) web-scraping ×6
javascript ×5
node.js ×4
cheerio ×3
phantomjs ×2
express ×1
html ×1
jquery ×1
jsdom ×1
python ×1
python-2.x ×1
urlopen ×1
variables ×1