我正在制作摘要电子邮件,以便发送给我公司应用的用户。为此,我将浏览每个用户的电子邮件,并尝试查找有关每封电子邮件的一些基本信息(来自,主题,时间戳,以及导致我困难的方面,图像)。
我认为Nokogiri的search('img')
功能可以用来提取图像。不幸的是,看起来大多数电子邮件都会在这些图像的URL中嵌入大量垃圾,例如换行符(“\ n”),转义字符(“\”)和字符串“3D”由于某种原因。例如:
<img src=3D\"https://=\r\nd3ui957tjb5bqd.cloudfront.net/images/emails/1/logo.png\"
这导致搜索仅提取实际URL / 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
无法使用的内容以及“How to sanitize html string except image url?”中提到的PermitScrubber。
答案 0 :(得分:3)
邮件正文编码为quoted printable。在使用Nokogiri解析之前,您需要对身体进行解码。使用unpack
:
decoded = encoded.unpack('M').first
您应该在尝试解码之前查看邮件标题来检查编码是什么,并非所有邮件都以这种方式编码,还有其他类型的编码。
答案 1 :(得分:1)
我不是抓取大师,但你可以通过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