这是我的1337x.to scraper的nodejs代码。我想要做的是先删除工作正常的搜索结果,然后从这些搜索结果中获取种子的url,然后删除磁石url链接,这些链接似乎起不同的作用,但是当我尝试在内部擦除这些值时getTorrent函数,它只是返回未定义的值,我似乎无法存储这些值。谁能帮我这个?我只需要在返回之前将磁链存储在数组中即可。
这是代码:
const axios = require('axios')
const cheerio = require('cheerio')
const baseurl = 'https://1337x.to'
var magneturl = 'sdkllfklajds'
var arr = []
var nameList = []
var urlList = []
var seedList = []
var leechList = []
var dateList = []
var sizeList = []
const getMagnet = (torurl) => {
axios.get(torurl).then(({data}) => {
var $ = cheerio.load(data)
$ = cheerio.load($('.dropdown-menu').html())
magneturl = $('a').last().attr('href')
})
return magneturl
}
const getTorrent = (searchurl) => {
axios.get(searchurl).then(({ data }) => {
const $ = cheerio.load(data)
$('.coll-1.name').each((index, element) => {
var tag = $(element).children('a').last()
var name = tag.text()
var url = tag.attr('href')
getMagnet(url).then((data) => {
urlList.push(data)
})
if(name.length) {
nameList.push(name)
//urlList.push(url)
}
})
$('.coll-2').each((index, element) => {
var seeds = $(element).text()
if(index > 0)
seedList.push(seeds)
})
$('.coll-3').each((index, element) => {
var leeches = $(element).text()
if(index > 0)
leechList.push(leeches)
})
$('.coll-date').each((index, element) => {
var dateAdded = $(element).text()
if(index > 0)
dateList.push(dateAdded)
})
$('.coll-4.size').each((index, element) => {
var size = $(element).text().replace($(element).children('span').text(), '')
sizeList.push(size)
})
var i = 0
while(i < 20) {
arr.push({name: nameList[i], url: baseurl + urlList[i], seeds: seedList[i], leeches: leechList[i], dateAdded: dateList[i], size: sizeList[i]})
i = i + 1
}
})
return arr
}
module.exports = {getTorrent, getMagnet}
答案 0 :(得分:1)
您正在加倍,然后等待。使用await
时,您可以这样做:
const getMagnet = async (torurl) => {
var data = await axios.get(torurl)
var $ = cheerio.load(data)
$ = cheerio.load($('.dropdown-menu').html())
magneturl = $('a').last().attr('href')
return magneturl
}
基本上直接使用await
而不是then
的返回。在代码的其他地方,您有相同的事情。
我认为,如果您像这样清除代码,则可以在诺言中解开诺言,这可能会解决您的问题。