2017-10-01 68 views
9

मैं amazon.com पर किसी उत्पाद से संबंधित छवियों को स्क्रैप करने के लिए स्केपर का उपयोग कर रहा हूं। मैं छवि डेटा को कैसे पार्स करूं?स्क्रैप के साथ स्क्रैप छवि डेटा

मैं आमतौर पर XPath का उपयोग करता हूं। हालांकि, मैं छवियों के लिए XPath (थंबनेल के अलावा) का पता लगाने में सक्षम नहीं था। उदाहरण के लिए, इस तरह मैं शीर्षक का विश्लेषण करता हूं।

title = response.xpath('//h1[@id="title"]/span/text()').extract() 

आइटम के लिए लिंक है: https://www.amazon.com/dp/B01N068GIX?psc=1

+0

क्या आप पृष्ठ पर एक लिंक जोड़ सकते हैं और निर्दिष्ट कर सकते हैं कि आप कौन सा तत्व ढूंढना चाहते हैं? – CtheSky

+0

मैंने पृष्ठ के लिए लिंक जोड़ा। – PiccolMan

उत्तर

4

छवियों को JavaScript से निकाला जा सकता है कि पृष्ठ स्रोत में मौजूद है की तरह लगता है। मैंने जावास्क्रिप्ट स्रोत कोड को एक्सएमएल में परिवर्तित करने के लिए js2xml लाइब्रेरी का उपयोग किया (आप स्क्रैपिंगहब के blogpost पर इसके बारे में अधिक जान सकते हैं)। एक्सएमएल का उपयोग Selector बनाने के लिए किया जा सकता है जिसके साथ आप सामान्य रूप से डेटा निकाल सकते हैं। आप इसे बाहर का परीक्षण करना चाहते हैं तो

# -*- coding: utf-8 -*-               
import js2xml                 
import scrapy                 

class ExampleSpider(scrapy.Spider):            
    name = 'example'                
    allowed_domains = ['amazon.com']            
    start_urls = ['https://www.amazon.com/dp/B01N068GIX?psc=1/']     

    def parse(self, response):             
     item = dict() 
     js = response.xpath("//script[contains(text(), 'register(\"ImageBlockATF\"')]/text()").extract_first() 
     xml = js2xml.parse(js)             
     selector = scrapy.Selector(root=xml)         
     item['image_urls'] = selector.xpath('//property[@name="colorImages"]//property[@name="hiRes"]/string/text()').extract() 
     yield item 

, जैसे

scrapy runspider example.py -s USER_AGENT="Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/28.0.1500.52 Safari/537.36" 

इसे चलाने अमेज़न उपयोगकर्ता एजेंट स्ट्रिंग के आधार पर Scrapy ब्लॉक करने के लिए लगता है के रूप में: इस उदाहरण मकड़ी पर एक नजर डालें।

1

मुझे पता है कि सवाल स्केप का उपयोग करने के लिए कहता है लेकिन यहां सुंदरता, अनुरोध और urllib का उपयोग करने के लिए आप क्या चाहते हैं इसका एक संस्करण है। आप इस विधि का उपयोग कर उपयोगकर्ता को सेट करने की आवश्यकता को भी बाईपास करते हैं।

from bs4 import BeautifulSoup as bsoup 
import requests 
from urllib import request 

def load_image(url): 
    resp1 = requests.get(url) 
    imgurl = _find_image_url(resp1.content) 
    resp2 = request.urlopen(imgurl) #treats url as file-like object 
    print(resp2.url) 
def _find_image_url(html_block): 
    soup = bsoup(html_block, "html5lib") 
    body = soup.find("body") 
    imgtag = soup.find("img", {"id":"landingImage"}) 
    imageurl = dict(imgtag.attrs)["src"] 
    return imageurl 


load_image("https://rads.stackoverflow.com/amzn/click/B01N068GIX") 
संबंधित मुद्दे