2017-04-12 21 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))