我正在尝试从以下网站抓取有关房屋的信息: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的产量列表/字典。有什么建议吗?
谢谢。
答案 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