我正在尝试抓取此page,当我执行scrapy shell "https://redsea.com/en/apple-iphone-x-64gb-silver.html"
时,它会下载html页面,我可以在浏览器中使用view(response)
查看下载的html:
但是当我尝试获取任何数据产品名称时,例如response.css('.page-title')
,它会给我空响应:
使用scrapy刮取使用rest-api获取数据的网站只需下载没有数据的网站结构html,scrapy无法获取该数据是有道理的。但在这种情况下,scrapy会使用数据下载html文件,但无法使用css或xpaths读取它。我不明白这种行为。
答案 0 :(得分:2)
但是在这种情况下,scrapy会下载包含数据的html文件,但无法使用css或xpaths读取它。
当您在浏览器中打开HTML时,JavaScript并没有通过单独的URL或JavaScript中的硬编码值将内容加载到DOM中,因此您可以使用{ {1}}。
如果您检查实际的HTML内容(例如,在浏览器中打开页面源,在Firefox中打开view(response)
),则会看到所需的数据根本不存在或在{{1 }}元素。
打开网络浏览器开发人员工具的“网络”标签,强制重新加载页面(在Firefox中为Ctrl+U
),并查看在后台执行的其他请求,其中之一可能具有所需数据。
然后,您可以让Scrapy执行类似于在后台进行的请求。