Python 刮花罐';找不到图像源url

Python 刮花罐';找不到图像源url,python,web-scraping,scrapy,scrapy-splash,Python,Web Scraping,Scrapy,Scrapy Splash,我正试图从ZARA那里抓取一个产品页面。像这个: 我的脏兮兮的溅水容器正在运行。我在贝壳里取那一页 fetch('http://localhost:8050/render.html?url=https://www.zara.com/us/en/fitted-houndstooth-blazer-p07808160.html?v1=108967877&v2=1718115') 2021-05-14 14:30:42 [scrapy.core.engine] INFO: Spider ope

我正试图从ZARA那里抓取一个产品页面。像这个:

我的脏兮兮的溅水容器正在运行。我在贝壳里取那一页

fetch('http://localhost:8050/render.html?url=https://www.zara.com/us/en/fitted-houndstooth-blazer-p07808160.html?v1=108967877&v2=1718115')
2021-05-14 14:30:42 [scrapy.core.engine] INFO: Spider opened
2021-05-14 14:30:43 [scrapy.core.engine] DEBUG: Crawled (200) <GET http://localhost:8050/render.html?url=https://www.zara.com/us/en/fitted-houndstooth-blazer-p07808160.html?v1=108967877&v2=1718115> (referer: None)

但答案是:

['https://static.zara.net/stdstatic/1.211.0-b.44/images/transparent-background.png', 'https://static.zara.net/stdstatic/1.211.0-b.44/images/transparent-background.png', 'https://static.zara.net/stdstatic/1.211.0-b.44/images/transparent-background.png', 'https://static.zara.net/stdstatic/1.211.0-b.44/images/transparent-background.png', 'https://static.zara.net/stdstatic/1.211.0-b.44/images/transparent-background.png', 'https://static.zara.net/stdstatic/1.211.0-b.44/images/transparent-background.png']

都是背景图像,不是真实的。我可以在浏览器上显示图像,我可以看到网络中的图像请求。是因为它加载了AJAX请求吗?如何解决这个问题?

我上个星期才开始研究网页抓取,所以我不确定是否能帮上什么忙,但我确实找到了一些东西

源代码在顶部的脚本中显示了这一点:

_mkt_imageDir = /BASE_IMAGES_URL=(.*?);/.test(document.cookie) && RegExp.$1 || 'https://static.zara.net/photos/';
再往下看:

"originalUrl":"/us/en/fitted-houndstooth-blazer-p07808160.html?v1=108967877&v2=1718115","imageBaseUrl":"https://static.zara.net/photos/"
然后这里的所有图像看起来都是javascript格式的:

