如何解析编码 HTML

How to parse encoded HTML

我正在制作一封摘要电子邮件以发送给我公司应用程序的用户。为此,我正在浏览每个用户的电子邮件,并试图找到有关每封电子邮件的一些基本信息(来自、主题、时间戳,以及给我带来困难的方面,一张图片)。

我假设 Nokogiri 的 search('img') 函数可以很好地提取图像。不幸的是,大多数电子邮件似乎在这些图像的 URL 中嵌入了很多垃圾,例如换行符 ("\n")、转义字符 ("\") 以及出于某种原因的字符串 "3D"。例如:

<img src=3D\"https://=\r\nd3ui957tjb5bqd.cloudfront.net/images/emails/1/logo.png\"

这导致搜索只提取实际 URLs/src 的片段:

#(Element:0x3fd0c8e83b80 {
  name = "img",
  attributes = [
    #(Attr:0x3fd0c8e82a28 { name = "src", value = "3D%22https://=" }),
    #(Attr:0x3fd0c8e82a14 { name = "d3ui957tjb5bqd.cloudfront.net", value = "" }),
    #(Attr:0x3fd0c8e82a00 { name = "width", value = "3D\"223\"" }),
    #(Attr:0x3fd0c8e829ec { name = "heigh", value = "t=3D\"84\"" }),
    #(Attr:0x3fd0c8e829d8 { name = "alt", value = "3D\"Creative" }),
    #(Attr:0x3fd0c8e829c4 { name = "market", value = "" }),
    #(Attr:0x3fd0c8e829b0 { name = "border", value = "3D\"0\"" })]
  }) 

有谁知道为什么会这样,以及如何删除所有这些垃圾?

我从很多 gsub 和安全检查中得到了不错的结果,但感觉很俗气。

我也试过 Sanitize.clean 没用,还有“”中提到的 PermitScrubber。

我不是爬虫高手,不过你可以通过CSS属性获取

.at_css("img")['src']

例如:

require "open-uri"
require "nokogiri"

doc = open(url_link)
page = Nokogiri::HTML(doc)

page.css("div.col-xs-12.visible-xs.visible-sm div.school-image").each do |pic|
   img = pic.at_css("img")['src'].downcase if pic.at_css("img")
end

邮件 body 编码为 quoted printable. You will need to decode the body before you parse it with Nokogiri. You can do this fairly easily with Ruby using unpack:

decoded = encoded.unpack('M').first

在尝试解码之前,您应该通过查看邮件来检查编码是什么 headers,并不是所有的邮件都是这样编码的,还有其他类型的编码。