如何使用Nokogiri找出图像标签之前有多少个字符



我正在尝试为我正在抓取的网站中给出的评论消息重新创建文本,但在处理文本之间有图像的情况时遇到问题。这些图像是笑脸表情符号。

例如,以下注释将显示为下面的 HTML(假装"alt"是真实图像)

text text text blah blah blah :3some more text that will come directly after
<div>
    "text text text blah blah blah "
    <img src="/smiley.png" width="16" height="16" alt=":3" title>
    "some more text that will come directly after"
</div>

我希望有一种方法可以在<img ...>之前使用字符串的insert()方法插入带有消息本身的替代文本的字符数。

任何人都有任何其他想法或知道如何实施这样的解决方案?


当我在div 元素上调用 inspect 时,我得到以下内容:

[#<Nokogiri::XML::Element:0x3fda6dc527cc name="div" children=[#<Nokogiri::XML::Text:0x3fda6dc52484 "text text text blah blah blah ">, #<Nokogiri::XML::Element:0x3fda6dc523a8 name="img" attributes=[#<Nokogiri::XML::Attr:0x3fda6dc52330 name="src" value="/smiley.png">, #<Nokogiri::XML::Attr:0x3fda6dc52308 name="width" value="16">, #<Nokogiri::XML::Attr:0x3fda6dc522b8 name="height" value="16">, #<Nokogiri::XML::Attr:0x3fda6dc522a4 name="alt" value=":3">]>, #<Nokogiri::XML::Text:0x3fda6d487470 "some more text that will come directly after">]>]

在发布此内容之前,我不知道我可以这样做。我敢打赌子列表/数组可以单独访问?


最终将这个div 元素转换为字符串并使用解析来获得我想要的东西。

如果有人有更优雅的解决方案,请告诉我!我完全赞成更多地了解它。

你问:

如何使用Nokogiri找出图像标签之前有多少个字符?

img = doc.at('img')
img.previous.text.length

我不确定我是否完全理解。 听起来您想采用原始 HTML 并用其替代文本替换所有图像标签? 如果是这样,这将起作用:

> html = '<div>
*     text text text blah blah blah
*     <img src="/smiley.png" width="16" height="16" alt=":3" title>
*     some more text that will come directly after
* </div>'
> doc = Nokogiri::HTML.fragment(html)
> doc.css('img').each {|img| img.replace(img.attr('alt'))}
> puts doc.at('div').text
    text text text blah blah blah
    :3
    some more text that will come directly after

相关内容

  • 没有找到相关文章

最新更新