脚本可以在浏览器中完美地获取数据,但是使用cmd运行时却不能

时间:2019-03-26 07:04:23

标签: javascript mysql node.js web-scraping

我正在尝试通过使用DOMParser来定位构成网页的元素id并将其存储在MySQL数据库中来获取数据。

当我在浏览器中使用通过单击按钮执行的功能执行此操作时,我可以完美地获取数据,然后将其添加到网页上的表格中。

但是,当我创建一个类似的脚本时,该脚本具有将此数据添加到MySQL数据库的附加功能,它不会获取所需的数据,但会返回未定义的数据。我认为这与同步和异步请求有关,但是在浏览器中运行良好!

HTML页面脚本在浏览器(Google Chrome)中运行

var data1, data2, data3, data4;
var sno = 1;

function go(){
var iurl = 'http://example.com';
$.get(iurl, function(response){
    let parser = new DOMParser();
    let parsedHtml = parser.parseFromString(response, 'text/html');
    data1 = parsedHtml.getElementById('data1id').value;
    data2 = parsedHtml.getElementById('data2id').value;
    data3 = parsedHtml.getElementById('data3id').value;
    data4 = parsedHtml.getElementById('data4id').value;
    $(".table-main").append("\<tr\>\<td\>" + sno + "\<\/td\>\<td\>" + data1 + "\<\/td\>\<td\>" + data2 + "\<\/td\>\<td\>" + data3 + "\<\/td\>\<td\>" + data4 + "\<\/td\>\<\/tr\>");
    sno++;
    second();
})}

function second(){
    console.log("INSERT into AllTheData values ('" + sno + "', '" + data1 + "', '"  + data2 + "', '" + data3 + "', '" + data4 +"')");
// returns the required data
}

要使用cmd(和Node.js)运行的脚本

var jsdom = require("jsdom");
var { JSDOM } = jsdom;
var { window } = new JSDOM(`<!DOCTYPE html>`);
var $ = require('jquery')(window);
var DomParser = require('dom-parser');
var parser = new DomParser();

var data1, data2, data3, data4;
var sno = 1;
function go(){
var iurl = 'http://example.com';
$.get(iurl, function(response){
    let parsedHtml = parser.parseFromString(response, 'text/html');
    data1 = parsedHtml.getElementById('data1id').value;
    data2 = parsedHtml.getElementById('data2id').value;
    data3 = parsedHtml.getElementById('data3id').value;
    data4 = parsedHtml.getElementById('data4id').value;
    sno++;
second()
})}

function second(){ // Doesn't return the required data
console.log("INSERT into AllTheData values ('" + sno + "', '" + data1 + "', '"  + data2 + "', '" + data3 + "', '" + data4 +"')");
var mysql = require('mysql');
var con = mysql.createConnection({host : "localhost", user: "root", password: <password>, database : <database name> , insecureAuth: true});

 con.connect(function(err){
    if(err) throw err;
    console.log("Connected!");
    var sql = "INSERT into <table name> values ('" + sno + "', '" + data1 + "', '"  + data2 + "', '" + data3 + "', '" + data4 +"')";
    con.query(sql, function(err, result){
        if(err) throw err;
        console.log("1 record inserted!");
    });
});}

我通过使用cd导航到cmd来运行该脚本,然后

node <filename>

返回(其中1sno中的值)

INSERT into <table name> values (1, 'undefined', 'undefined', 'undefined', 'undefined')
Connected!
1 record inserted!

和值undefined插入到MySQL表中。

预期:

INSERT into <table name> values (1, <value of data1>, <value of data2>, <value of data3>, <value of data4>)
Connected!
1 record inserted!

0 个答案:

没有答案