我正在尝试使用cheeriosJS在网络上抓取页面以获取一些信息。问题是,我需要一个each循环来覆盖一个变量并将该变量推入一个空数组。尽管我正确地进行了网络抓取(每个循环我都得到了一个不同的对象),但是当循环完成后我打印数组时,我得到的数组与同一个对象重复了多次。 我在这里想念什么?
const rp = require('request-promise');
const $ = require('cheerio');
let marketSpain = {
country: 'Spain',
name: 'IBEX 35',
companies: []
}
let companySpain = {
name: null,
last: null,
high: null,
low: null,
change: null,
changePerCent: null,
volume: null,
time: null,
purchase: false,
sale: false
}
rp({
uri: 'url',
headers: {
'User-Agent': 'Request-Promise'
}
}).then(html => {
$("table[class='genTbl closedTbl crossRatesTbl elpTbl elp30'] > tbody > tr", html).each((i, elem) => {
companySpain.name = $("td[class='bold left noWrap elp plusIconTd'] > a", html).eq(i).html();
companySpain.last = $("td", elem).eq(2).text();
companySpain.high = $("td", elem).eq(3).text();
companySpain.low = $("td", elem).eq(4).text();
companySpain.change = $("td", elem).eq(5).text();
companySpain.changePerCent = $("td", elem).eq(6).text();
companySpain.volume = $("td", elem).eq(7).text();
companySpain.time = $("td", elem).eq(8).text();
marketSpain.companies.push(companySpain);
});
console.log(marketSpain)
markets.push(marketSpain);
}).catch(err => {
console.log(err);
})
答案 0 :(得分:1)
您正在修改同一对象,并将其附加到列表的末尾。您想做的是这样:
In [10]: df.loc[df.index.month>2, 'year_attrib'] = df[df.index.month>2].index.year + 11
In [11]: df.loc[df.index.month<=2, 'year_attrib'] = df[df.index.month>2].index.year + 15
In [12]: df
Out[12]:
data year_attrib
2004-03-01 93 2015
2004-03-02 48 2015
2004-03-03 88 2015
2004-03-04 44 2015
2004-03-05 11 2015
2004-03-06 4 2015
2004-03-07 70 2015