2012-12-15 38 views
6

का उपयोग करके नेस्टेड 'img src' निकालें मैं उस मामले के लिए स्केपर या पायथन का उपयोग करने के लिए अपेक्षाकृत नया हूं। मैं कुछ अलग लिंक से निकालने के लिए देख रहा हूं और मुझे HTMLXPathSelector अभिव्यक्ति (वाक्यविन्यास) का उपयोग करने में समस्याएं आ रही हैं। मैंने उचित वाक्यविन्यास के लिए व्यापक दस्तावेज देखा है लेकिन अभी तक समाधान का पता लगाना बाकी है।स्कैरेपी - xPathSelector

Page I am trying to extract the img src url from

from scrapy.spider import BaseSpider 
from scrapy.selector import HtmlXPathSelector 

class GeekSpider(BaseSpider): 
    name = "geekS" 
    allowed_domains = ["geek.com"] 
    start_urls = ["http://www.geek.com/articles/gadgets/kindle-fire-hd-8-9-on-sale-for-50-off-today-only-20121210/"] 

    def parse(self, response): 
     hxs = HtmlXPathSelector(response) 
     imgurl = hxs.select("//div[@class='article']//a/img/@src").extract() 
     return imgurl 

मुझे लगता है मैं x.select वाक्य विन्यास पता लगा है:

यहाँ एक कड़ी का एक उदाहरण मैं से 'img src' निकालने के लिए कोशिश कर रहा हूँ है बयान लेकिन, क्योंकि मैं इस वाक्यविन्यास/विधि में नया हूं, मुझे यकीन नहीं है।

from scrapy.item import Item, Field 

class GeekItem(Item): 
    imgsrc = Field() 

स्पष्ट करने के लिए: मुझे क्या करना रहा हूँ img src यूआरएल पृष्ठ पर है कि निकालने है

यहाँ मेरी items.py फ़ाइल है, मूल रूप से इस बात के लिए scrapy ट्यूटोरियल का पालन किया। मुझे सभी छवि स्रोतों को निकालने की आवश्यकता नहीं है जिन्हें मैंने पहले से ही समझा है (बहुत आसान)।

मैं इसे कम करने के लिए देख रहा हूं और केवल img src के उस विशेष यूआरएल को निकालने के लिए देख रहा हूं। (मैं इस साइट पर कई पृष्ठों पर इसका उपयोग करूँगा)

किसी भी मदद की बहुत सराहना की जाती है!

संपादित करें - Updated कोड मैं गीक = गीक के साथ कुछ वाक्यविन्यास त्रुटियों हो रही थी() तो मैं यह करने के लिए हल्के से बदल दिया उम्मीद है कि आसान हो समझते हैं और कार्य करने के लिए

+0

तो तुम केवल छवि है कि एक क्लिक करने योग्य लिंक (यानी "Kindle आग-hd.jpg") है करना चाहते हैं? – Talvalin

+0

हां, बिल्कुल। मैं छवि को खुद ही वापस नहीं करना चाहता, बस छवि के लिए यूआरएल ताकि मैं इसे स्टोर कर सकूं। – Twhyler

+0

भ्रम से बचने के लिए, कृपया पोस्ट किया गया पहला स्पाइडर कोड अपडेट करें और दूसरा हटाएं। :) – Talvalin

उत्तर

3

मेरा मानना ​​है कि अपने xpath एक्सप्रेशन इस तरह अधिक होना चाहिए । मैंने इसे किसी अन्य पृष्ठ पर परीक्षण किया (the Amazon shipping center article) और यह सभी दस क्लिक करने योग्य छवियों को वापस कर दिया।

geek['imgsrc'] = x.select("//div[@class='article']//a/img/@src").extract() 

अपने अन्य मुद्दे को ठीक करने के लिए, आप अपने GeekSpider कोड में GeekItem आयात करने के लिए की जरूरत है।

from scrapy.spider import BaseSpider 
from scrapy.selector import HtmlXPathSelector 
from geekspider.items import GeekItem # I'm guessing the name of your project here 

class GeekSpider(BaseSpider): 
    name = "geekS" 
    allowed_domains = ["geek.com"] 
    start_urls = ["http://www.geek.com/articles/gadgets/kindle-fire-hd-8-9-on-sale-for-50-off-today-only-20121210/"] 

    def parse(self, response): 
     item = GeekItem() 
     hxs = HtmlXPathSelector(response) 
     item['imgsrc'] = hxs.select("//div[@class='article']//a/img/@src").extract() 
     return item 
+0

छोड़ने के लिए यह अधिक भ्रमित था या नहीं! चूंकि सवाल पूछने के बाद मैंने कुछ वाक्यविन्यास त्रुटियों के कारण मकड़ी को थोड़ा बदल दिया है। मैंने उपरोक्त अद्यतन कोड संलग्न किया है। मुझे अब त्रुटियां नहीं मिल रही हैं, लेकिन वापस लौटाए गए scraped_data.json की जांच करते समय एक [प्रतीक। कोई विचार? – Twhyler

+0

मैंने अपनी item.py फ़ाइल भी संलग्न की है, मैंने नहीं सोचा था कि इसमें कुछ भी गलत है (जैसा कि मैंने स्केपर ट्यूटोरियल का लगभग सटीक पालन किया है) लेकिन संभव समय और भ्रम को बचाने के लिए, मैंने इसे ऊपर से जोड़ा है। मैंने नोटिस किया कि मुझे एक त्रुटि मिल रही है जो कहती है "मकड़ी को अनुरोध, बेसइटम या कोई नहीं लौटा देना चाहिए।" सहायता के लिए धन्यवाद! – Twhyler

+0

आपकी सभी मदद के लिए धन्यवाद, भ्रम और मेरी समस्याओं को दूर कर दिया। अब मुझे इसे अपने डीबी से खींचे गए कई यूआरएल में काम करने और इसे वापस अपने डीबी में पाइपलाइन करने की आवश्यकता है। मजेदार होना चाहिए। एक बार फिर धन्यवाद! – Twhyler