将cheerio对象转换为字符串

5

我正在从页面中提取元标签:

$ = cheerio.load(html)
metaTags = $('meta')

我已经做好了,但我需要metaTags数组包含字符串,而不是像这样的cherrio对象:

["<'meta something=1231'><'/meta'>", "<'meta sometag=44242'><'/meta'>"]

p.s. 我不需要 ' 字符,这只是stackoverflow.com误解了

我已经制作了这样的方法:

toHtml = (el) ->
  return el.html()

但是它不起作用:使用map获取空结果

metaTags.map(i, el) -> console.log(i.toHtml(el))


html() 返回一个 JQuery 对象第一个元素的内容。 - Emrys Myrooin
事实上,Jquery对象非常接近于数组,但它们实际上并不是数组。Jquery对象包含DOM元素对象。 - Emrys Myrooin
在Python中,使用map(str, page.find_all('div'))非常容易。 - Jesus_Maria
是的,但你在这里没有使用Python :-) - Emrys Myrooin
4个回答

3
let arrayOfHTMLstrings = $('meta').toArray().map( (el, index) => el.toString() );

根据Cheerio官方文档,toArray()

3
var cheerio = require('cheerio')
var html = 'SOME_HTML_STRING'
var $ = cheerio.load(html)
var htmlString = $.html()

2

我在这里提供的所有答案都遇到了问题。

myNode.html() 在我尝试的许多情况下没有找到html()方法。 myNode.toString()返回[object Object]

最终每次都有效的方法是在 cheerio 本身上使用 html() 方法。

const cheerio = require("cheerio")
cheerio.html( myNode )

这将把任何节点转换为HTML字符串,无论是在循环中还是其他情况下。

根据其他答案,这应该是myNode.html()。 - zakum1

2

这里有一个解决方案:

findMetaTags = (html) ->
  $ = cheerio.load(html)

  metatagsContainer = $('<p>')
  $('meta').each ->
    metatagsContainer.append $(this).clone()

  unless _.isEmpty(metatagsContainer)
    return metatagsContainer.html()

  return

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接