我正在尝试从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');
});
答案 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抓取数据,则此方法无效。