Доступ к URL-адресам изображений с помощью Scrapy - PullRequest
0 голосов
/ 27 мая 2019

Я пытаюсь собрать информацию о домах с этого сайта: https://www.goldenproperty.co.za/property_search_result.aspx?type=allTypes&min_price=0&max_price=1000000000&beds=-1&baths=-1&ids=Cape%20Town.all%20suburbs&status=-1&sqm=-1&land=-1

В частности, я хотел бы извлечь URL-адрес изображений каждого свойства, которое указано на странице результатов.

Эта часть кода должна получить изображения.Однако из-за того, что они доступны на дочерней странице, я получаю только GET https://www.goldenproperty.co.za/property/for-sale/tamboerskloof/retail-for-sale_1016735/, а не фактический URL-адрес изображения.

   def parse(self, response):
        for prop in response.css('div.search_result_panel'):
            link = prop.css('a::attr(href)').get()
            request = scrapy.Request(link, callback = self.get_loc)

            yield {
                .....
                other fields we're extracting                
                .....

                'images': request
            }
    def get_loc(self,response):
        div = response.css('div.visible-print')
        pics = div.css('img::attr(src)').getall()
        return pics 

Мы хотим получить список / словарь для всехURL изображения для каждого свойства.Есть предложения?

Заранее спасибо.

1 Ответ

1 голос
/ 27 мая 2019

Поскольку необходимые вам URL-адреса доступны только на странице элемента (дочерняя), вам необходимо сначала сделать запрос и захватить эти URL-адреса на get_loc.

.

Если вы хотите передать информацию из поиска на страницу элемента, вы можете сделать это, передав свой элемент как meta по запросу, а затем выдать элемент со всем URL-адресом изображения.

   def parse(self, response):
        for prop in response.css('div.search_result_panel'):
            link = prop.css('a::attr(href)').get()
            yield scrapy.Request(
                link,
                meta={'item': {'other_fields': other_values}},
                callback=self.get_loc,
            )

    def get_loc(self,response):
        item = response.meta.get('item')
        div = response.css('div.visible-print')
        item['images'] = div.css('img::attr(src)').getall()
        yield item

https://docs.scrapy.org/en/latest/topics/request-response.html#scrapy.http.Request.meta

...