मैं https से छवियों के सभी URL की सूची निकालने का प्रयास कर रहा हूं ://www.rawson.co.za/property/for-sale/cape-town। हालाँकि, सभी चित्र मुख्य पृष्ठ के बजाय किसी भिन्न पृष्ठ पर उपलब्ध हैं। मैं अन्य वांछित क्षेत्रों को पुनः प्राप्त करने के लिए xpath का उपयोग कर रहा हूं।

मुझे पूरा यकीन नहीं है कि उन बाल पृष्ठों से सूची में सभी यूआरएल कैसे प्राप्त करें। मैंने यही कोशिश की है:


    class PropDataSpider(scrapy.Spider):
        name = "rawson"
        start_urls = ['https://www.rawson.co.za/property/for-sale/cape-town']


        def parse(self, response):
            propertes = response.xpath("//div[@class='card__main']")
            for prop in propertes:
                title = prop.xpath(
                    "./div[@class='card__body']/h3[@class='card__title']/a/text()").extract_first()
                price = prop.xpath(
                    "./div[@class='card__body']/div[@class='card__footer card__footer--primary']/div[@class='card__price']/text()").extract_first()
                description = prop.xpath(
                    "./div[@class='card__body']/div[@class='card__synopsis']/p/text()").extract_first()
                bedrooms = prop.xpath(
                    "./div[@class='card__body']/div[@class='card__footer card__footer--primary']/div[@class='features features--inline']/ol[@class ='features__list']/li[@class ='features__item'][1]/div[@class='features__label']/text()").extract_first()

    ...



                images = ['https://' + img for img in prop.xpath(
                    "main[@class='l-main']/section[@class='l-section']/div[@class='l-wrapper']/div[@class='l-section__main']/div[@class ='content-block content-block--flat']/div[@class ='gallery gallery--flat js-lightbox']/div[@ class ='row row--flat']/div[@class ='col']/a[@class ='gallery__link js-lightbox-image']/img/@src")]

                yield {'title': title, 'price':price, "description": description, 'bedrooms': bedrooms, 'bathrooms': bathrooms, 'garages': garages, 'images':images}

लेकिन यह कोड छवियों के लिए 'कोई नहीं' पुनर्प्राप्त करता है, जो समझ में आता है, हालांकि मुझे यकीन नहीं है कि इसके बारे में कैसे जाना है। अगर किसी के पास कोई सुझाव है तो इसकी वास्तव में सराहना की जाएगी। आपका अग्रिम में ही बहुत धन्यवाद!

0
saraherceg 4 जुलाई 2019, 11:56

1 उत्तर

सबसे बढ़िया उत्तर

आपको response.meta का उपयोग करने की आवश्यकता है:

def parse(self, response):
    propertes = response.xpath("//div[@class='card__main']")
    for prop in propertes:
        property_url = prop.xpath(
            "./div[@class='card__body']/h3[@class='card__title']/a/@href").extract_first()
        title = prop.xpath(
            "./div[@class='card__body']/h3[@class='card__title']/a/text()").extract_first()
        price = prop.xpath(
            "./div[@class='card__body']/div[@class='card__footer card__footer--primary']/div[@class='card__price']/text()").extract_first()
        description = prop.xpath(
            "./div[@class='card__body']/div[@class='card__synopsis']/p/text()").extract_first()
        bedrooms = prop.xpath(
            "./div[@class='card__body']/div[@class='card__footer card__footer--primary']/div[@class='features features--inline']/ol[@class ='features__list']/li[@class ='features__item'][1]/div[@class='features__label']/text()").extract_first()

        yield scrapy.Request(
            url=property_url,
            callback=self.parse_property,
            meta={
                'title': title,
                'price': price,
                'description': description,
                'bedrooms': bedrooms,
            }
        )

def parse_property(self, response):

    title = response.meta["title"]
    price = response.meta["price"]
    description = response.meta["description"]
    bedrooms = response.meta["bedrooms"]

    images = response.xpath('//a[contains(@class, "gallery__link ")]/@href').getall()

    yield {'title': title, 'price':price, "description": description, 'bedrooms': bedrooms, 'bathrooms': bathrooms, 'garages': garages, 'images':images}
0
gangabass 4 जुलाई 2019, 12:31