【问题标题】:Saving scraped data to mysql database through phantomjs and casperjs通过phantomjs和casperjs将抓取的数据保存到mysql数据库
【发布时间】:2018-04-02 15:04:54
【问题描述】:

您好,我正在开发一个网络抓取工具,首先我尝试使用 php CURL 进行抓取,但后来我遇到了一个问题,即我无法抓取通过 AJAX 加载的网站,然后我转移了到 'phantom JS' 和 'casper JS`。

现在我已经成功安装了 webkit 并且可以从任何网站上抓取数据,但是我无法将数据保存在数据库中以供长期使用。简单,以备后用。我想做的是,无论我抓取什么数据,我都想将其保存到 mySql 数据库中。

有什么方法可以实现这样的功能吗?我曾尝试发送Ajax 请求将数据发送到数据库,但失败了。

例如,我想出了另一种解决方案,即当我从指定网站抓取数据时,我将数据推送到名为 data[] 的数组中,然后将该数据写入 .json 文件。每组数据以对象数组的形式保存,从JSON.stringify(data)获取。

现在,我不知道如何获取该文件数据并将其保存在数据库中?是否有可能,每当抓取完成时,就在我从该.json 文件中获取数据并将其保存到数据库之后。

现在只以这段代码为例

var casper = require('casper').create();
var file = require('fs');
var data = [];

casper.start('http://casperjs.org/', function() {
  data.push(this.getTitle());
  file.write("file.json", JSON.stringify(data), "a");
});


casper.run();

【问题讨论】:

    标签: web-scraping phantomjs casperjs


    【解决方案1】:

    概念证明,使用

    #!/bin/bash
    
    casperjs script.js
    [[ -s file.json ]] || exit 1
    jq '"UPDATE ROW SET XXX = "+ .[] + " WHERE FOO=BAR;"' file.json | mysql -D DB_name
    

    文件.json:

    [
        "foo",
        "bar",
        "base" 
    ]
    

    输出:

    jq -r '"UPDATE ROW SET XXX = "+ .[] + " WHERE FOO=BAR;"' file.json
    

    UPDATE ROW SET XXX = foo WHERE FOO=BAR;
    UPDATE ROW SET XXX = bar WHERE FOO=BAR;
    UPDATE ROW SET XXX = base WHERE FOO=BAR;
    


    查看https://stedolan.github.io/jq/

    【讨论】:

    • jq@Gilles 是什么?
    • this可以解决我的问题吗?
    【解决方案2】:

    我发现的简单解决方案是在评估函数内部向服务器发出 ajax 请求:

    casper.then(function() {
      details = this.evaluate(function() {
        var elDet = document.getElementsByClassName("job-description-column")[0];
        var detLen = elDet.children[2].children[0].children.length;
        var details = elDet.children[2].children[0].children;
        var linkedData = [];
        for (var i = 0; i < detLen; i++) {
          if (details[i].nodeName == "H3" && details[i].id != "if-this-sounds-like-you,-apply") {
            linkedData.push({
              head: details[i].textContent,
              description: details[i + 1].textContent,
              title: elDet.children[0].children[0].children[0].textContent,
              loc: elDet.children[0].children[0].children[1].textContent,
              date: elDet.children[0].children[0].children[2].textContent
            })
            i++;
          } else {
            linkedData.push({
              head: "No Head",
              description: details[i].textContent,
              title: elDet.children[0].children[0].children[0].textContent,
              loc: elDet.children[0].children[0].children[1].textContent,
              date: elDet.children[0].children[0].children[2].textContent
            })
          }
        }
        var s = JSON.stringify(linkedData);
        console.log(linkedData);
        $.ajax({
          method: "POST",
          url: "http://localhost/fiverr/Crawl%20The%20Jobs/modal_scripts.php",
          data: "add_jobdets=true&job_details=" + s,
          async: false
        })
        return linkedData;
      })
    })

    【讨论】:

      猜你喜欢
      • 2022-11-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-09-17
      • 2021-03-08
      • 2014-02-17
      • 2018-02-02
      • 1970-01-01
      相关资源
      最近更新 更多