从nodejs运行scrapy

时间:2019-03-08 07:52:56

标签: python node.js scrapy

我正在尝试从node js项目运行一个抓取脚本。当我使用以下命令通过Python IDE运行它时,效果很好

  
    

python scrap.py

  

从nodejs执行脚本时,脚本成功完成,但不显示任何错误或生成输出文件。

Scrap.py

def main():
    try:       
        process = CrawlerProcess(get_project_settings())
        process.crawl('crawlim')        
        process.start()
        print ("executed")
        sys.stdout.flush()
    except:
        print ("error")
if __name__ == '__main__':
         main()

节点文件

let {PythonShell}=require('python-shell')
 PythonShell.run(path.join(__dirname, '/py/scrap.py'), options, function (err) {
  if (err) throw err;
  console.log('finished');
}); 

2 个答案:

答案 0 :(得分:0)

使用require('child_process').exec

var exec = require('child_process').exec;
var path = require('path');

var file_path = path.join(__dirname, 'scrap.py');
exec('python ' + file_path, function (error, stdout, stderr) 
{ 
    if(error){
        console.log(stderr);
    }else {
        console.log(stdout);
      }
});

答案 1 :(得分:0)

根据要求,可以使用多种方法来编写刮板。它还取决于一个人用来获取数据的库(抓取抓取数据或硒来描述浏览器交互并获取所需的数据)。根据我的个人经验,我们能够调用scraper脚本(我们的scraper脚本使用selenium和BeautifulSoup库)。 下面是我们如何使用子进程执行脚本的方法。

from sympy import *
B1, B0, x, y, i, n = symbols('B1 B0 x y i n')

err = summation((Indexed('y',i) - B1*Indexed('x',i)-B0) ** 2, (i, 0, n))
pprint(err)
differr = diff(err,B1)
print('~~~~~~~')
print(differr)
print('~~~~~~~')
pprint(differr)
print(expand(differr))
s1=summation(2*B0**Indexed('x',i), (i, 0, n))
s2=summation(2*B1*Indexed('x',i)**2, (i, 0, n))
s3=summation(-2*Indexed('x',i)*Indexed('y',i), (i, 0, n))
solve(s1+s2+s3,B0)

如果您使用scrapy spider抓取数据,则此方法无效。