On dirait que les images peuvent être extraites de JavaScript qui est présente dans la source de la page. J'ai utilisé la bibliothèque js2xml pour convertir le code source JavaScript en XML (vous pouvez en apprendre plus sur le blogpost de Scrapinghub). Le XML peut ensuite être utilisé pour créer un Selector
avec lequel vous pouvez extraire des données comme d'habitude. Jetez un oeil à cet exemple araignée:
# -*- coding: utf-8 -*-
import js2xml
import scrapy
class ExampleSpider(scrapy.Spider):
name = 'example'
allowed_domains = ['amazon.com']
start_urls = ['https://www.amazon.com/dp/B01N068GIX?psc=1/']
def parse(self, response):
item = dict()
js = response.xpath("//script[contains(text(), 'register(\"ImageBlockATF\"')]/text()").extract_first()
xml = js2xml.parse(js)
selector = scrapy.Selector(root=xml)
item['image_urls'] = selector.xpath('//property[@name="colorImages"]//property[@name="hiRes"]/string/text()').extract()
yield item
Si vous souhaitez le tester, l'exécuter comme
scrapy runspider example.py -s USER_AGENT="Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/28.0.1500.52 Safari/537.36"
comme Amazon semble bloquer Scrapy basé sur chaîne de l'agent utilisateur.
pouvez-vous ajouter un lien vers la page et spécifier l'élément que vous souhaitez localiser? – CtheSky
J'ai ajouté le lien pour la page. – PiccolMan