2013-03-26 20 views
2

我期待建立一個功能到一個Angular.js網絡應用程序,允許用戶將一個URL粘貼到電子商務網站如亞馬遜或Zappos和檢索主來自該頁面的產品圖片。我的計劃是將URL發佈到我的express API並處理服務器上的圖像檢索。鑑於一個網址檢索該網頁上的最大圖像與節點

我最初的計劃是下載原始html,用htmlparser解析出來,選擇所有的html圖像元素soupselect並檢索它們的src屬性。理想情況下,我希望實施可在任何網站上運行的解決方案,而不僅僅是針對特定零售商網站的硬編碼值(使用特定的已知css類名稱)。我做的一個假設是,頁面上最大的圖像可能是主要的產品圖像,這個邏輯我決定嘗試按照文件大小對圖像進行排序。我的想法是用每個圖像的src url做一個http頭部請求,通過content-length頭部屬性確定它們的大小。到目前爲止,這種方法運行良好,但我真的希望避免發出如此多的http請求,即使它們只是頭部請求。

我覺得有一個更好的方法來做到這一點,使用像PhantomJS這樣的東西來加載整個頁面並解析它會更容易嗎?我試圖儘可能快地完成這項工作,從而避免下載所有圖像。有沒有人有什麼建議?

回答

1

我認爲使用的最佳圖像不是文件大小最大的圖像,而是在頁面上顯示的圖像最大。 PhantomJS可能可以幫助您確定。加載頁面,但指示PhantomJS不加載圖像。然後選擇計算尺寸最大的圖像元素。這隻有在頁面使用img上的CSS或寬度和高度屬性來爲其指定維度時纔有效。

或者,您可以將圖像URL發送回客戶端,讓客戶端獲取圖像並確定哪些圖像最大。這限制了服務器的請求數量,並且如果最大值不是最好的,它允許用戶快速選擇不同的圖像。

+0

謝謝,這些是一些很好的替代想法。我想我從來沒有真正想過讓客戶提出要求。可能我也可以打開一個iframe並允許用戶選擇圖像。我試圖弄清楚當Facebook分享鏈接時,Facebook做了什麼類似的事情,而且看起來像是尋找元數據,如meta property =「og:image」 – TyndieRock 2013-03-26 02:10:25

+0

og:image是允許網站向其他人聲明的opengraph協議像Facebook這樣的網站在頁面上的對象意味着什麼。這與微格式類似,它是一組標準化的html結構,允許軟件理解頁面內容。 Google「微格式」和「opengraph」。很明顯,因爲我們不是Facebook,所以我們不能影響其他開發者爲我們提供自定義格式。但我們可以利用Facebook的影響力來使用opengraph。 – slebetman 2013-03-26 02:43:53