我從慾望網站獲取所有詳細信息,但無法獲取某些特定信息,請爲此指導我。無法從網站獲取列表值
targeted domain: https://shop.adidas.ae/en/messi-16-3-indoor-boots/BA9855.html
my code is
response.xpath('//ul[@class="product-size"]//li/text()').extract()
need to fetch data!!!
我從慾望網站獲取所有詳細信息,但無法獲取某些特定信息,請爲此指導我。無法從網站獲取列表值
targeted domain: https://shop.adidas.ae/en/messi-16-3-indoor-boots/BA9855.html
my code is
response.xpath('//ul[@class="product-size"]//li/text()').extract()
need to fetch data!!!
通常電子商務網站在頁面源代碼中使用json格式的數據,然後將javscript在用戶端解壓縮。
在這種情況下,您可以打開禁用JavaScript的頁面源代碼並搜索關鍵字(如特定大小)。
我在這種情況下,發現它可以使用正則表達式中找到:
import re
import json
data = re.findall('window.assets.sizesMap = (\{.+?\});', response.body_as_unicode())
json.loads(data[0])
Out:
{'16': {'uk': '0k', 'us': '0.5'},
'17': {'uk': '1k', 'us': '1'},
'18': {'uk': '2k', 'us': '2.5'},
...}
編輯:更準確地說,你可能想要得到的JSON的不同部分,但還是回答或多或少是相同的:
data = re.findall('window.assets.sizes = (\{(?:.|\n)+?\});', response.body_as_unicode())
json.loads(data[0].replace("'", '"')) # replace single quotes to doubles
我在應用您的代碼時遇到錯誤。 'IndexError Traceback(last recent call last)
似乎你的正則表達式是不同的,我的是''window.assets.sizes =(\ {(?:。| \ n )+?\});''vs你的''window.assets.sizes =(\ {。+?\});''。 – Granitosaurus
sir @Granitosaurus你能幫我解決飛濺問題嗎?機器來完成這個任務,我嘗試過但是不能完成它 –
您想要獲取的數據是從javascript中加載的。它在標籤class="js-size-value "
中明確表示。
如果你想得到它,你將需要使用渲染服務。我建議你使用Splash,安裝簡單,使用簡單。你將需要碼頭安裝飛濺。
雖然這是一個很好的懶惰選項,但它遠非必要。通過挖掘一下,你可以在scrapy中用python複製javascript。 – Granitosaurus
是的,我同意。我會挖掘更多之前使用splash splash.Thanks的提示:-) –
@Blanquer Adrien意味着可能使用scrapy獲得JavaScript基礎數據。 –
它從javascript加載。 – mkHun
@mkHun請你給我**指導**完成任務。謝謝 –
在查看頁面源碼檢查下面的JS變量'window.assets.sizesMap'。 – mkHun