我正在尝试从 Zara 抓取图像 url,但我唯一想到的是透明背景的 url。
这是我不断收到的链接: https://static.zara.net/stdstatic/1.249.0-b.13/images/transparent-background.png'
有什么想法吗?这是我的代码。先感谢您!! *注:我在图片中使用了
extract()
,而不是extract_first()
,看看是否有多个链接,但它们都是一样的。
import scrapy
from scrapy.linkextractors import LinkExtractor
from Zara.items import Producto
class ZaraSpider(scrapy.Spider):
name = 'zara'
allowed_domains = ['zara.com']
start_urls = [
'https://www.zara.com/es/es/jersey-punto-cuello-subido-p09598176.html'
]
def parse(self, response):
producto = Producto()
# Extraemos los enlaces
links = LinkExtractor(
allow_domains=['zara.com'],
restrict_xpaths=["//a"],
allow="/es/es/"
).extract_links(response)
outlinks = [] # Lista con todos los enlaces
for link in links:
url = link.url
outlinks.append(url) # Añadimos el enlace en la lista
yield scrapy.Request(url, callback=self.parse) # Generamos la petición
product = response.xpath('//meta[@content="product"]').extract()
if product:
# Extraemos la url, el nombre del producto, la descripcion y su precio
producto['url'] = response.request.url
producto['nombre'] = response.xpath('//h1[@class="product-detail-info__name"]/text()').extract_first()
producto['precio'] = response.xpath('//span[@class="price__amount-current"]/text()').extract_first()
producto['descripcion'] = response.xpath('//div[@class="expandable-text__inner-content"]//text()').extract_first()
producto['imagen'] = response.xpath('//img[@class="media-image__image media__wrapper--media"]/@src').extract()
#producto['links'] = outlinks
yield producto
所以问题是它是用javascript生成的。尝试用 scrapy shell 请求一个网页并查看响应,然后你会发现你可以通过另一种方式找到请求的图像 url。
import scrapy
from scrapy.linkextractors import LinkExtractor
# from Zara.items import Producto
class Producto(scrapy.Item):
url = scrapy.Field()
nombre = scrapy.Field()
precio = scrapy.Field()
descripcion = scrapy.Field()
imagen = scrapy.Field()
links = scrapy.Field()
class ZaraSpider(scrapy.Spider):
name = 'zara'
allowed_domains = ['zara.com']
start_urls = [
'https://www.zara.com/es/es/jersey-punto-cuello-subido-p09598176.html'
]
def parse(self, response):
producto = Producto()
# Extraemos los enlaces
links = LinkExtractor(
allow_domains=['zara.com'],
restrict_xpaths=["//a"],
allow="/es/es/"
).extract_links(response)
outlinks = [] # Lista con todos los enlaces
for link in links:
url = link.url
outlinks.append(url) # Añadimos el enlace en la lista
yield scrapy.Request(url, callback=self.parse) # Generamos la petición
product = response.xpath('//meta[@content="product"]').get()
if product:
# Extraemos la url, el nombre del producto, la descripcion y su precio
producto['url'] = response.request.url
producto['nombre'] = response.xpath('//h1[@class="product-detail-info__name"]/text()').get()
producto['precio'] = response.xpath('//span[@class="price__amount-current"]/text()').get()
producto['descripcion'] = response.xpath('//div[@class="expandable-text__inner-content"]//text()').get()
producto['imagen'] = response.xpath('//meta[@property="og:image"]/@content').get()
#producto['links'] = outlinks
yield producto
顺便说一句,看看CrawlSpider。