簡體   English   中英

如何解析編碼的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\"

這導致搜索僅提取實際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和“ 如何對除圖像URL之外的html字符串進行消毒? ”中提到的PermitScrubber。

郵件正文被編碼為帶引號的printable 在使用Nokogiri解析主體之前,您需要對其進行解碼。 您可以使用unpack使用Ruby輕松完成此操作:

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

您應在嘗試解碼之前通過查看郵件頭檢查編碼是什么,並非所有郵件都以這種方式編碼,並且還有其他類型的編碼。

我不是刮刮大師,但是您可以通過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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM