2015-06-06 7 views
6

Ich versuche, Bilder von Websites zu kratzen. Ich benutze Nokogiri und XPath bisher mit begrenztem Erfolg. Für eine typische Website, deren HTML hat img src und kann ich verwenden:Ruby on Rails XPath Json Scrapping Bilder

tmp2 = Nokogiri::HTML(open(site_url)) 
tmp2.xpath("//img/@src").each do |src| 
    ...do whatever 
end 

jedoch einige Websites wie Amazon und eBay nur bestimmte Bilder mit Javascript auslösen. Wenn ich mir den Code anschaue, kann ich die Daten in Arrays sehen. Zum Beispiel von Amazon (Quelle: http://www.amazon.com/Threads-Thought-Womens-Dreams-X-Small/dp/B00T46V758/ref=sr_1_5?s=apparel&ie=UTF8&qid=1433555447&sr=1-5):

<script type="text/javascript"> 
P.when('jQuery', 'cf').execute(function($, cf){ 
    P.load.js('http://z-ecx.images-amazon.com/images/G/01/browser-scripts/imageBlock-udp-airy/imageBlock-udp-airy-4060168860._V1_.js'); 
}); 

P.when('A', 'jQuery', 'ImageBlockATF', 'cf').register('ImageBlockBTF', function(A, $, imageBlockATF, cf){ 
    var data = {"indexToColor":[],"burjImageBlock":0,"isSwatchHoverConsistent":1,"heroFocalPoint":null,"visualDimensions":["color_name"],"productGroupID":"apparel_display_on_website","newVideoMissing":0,"useIV":0,"useClickZoom":null,"useChildVideos":0,"numColors":7,"logMetrics":0,"defaultColor":"initial","airyConfig":{"enableContinuousPlay":null,"installFlashButtonText":"Install Flash Player","contentTitle":null,"autoplayCutOffTimeSeconds":null,"ageGate":{"monthNames":["January","February","March","April","May","June","July","August","September","October","November","December"],"deniedPrompt":"We're sorry. You are not old enough to watch this video.","submitText":"Submit","prompt":"This video is not intended for all audiences. What date were you born?"},"videoAds":null,"videoUnsupportedPrompt":"Sorry, this video is unsupported on this browser.","desiredMode":null,"swfUrl":"http://g-ecx.images-amazon.com/images/G/01/vap/video/airy2/prod/2.0.1102.0/flash/AiryBasicRenderer._V304902271_.swf","isAutoplayEnabled":null,"installFlashPrompt":"Adobe Flash Player is required to watch this video.","isLiveStream":null,"regionCode":"NA","contentId":null,"playbackErrorPrompt":"Sorry, an error has occurred while attempting video playback. Please try again later.","contentMinAge":null,"isForesterTrackingDisabled":null,"streamingUrls":null,"parentId":null,"foresterMetadataParams":{"client":"Dpx","requestId":"1MX7VHFRVAS6TWY64BXC","marketplaceId":"ATVPDKIKX0DER","session":"182-9511970-7757812","method":"Apparel.ImageBlock"},"jsUrl":"http://z-ecx.images-amazon.com/images/G/01/vap/video/airy2/prod/2.0.1102.0/js/airy.chromeless._V304902265_.js"},"mainImageMaxSizes":null,"staticStrings":{"playVideo":"Click to play video","rollOverToZoom":"Roll over image to zoom in","images":"Images","video":"video","clickToZoom":"Click on image to zoom in","touchToZoom":"Touch the image to zoom in","videos":"Videos","close":"Close","pleaseSelect":"Please select","clickToExpand":"Click to open expanded view","allMedia":"All Media"},"notThumbnailClickImmersiveView":1,"gIsNewTwister":1,"title":"Threads 4 Thought Women's Tabitha Basic Tank Top","ivRepresentativeAsin":{"6":"B00T46V76W","4":"B00WM3O7ES","1":"B00T46YZES","3":"B00WM3NLPE","2":"B00T46VD16","5":"B00T46VGXQ"},"mainImageSizes":[[342,445],[385,500],[425,550],[466,606],[522,679]],"isQuickview":0,"ipadVideoSizes":[[340,444],[384,500]],"colorToAsin":{"Coral Dreams":{"asin":"B00T46V76W"},"Heather Grey":{"asin":"B00WM3NLPE"},"Black":{"asin":"B00T46YZES"},"White":{"asin":"B00T46VGXQ"},"Deep Blue Sea":{"asin":"B00T46VD16"},"Sea Glass":{"asin":"B00WM3O7ES"}},"thumbExperimentEnabledValue":1,"showLITBOnClick":0,"videoSizes":[[342,445],[384,500]],"stretchyGoodnessWidth":[1280,1440,1640,1800],"autoplayVideo":0,"hoverZoomIndicator":"","sitbReftag":"","useHoverZoom":1,"staticImages":{"zoomOut":"http://g-ecx.images-amazon.com/images/G/01/detail-page/cursors/zoom-out._V184888738_.bmp","hoverZoomIcon":"http://g-ecx.images-amazon.com/images/G/01/img11/apparel/UX/DP/icon_zoom._V138923886_.png","zoomIn":"http://g-ecx.images-amazon.com/images/G/01/detail-page/cursors/zoom-in._V184888790_.bmp","zoomLensBackground":"http://g-ecx.images-amazon.com/images/G/01/apparel/rcxgs/tile._V211431200_.gif","videoThumbIcon":"http://g-ecx.images-amazon.com/images/G/01/Quarterdeck/en_US/images/video._V183716339_SX38_SY50_CR,0,0,38,50_.gif","spinner":"http://g-ecx.images-amazon.com/images/G/01/ui/loadIndicators/loading-large_labeled._V192238949_.gif","zoomInCur":"http://g-ecx.images-amazon.com/images/G/01/detail-page/cursors/zoomIn._V323082799_.cur","videoSWFPath":"http://g-ecx.images-amazon.com/images/G/01/Quarterdeck/en_US/video/20110518115040892/Video._V178668404_.swf","arrow":"http://g-ecx.images-amazon.com/images/G/01/javascripts/lib/popover/images/light/sprite-vertical-popover-arrow._V186877868_.png","zoomOutCur":"http://g-ecx.images-amazon.com/images/G/01/detail-page/cursors/zoomOut._V323082798_.cur"},"videos":[],"gPreferChildVideos":0,"altsOnLeft":1,"ivImageSetKeys":{"Coral Dreams":"6","Heather Grey":"3","Black":"1","initial":0,"White":"5","Deep Blue Sea":"2","Sea Glass":"4"},"useHoverZoomIpad":"","isUDP":1,"alwaysIncludeVideo":0,"widths":[1280,1440,1640,1800],"maxAlts":7,"useChromelessVideoPlayer":1,"mainImageHeightPartitions":null}; 
    data["customerImages"] = eval('[]'); 
    data["colorImages"] = {"Coral Dreams":[{"large":"http://ecx.images-amazon.com/images/I/41FGlhksmtL.jpg","variant":"MAIN","hiRes":"http://ecx.images-amazon.com/images/I/81iXQbkcpiL._UL1500_.jpg","thumb":"http://ecx.images-amazon.com/images/I/41FGlhksmtL._SR38,50_.jpg","main":{"http://ecx.images-amazon.com/images/I/81iXQbkcpiL._UX466_.jpg":["466","606"],"http://ecx.images-amazon.com/images/I/81iXQbkcpiL._UX522_.jpg":["522","679"],"http://ecx.images-amazon.com/images/I/81iXQbkcpiL._UY550_.jpg":["423","550"],"http://ecx.images-amazon.com/images/I/81iXQbkcpiL._UX342_.jpg":["342","445"],"http://ecx.images-amazon.com/images/I/81iXQbkcpiL._UY500_.jpg":["385","500"]}},{"large":"http://ecx.images-amazon.com/images/I/41XR9o0cV-L.jpg","variant":"BACK","hiRes":"http://ecx.images-amazon.com/images/I/81bVmFiRu0L._UL1500_.jpg","thumb":"http://ecx.images-amazon.com/images/I/41XR9o0cV-L._SR38,50_.jpg","main":{"http://ecx.images-amazon.com/images/I/81bVmFiRu0L._UY500_.jpg":["385","500"],"http://ecx.images-amazon.com/images/I/81bVmFiRu0L._UX522_.jpg":["522","679"],"http://ecx.images-amazon.com/images/I/81bVmFiRu0L._UX342_.jpg":["342","445"],"http://ecx.images-amazon.com/images/I/81bVmFiRu0L._UX466_.jpg":["466","606"],"http://ecx.images-amazon.com/images/I/81bVmFiRu0L._UY550_.jpg":["423","550"]}}],"Heather Grey":[{"large":"http://ecx.images-amazon.com/images/I/41f-8R8Eu-L.jpg","variant":"MAIN","hiRes":"http://ecx.images-amazon.com/images/I/81dTYkBL%2BxL._UL1500_.jpg","thumb":"http://ecx.images-amazon.com/images/I/41f-8R8Eu-L._SR38,50_.jpg","main":{"http://ecx.images-amazon.com/images/I/81dTYkBL%2BxL._UX466_.jpg":["466","606"],"http://ecx.images-amazon.com/images/I/81dTYkBL%2BxL._UY500_.jpg":["385","500"],"http://ecx.images-amazon.com/images/I/81dTYkBL%2BxL._UY550_.jpg":["423","550"],"http://ecx.images-amazon.com/images/I/81dTYkBL%2BxL._UX522_.jpg":["522","679"],"http://ecx.images-amazon.com/images/I/81dTYkBL%2BxL._UX342_.jpg":["342","445"]}},{"large":"http://ecx.images-amazon.com/images/I/41gLiFBbcdL.jpg","variant":"BACK","hiRes":"http://ecx.images-amazon.com/images/I/81ua3AXCpJL._UL1500_.jpg","thumb":"http://ecx.images-amazon.com/images/I/41gLiFBbcdL._SR38,50_.jpg","main":{"http://ecx.images-amazon.com/images/I/81ua3AXCpJL._UX342_.jpg":["342","445"],"http://ecx.images-amazon.com/images/I/81ua3AXCpJL._UY550_.jpg":["423","550"],"http://ecx.images-amazon.com/images/I/81ua3AXCpJL._UY500_.jpg":["385","500"],"http://ecx.images-amazon.com/images/I/81ua3AXCpJL._UX522_.jpg":["522","679"],"http://ecx.images-amazon.com/images/I/81ua3AXCpJL._UX466_.jpg":["466","606"]}}],"Black":[{"large":"http://ecx.images-amazon.com/images/I/41BxSpfEM7L.jpg","variant":"MAIN","hiRes":"http://ecx.images-amazon.com/images/I/81%2BTW8762BL._UL1500_.jpg","thumb":"http://ecx.images-amazon.com/images/I/41BxSpfEM7L._SR38,50_.jpg","main":{"http://ecx.images-amazon.com/images/I/81%2BTW8762BL._UY550_.jpg":["423","550"],"http://ecx.images-amazon.com/images/I/81%2BTW8762BL._UX342_.jpg":["342","445"],"http://ecx.images-amazon.com/images/I/81%2BTW8762BL._UX522_.jpg":["522","679"],"http://ecx.images-amazon.com/images/I/81%2BTW8762BL._UY500_.jpg":["385","500"],"http://ecx.images-amazon.com/images/I/81%2BTW8762BL._UX466_.jpg":["466","606"]}},{"large":"http://ecx.images-amazon.com/images/I/41Gf%2BW-cPTL.jpg","variant":"BACK","hiRes":"http://ecx.images-amazon.com/images/I/81SJwuaCspL._UL1500_.jpg","thumb":"http://ecx.images-amazon.com/images/I/41Gf%2BW-cPTL._SR38,50_.jpg","main":{"http://ecx.images-amazon.com/images/I/81SJwuaCspL._UY500_.jpg":["385","500"],"http://ecx.images-amazon.com/images/I/81SJwuaCspL._UX522_.jpg":["522","679"],"http://ecx.images-amazon.com/images/I/81SJwuaCspL._UX342_.jpg":["342","445"],"http://ecx.images-amazon.com/images/I/81SJwuaCspL._UX466_.jpg":["466","606"],"http://ecx.images-amazon.com/images/I/81SJwuaCspL._UY550_.jpg":["423","550"]}}],"White":[{"large":"http://ecx.images-amazon.com/images/I/41tElK2wPKL.jpg","variant":"MAIN","hiRes":"http://ecx.images-amazon.com/images/I/81kKgU75rIL._UL1500_.jpg","thumb":"http://ecx.images-amazon.com/images/I/41tElK2wPKL._SR38,50_.jpg","main":{"http://ecx.images-amazon.com/images/I/81kKgU75rIL._UY550_.jpg":["423","550"],"http://ecx.images-amazon.com/images/I/81kKgU75rIL._UX522_.jpg":["522","679"],"http://ecx.images-amazon.com/images/I/81kKgU75rIL._UY500_.jpg":["385","500"],"http://ecx.images-amazon.com/images/I/81kKgU75rIL._UX342_.jpg":["342","445"],"http://ecx.images-amazon.com/images/I/81kKgU75rIL._UX466_.jpg":["466","606"]}},{"large":"http://ecx.images-amazon.com/images/I/31lEDIs4cqL.jpg","variant":"BACK","hiRes":"http://ecx.images-amazon.com/images/I/81OBgvbUR7L._UL1500_.jpg","thumb":"http://ecx.images-amazon.com/images/I/31lEDIs4cqL._SR38,50_.jpg","main":{"http://ecx.images-amazon.com/images/I/81OBgvbUR7L._UX466_.jpg":["466","606"],"http://ecx.images-amazon.com/images/I/81OBgvbUR7L._UX342_.jpg":["342","445"],"http://ecx.images-amazon.com/images/I/81OBgvbUR7L._UX522_.jpg":["522","679"],"http://ecx.images-amazon.com/images/I/81OBgvbUR7L._UY500_.jpg":["385","500"],"http://ecx.images-amazon.com/images/I/81OBgvbUR7L._UY550_.jpg":["423","550"]}}],"Deep Blue Sea":[{"large":"http://ecx.images-amazon.com/images/I/41oNq3KmSGL.jpg","variant":"MAIN","hiRes":"http://ecx.images-amazon.com/images/I/81MtZtmxVLL._UL1500_.jpg","thumb":"http://ecx.images-amazon.com/images/I/41oNq3KmSGL._SR38,50_.jpg","main":{"http://ecx.images-amazon.com/images/I/81MtZtmxVLL._UX342_.jpg":["342","445"],"http://ecx.images-amazon.com/images/I/81MtZtmxVLL._UX522_.jpg":["522","679"],"http://ecx.images-amazon.com/images/I/81MtZtmxVLL._UY550_.jpg":["423","550"],"http://ecx.images-amazon.com/images/I/81MtZtmxVLL._UY500_.jpg":["385","500"],"http://ecx.images-amazon.com/images/I/81MtZtmxVLL._UX466_.jpg":["466","606"]}},{"large":"http://ecx.images-amazon.com/images/I/41AJgd1OuYL.jpg","variant":"BACK","hiRes":"http://ecx.images-amazon.com/images/I/81uLEksrYFL._UL1500_.jpg","thumb":"http://ecx.images-amazon.com/images/I/41AJgd1OuYL._SR38,50_.jpg","main":{"http://ecx.images-amazon.com/images/I/81uLEksrYFL._UX342_.jpg":["342","445"],"http://ecx.images-amazon.com/images/I/81uLEksrYFL._UY500_.jpg":["385","500"],"http://ecx.images-amazon.com/images/I/81uLEksrYFL._UX522_.jpg":["522","679"],"http://ecx.images-amazon.com/images/I/81uLEksrYFL._UX466_.jpg":["466","606"],"http://ecx.images-amazon.com/images/I/81uLEksrYFL._UY550_.jpg":["423","550"]}}],"Sea Glass":[{"large":"http://ecx.images-amazon.com/images/I/418vg-re8oL.jpg","variant":"MAIN","hiRes":"http://ecx.images-amazon.com/images/I/81YgtD-bEwL._UL1500_.jpg","thumb":"http://ecx.images-amazon.com/images/I/418vg-re8oL._SR38,50_.jpg","main":{"http://ecx.images-amazon.com/images/I/81YgtD-bEwL._UX342_.jpg":["342","445"],"http://ecx.images-amazon.com/images/I/81YgtD-bEwL._UX522_.jpg":["522","679"],"http://ecx.images-amazon.com/images/I/81YgtD-bEwL._UX466_.jpg":["466","606"],"http://ecx.images-amazon.com/images/I/81YgtD-bEwL._UY500_.jpg":["385","500"],"http://ecx.images-amazon.com/images/I/81YgtD-bEwL._UY550_.jpg":["423","550"]}},{"large":"http://ecx.images-amazon.com/images/I/41lcpC41VSL.jpg","variant":"BACK","hiRes":"http://ecx.images-amazon.com/images/I/814%2B6ZLwIxL._UL1500_.jpg","thumb":"http://ecx.images-amazon.com/images/I/41lcpC41VSL._SR38,50_.jpg","main":{"http://ecx.images-amazon.com/images/I/814%2B6ZLwIxL._UY500_.jpg":["385","500"],"http://ecx.images-amazon.com/images/I/814%2B6ZLwIxL._UX342_.jpg":["342","445"],"http://ecx.images-amazon.com/images/I/814%2B6ZLwIxL._UX522_.jpg":["522","679"],"http://ecx.images-amazon.com/images/I/814%2B6ZLwIxL._UX466_.jpg":["466","606"],"http://ecx.images-amazon.com/images/I/814%2B6ZLwIxL._UY550_.jpg":["423","550"]}}]}; 
    data["heroImage"] = {}; 
    data["landingAsinColor"] = 'Coral Dreams'; 
    data["shouldApplyResizeFix"] = false; 

    return data; 
}); 

</script> 

Die Dateinamen haben mich nicht src (dh http://ecx.images-amazon.com/images/I/81%2BTW8762BL.UY500.jpg) In diesem Fall greifen will, wird das Feld "Daten [" colorimages "] genannt

Aber ... ich kann es nicht schwer Code hier nichts, weil das gleiche passiert bei eBay ... zum Beispiel: http://www.ebay.com/itm/Summer-Women-Casual-Chiffon-Loose-Tops-Batwing-Short-Sleeve-Loose-T-Shirt-Blouse-/351411949784?pt=LH_DefaultDomain_0&var=&hash=item51d1c8d0d8

die Dateinamen ich hier brauchen, sind in „enImgCarousel“

auf ein Randnotiz, wenn ich u se das folgende Javascript Bookmarklet für jede URL Bilder zu bekommen, ich bin in der Lage, die richtigen Bilder zu bekommen:

a=''; 
for (b=0;b<document.images.length;b++){ 
    a+='<img src='+document.images[b].src+'><br>'}; 
    ifa=''){ 
     document.writea+'</center>'); 
     void(document.close()) 
    }else{ 
     alert('No images!') 
    } 

Zurück zu Nokogiri und XPath, habe ich auch versucht, mit:

tmp2.xpath("//img").each do |src|... 

und

Irgendwelche Ideen, wie ich diese oder welche Richtung gehen sollte?

Antwort

-1

Entschuldigung, da ich die Antwort vom Handy posten kann, kann ich nicht sofort den vollen Code schreiben, aber ich kann dir einen Weg geben. Sie sollten Mechanize mit selen-webdriver & watir anstelle von nur Nokogiri verwenden.

Mit Mechanize können Sie Elemente aus JavaScript verwenden. Sie können sich über die tatsächlichen Bewegungen im Browser lustig machen, d. H., Sie können für das Klicken auf Links/Schaltflächen codieren, Sie können auf das Laden von Bildern warten und dann können Sie es abkratzen. Und all das kann mit Mechanize sehr einfach gemacht werden.

+0

Mechanize wird jede JavaScript nicht ausführen, so dass es nicht „kommen Elemente verarbeiten kann JavaScript ". Es ist möglich, auf Schaltflächen zu klicken, aber wenn diese JavaScript-Aktionen auslösen oder JavaScript versucht, eine Seite dynamisch zu ändern, werden diese Änderungen nicht angezeigt. Deaktivieren Sie JavaScript im Browser und navigieren Sie durch die Website. Sie sehen, was Mechanize sehen wird. –

+0

@theTinMan Wie in der Antwort erwähnt, müssen Sie mit selen-webdriver und watir mechanisieren, um dynamische Elemente zu handhaben – RAJ

+0

Wenn Sie Selen oder Watir verwenden, dann ist Mechanize nicht notwendig. Verwenden Sie diese, um zu navigieren und Nokogiri, weil es der Parsing-Kern von Mechanize ist und leichter ist. –

-1

Versuchen Sie, eine Datenbank mit Konkurrenzprodukten mit Preisen etc. zu erstellen?
Versuchen Sie, ganze Kategorien oder einzelne Verkäufer zu erfassen? Der Grund, warum ich frage, ist, dass Sie einen RSS-Feed von Artikeln erhalten können, die jeder Verkäufer auflistet, wenn sie diese Funktion aktiviert haben. Auf diese Weise müssen Sie keine Zeit verschwenden, wenn Sie die zentralen Daten eines RSS-Feeds abrufen können.

Bei der Analyse von Webseiten, abhängig von Ihrem Aufenthaltsort auf der Webseite (Sie erwähnten Karussell), stammen die Indizes aus dem Vorspann der Vorschaubilder, die die größeren Bilder darstellen.
Ich empfehle, die eBay API und die Amazon API zu betrachten und zuerst die RSS-Feeds für die Verkäufer zu finden.

Soweit vorbei Javascript Probleme, lädt die Webseite rotierende Diashows und Karussells dynamisch, so müssen Sie Mechanize (wie RAJ oben vorgeschlagen) oder Beautiful Soup oder Selenium, um vollständig gerenderten Webseiten, in denen alle Bilder zu bekommen sind in einem schrottfähigen Zustand.

Fühlen Sie sich frei, Ihre Quelle zu posten, wenn es noch etwas gibt, mit dem ich helfen kann.

+0

Das Problem, mit dem ich konfrontiert bin, ist, dass ein Benutzer fragen kann, Bilder von jeder Website zu erhalten, nicht nur eBay und Amazon. Für die meisten Websites funktioniert das regelmäßige Scrappen von Bildern (nach dem Code, den ich oben habe) großartig; aber für einige Seiten (und ich werde nicht im Voraus wissen, welche), würde ich etwas brauchen, um tiefer zu kratzen. Was ich brauche, ist, den Seitencode zu betrachten und alle aufgelisteten Bilddateien zurückzugeben (nicht nur die mit img src Attributen). Das Kopfgeld verfällt in ein paar Minuten und ich wünschte, ich könnte es verlängern, da ich noch keine Zeit hatte, Mechanize auszuprobieren, obwohl es sich vielversprechend anhört. Ich habe nicht von Beautiful Soup gehört. Ich werde es untersuchen – purplerice

+1

Jedes Programm, das speziell das Javascript "rendert" wird dieses Problem beheben, weil es die Indizierung usw. entfernt und Ihnen die Bilder und andere javascript referenzierte Elemente explizit gibt. – miniscule

+0

Bitte markieren Sie dies als Antwort, damit ich das Kopfgeld vor Ablauf der Frist erhalten kann - - Danke! – miniscule

0

Dies ist eine alternative Möglichkeit zu lösen, was Sie erreichen möchten; Sie können Capybara und Poltergeist verwenden und ich habe das, das Sie erhalten möchten. Ich nehme an, dass Sie mit dieser Lösung nicht in Javascript eintauchen müssen.

Wenn Sie kratzen, empfehle ich, dass Sie Capybara mit Poltergeist betrachten, finden Sie viele Quellen zu verweisen.

Nachher ist der Code, den ich ausprobiert habe. Hoffe es würde helfen!

require 'capybara' 
require 'capybara/dsl' 
require 'capybara/poltergeist' 

Capybara.register_driver :poltergeist_debug do |app| 
    Capybara::Poltergeist::Driver.new(app, inspector: true) 
end 

Capybara.javascript_driver = :poltergeist_debug 
Capybara.current_driver = :poltergeist_debug 

# Amazon Case 
visit_site('https://www.amazon.com/dp/B00T46V758/?tag=stackoverfl08-20') 
doc_amazon = Nokogiri::HTML.parse(page.html) 
doc_amazon.xpath("//img/@src").each do |src| 
    p src.value 
end 

#ebay case 
visit_site('https://www.ebay.com/itm/Summer-Women-Casual-Chiffon-Loose-Tops-Batwing-Short-Sleeve-Loose-T-Shirt-Blouse-/351411949784?pt=LH_DefaultDomain_0&var=&hash=item51d1c8d0d8')  
doc_ebay = Nokogiri::HTML.parse(page.html) 
doc_ebay.xpath("//img/@src").each do |src| 
    p src.value 
end 

, wenn Sie es graben wollen ... (es scheint, dass Sie nicht wollen)

doc.xpath("//div[@id='imgTagWrapperId']/img").attribute('src').value 
# => "https://images-na.ssl-images-amazon.com/images/I/81%2BTW8762BL._UX453_.jpg" 

doc.xpath("//div[@id='mainImgHldr']/img[@id='icImg']").attribute('src').value 
# => "https://i.ebayimg.com/images/g/dtAAAOSwpdpVZuU~/s-l300.jpg"