我正努力在betfair上刮擦今天的比赛,并希望获得:
主队
客队
x奇数
画奇数
y奇
问题是我不断获得多个空格,我已经尝试了很多并且无法修复它,问题不在于修整,而是由于执行流程导致空行
有人可以告诉我我做错了什么吗?
我的代码:
const request = require('request');
const cheerio = require('cheerio');
const fs = require('fs');
var url = 'https://www.betfair.com/sport/football';
var customHeaderRequest = request.defaults({
headers: {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/57.0.2987.133 Safari/537.36'}
})
customHeaderRequest.get(url, function(err, resp, body){
$ = cheerio.load(body);
links = $('.section-list .section:nth-child(2) .event-list li');
$(links).each(function(i, link){
var home = $(link).find('.event-information div:nth-child(3) div a div span.team-name:nth-child(1)');
var h = home.text();
if(h != null || h!=''){
fs.appendFile('message.txt', h+'\n', function (err) {});
}
});
});
答案 0 :(得分:1)
您不应该在这样的循环中调用fs.appendFile()
,并且可能需要比使用的更好的空行测试。 fs.appendFile()
是一个异步操作,实际上,您是在不等待先前操作完成的情况下,依次调用一大堆fs.appendFile()
操作。
您可以使用流,也可以等到上一个fs.appendFile()
完成后再调用下一个。
而且,如果要确保没有空白效果,则需要一个更好的过滤器来过滤其中只有空格的结果(我在下面的代码中添加了.trim()
)。
这是一种方法:
const request = require('request');
const cheerio = require('cheerio');
const fs = require('fs');
const util = require('util');
const appendFile = util.promisify(fs.appendFile);
var url = 'https://www.betfair.com/sport/football';
var customHeaderRequest = request.defaults({
headers: {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/57.0.2987.133 Safari/537.36'}
})
customHeaderRequest.get(url, async function(err, resp, body){
try {
let $ = cheerio.load(body);
let links = $('.section-list .section:nth-child(2) .event-list li').toArray();
for (let link of links) {
const home = $(link).find('.event-information div:nth-child(3) div a div span.team-name:nth-child(1)').text().trim();
if (home) {
await appendFile('message.txt', home +'\n');
}
}
} catch(e) {
// error writing to the file, handle that error here
}
});
其他注意事项:您还应该始终声明所使用的所有局部变量,因此永远不允许它们是隐式全局变量。