使用Scrapy访问图像URL

时间:2019-05-27 15:41:18

标签: python web-scraping scrapy web-crawler

我正在尝试从以下网站抓取有关房屋的信息: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 个答案:

答案 0 :(得分:1)

由于所需的URL仅在项目页面(子页面)上可用,因此您需要先发出请求,然后在get_loc上获取这些URL。

如果您希望将信息从搜索传递到商品页面,则可以按要求将商品作为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