[{"@context":"http://schema.org/","@type":"Product","sku":"108967877-046-1","name":"FITTED HOUNDSTOOTH BLAZER","mpn":"108967877-046-1","brand":"ZARA","description":"","image":["https://static.zara.net/photos///2021/I/0/1/p/7808/160/046/2/w/1920/7808160046_1_1_1.jpg?ts=1620821843383","https://static.zara.net/photos///2021/I/0/1/p/7808/160/046/2/w/1920/7808160046_2_1_1.jpg?ts=1620821851988","https://static.zara.net/photos///2021/I/0/1/p/7808/160/046/2/w/1920/7808160046_2_2_1.jpg?ts=1620821839280","https://static.zara.net/photos///2021/I/0/1/p/7808/160/046/2/w/1920/7808160046_6_1_1.jpg?ts=1620655538200","https://static.zara.net/photos///2021/I/0/1/p/7808/160/046/2/w/1920/7808160046_6_2_1.jpg?ts=1620655535611","https://static.zara.net/photos///2021/I/0/1/p/7808/160/046/2/w/1920/7808160046_6_3_1.jpg?ts=1620656141718","https://static.zara.net/photos///contents/cm/w/1920/sustainability-extrainfo-label-JL78_0.jpg?ts=1602602200357"]
我不知道你将如何刮它们,但我有兴趣知道答案,当你发现


关于Samuel

我上个星期才开始研究网页抓取,所以我不确定我是否能帮上什么忙,但我确实找到了一些东西

源代码在顶部的脚本中显示了这一点:

_mkt_imageDir = /BASE_IMAGES_URL=(.*?);/.test(document.cookie) && RegExp.$1 || 'https://static.zara.net/photos/';
再往下看:

"originalUrl":"/us/en/fitted-houndstooth-blazer-p07808160.html?v1=108967877&v2=1718115","imageBaseUrl":"https://static.zara.net/photos/"
然后这里的所有图像看起来都是javascript格式的:

[{"@context":"http://schema.org/","@type":"Product","sku":"108967877-046-1","name":"FITTED HOUNDSTOOTH BLAZER","mpn":"108967877-046-1","brand":"ZARA","description":"","image":["https://static.zara.net/photos///2021/I/0/1/p/7808/160/046/2/w/1920/7808160046_1_1_1.jpg?ts=1620821843383","https://static.zara.net/photos///2021/I/0/1/p/7808/160/046/2/w/1920/7808160046_2_1_1.jpg?ts=1620821851988","https://static.zara.net/photos///2021/I/0/1/p/7808/160/046/2/w/1920/7808160046_2_2_1.jpg?ts=1620821839280","https://static.zara.net/photos///2021/I/0/1/p/7808/160/046/2/w/1920/7808160046_6_1_1.jpg?ts=1620655538200","https://static.zara.net/photos///2021/I/0/1/p/7808/160/046/2/w/1920/7808160046_6_2_1.jpg?ts=1620655535611","https://static.zara.net/photos///2021/I/0/1/p/7808/160/046/2/w/1920/7808160046_6_3_1.jpg?ts=1620656141718","https://static.zara.net/photos///contents/cm/w/1920/sustainability-extrainfo-label-JL78_0.jpg?ts=1602602200357"]
我不知道你将如何刮它们,但我有兴趣知道答案,当你发现


关于Samuel,看起来URL位于json文件中,我相信您可以从中获取URL。


这里有一些关于从json中删除URL的信息/代码,看起来URL位于json文件中,我相信您可以从中删除URL。


有一些关于从json中抓取的信息/代码

@samuelhogg值得称赞,因为它找到了
json
,但下面是一个示例spider,展示了如何从页面获取所有图像URL。请注意,您甚至不需要在这里使用splash,我还没有使用splash对其进行测试,但我认为它仍然可以工作

来自scrapy import Spider的

导入json
Zara类(蜘蛛):
name=“zara”
起始URL=[
"https://www.zara.com/us/en/fitted-houndstooth-blazer-p07808160.html?v1=108967877&v2=1718115"
]
def解析(自我,响应):
#查找由@samuelhogg标识的json
data=response.css(“脚本[type='application/ld+json']::text”).get()
#创建一组json中的所有图像
images={json中i的图像。为i[“图像”]中的图像加载(数据)}
#对他们做你想做的!
打印(图像)

@samuelhogg找到了
json
,这是值得称赞的,但下面是一个示例spider,展示了如何从页面获取所有图像URL。请注意,您甚至不需要在这里使用splash,我还没有使用splash对其进行测试,但我认为它仍然可以工作

来自scrapy import Spider的

导入json
Zara类(蜘蛛):
name=“zara”
起始URL=[
"https://www.zara.com/us/en/fitted-houndstooth-blazer-p07808160.html?v1=108967877&v2=1718115"
]
def解析(自我,响应):
#查找由@samuelhogg标识的json
data=response.css(“脚本[type='application/ld+json']::text”).get()
#创建一组json中的所有图像
images={json中i的图像。为i[“图像”]中的图像加载(数据)}
#对他们做你想做的!
打印(图像)

如果是ajax请求,则可能需要花费大量时间重新创建。如果您使用Playwright for Python()自动执行浏览器,这可能会更容易,因为Playwright for Python()允许您获取图像url。如果您使用playrightforpython()自动执行浏览器,这可能会更容易,因为playrightforpython()允许您获取图像url。