2017-04-12 41 views
-1

我想從一個名爲flipkart的電子商務網站上刮取定價數據,我嘗試使用帶有casperjs(nodejs實用程序)和類似庫的Beautifulsoup,但沒有一個足夠好。如何從具有變化結構的網站上刮取價格?

以下是URL和結構。 https://www.flipkart.com/redmi-note-4-gold-32-gb/p/itmer37fmekafqct

enter image description here

問題是佈局...有什麼辦法來解決這個問題?

P.S:無論如何,我可以將機器學習應用於獲取定價數據而不需要知道複雜的數學嗎?我甚至從哪裏開始?

+0

'soup.find( '格',{ '類': '_1vC4OE _37U4_g'})。get_text()'莫比?你能發佈你的代碼嗎? –

+0

問題在於類名是動態的,每天都會更新。他們甚至改變了該部分的佈局! – user3407278

+0

您應該構建XPath的方式不是依賴於類,而是依賴於要匹配元素的內容('node()')。 'data-reactid'也會改變嗎? – Severin

回答

0

您應該以某種方式構建XPath,以便它不依賴於類,而是依賴於要匹配元素的內容(node())。如果不改變,你也可以匹配data-reactid

對於由數據reactid股利匹配:

//div[@data-reactid=220] 

還是基於它的位置在div匹配:

//span[child::img[@src="//img1a.flixcart.com/www/linchpin/fk-cp-zion/img/fa_8b4b59.png"]]/preceding-sibling::div 

假設img_path不會改變你的安全側。

0

由於動態更改導致無法使用xpath,因此可能會嘗試使用正則表達式在頁面上的script標記中查找價格。 事情是這樣的:

import requests 
import re 

url = "https://www.flipkart.com/redmi-note-4-gold-32-gb/p/itmer37fmekafqct" 
r = requests.get(url) 
pattern = re.compile('prexoAvailable\":[\w]+,\"price\":(\d+)') 
result = pattern.search(r.text) 
print(result.group(1))