从零售商网站获取价格

问题描述:

我正在构建iOS和Android应用程序,用于扫描条形码并从零售商网站显示该书的产品页面。但现在,我只想从该产品页面获取价格,而不是整个页面。从零售商网站获取价格

如何从页面中提取产品的价格,就像RedLaser使用它自己的App一样。

产品页面:http://goo.gl/rDxAg 价格:321卢比

我想是this,它可以在iOS和Android来实现,而无需使用外部服务器。

我是新手,所以任何帮助将不胜感激。

+1

您是否试过联系零售商询问是否有API? – rlemon 2012-04-19 17:53:41

+5

快速搜索表明Flipkart没有可用于访问产品信息(如定价)的(公共)API。你总是可以求助于数据挖掘,这意味着你将拉动产品的页面,并找到相关信息,但这是他们自己的[使用条款]不允许的(http://www.flipkart.com/s/terms) 。当然,如果你想违背这些条款,这些都在你身上。 – birryree 2012-04-19 17:57:10

+0

没有他们没有任何API – 2012-04-19 17:57:22

我正在从事电子商务,有时需要一些CSV我需要从供应商网站上获取数据,您可以编写一个例程,对于某些网站使用这种情况下的一个元素,您可以在这里找到价格:

xpath: //div[3]/div[2]/div/div/div/span 

像本实施例中与硒和Perl:

open (INFO, '>>file.csv') or die "$!"; 
my $sel = Test::WWW::Selenium->new(host => "localhost", 
            port => 4444, 
            browser => "*chrome", 
            browser_url => "http://www.example.com/page.htm"); 
$sel->open_ok("/page.htm"); 
$sel->click_ok("//table[2]/tbody/tr/td/a/img"); 
$sel->wait_for_page_to_load_ok("30000"); 
my $price = $sel->get_text("//div[3]/div[2]/div/div/div/span"); 
print INFO ("$price\n"); 
$sel->go_back_ok(); 

# Close file 
close (INFO); 

可以使用一个类似的功能,用于获取数据,或使用另一种溶液webscraping

+0

你能帮我一个例子,我如何使用上面的CSS – 2012-04-19 18:45:09

+0

谢谢,但我想实现这是一个iOS应用程序,所以我不知道该怎么做 – 2012-04-19 18:54:38

您可以获得产品页面的网址,以提取您可以使用的价格Nokogiri

您首先需要获取页面内容,然后使用某种方法获取价格。您可以通过CSS或XPath

从引入nokogiri的基本例子做到这一点:

require 'nokogiri' 
require 'open-uri' 

doc = Nokogiri::HTML(open('http://www.YOUR_URL_HERE.com')) 
price = doc.at_xpath("//span[@id='fk-mprod-our-id']").text 
+0

你能帮我一个例子吗 – 2012-04-19 18:42:39

+0

那么,我写的例子实际上是做的工作,但它是红宝石,我看到你打算在iOS应用程序中使用这些数据。你为什么添加红宝石标签?你有红宝石服务器端代码提供响应你的iOS应用程序? – Christian 2012-04-19 18:45:11

+0

不好意思,抱歉那个Ruby标签。请你能告诉我如何在iOS或CSS中实现 – 2012-04-19 18:50:31

如果由零售商提供你可以使用一个API。搜索它!
如果没有可用的API,则可以向零售商服务器请求该页面,并将HTML解析为XML以获取包含价格的元素。然而,如果零售商改变它的网站,这可能会被打破。另外,问他是否允许你使用他的价格。

如果网站的官方API不可用,那么您必须解析下载的html以获取您想要的数据。有许多第三方的html解析器库可用于iOS和Android。

对于iOS,请查看parsing HTML on the iPhone

对于Android,请查看Parse HTML in Android

这两个链接中都有一些代码示例向您展示了如何进行此操作。

希望有所帮助。

<span class="price final-price our fksk-our" id="fk-mprod-our-id"> 
    Rs. 
    <span class="small-font"> </span> 
    315 
</span> 

我注意到了这一点HTML是有你的Price tag

我会建议你使用jSoupDownload from here

现在使用这个库,解析更容易,所有你需要做的就是。

Document doc = null; 

    try{ 
     doc = Jsoup.connect("You page URL comes here").get(); // get url contents 
    }catch(IOException e){ 
     // Handle exception here. 
    } 

String priceHtml = doc.select("#fk-mprod-our-id").get(0).html().trim(); // get specific tag 
System.out.println("html fetched: "+priceHtml); //print to check if right tag is selected 
priceHtml = priceHtml.replace("((<span(.)*?>)(.)*(</span>))", ""); // replace inner span using regex. 
System.out.println("My Price tag: "+priceHtml); 

我没有测试过上面的代码,但它必须工作。它可能包含小错误。但只需一点点努力就可以实现。

Parsing数据有时需要时间。你必须在后台执行。在后台解析完成后,将数据发布到您的UI线程。

编辑:

环绕你connect通话用try catch

,并确保您已在androidManifest.xml

<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" /> 
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" /> 
<uses-permission android:name="android.permission.INTERNET" /> 
+0

我得到'未处理的异常类型IOException' – 2012-07-08 09:45:05

+0

请检查http://stackoverflow.com/a/4941653/689557 – 2012-07-08 09:53:55

+0

请检查编辑。 – 2012-07-08 10:09:30

设置下列权限的的jsfiddle演示在这个简短的介绍后提供。

您正在使用的当前产品页面包含太多数据以获取价格。

因为加载速度更快,所以最好使用Flipkart.com移动网站。

参考文献1:http://www.flipkart.com/m/books

既然你的应用程序必须已经使用PID号的书,你可以查询移动网页搜索!在你的问题的链接是一本书,pid9780224060875

参考2:http://www.flipkart.com/m/search-all?query=9780224060875

在该页面中,您可以看到这本书的价格是Span Tag内侧的spClass Name

<!-- Fragment of product price format --> 
<div id="productpage-price"> 
<p> 
    Price: <del> Rs. 350</del> 
    <span class="sp">Rs. 263</span> 
</p> 
</div> 

然后,使用jQuery,你可以得到你需要像这样的价格数据:

// Begin section to show random methods to use HTML values 

    // Get the HTML of "Rs. 263" and store it in variable as a string. 
    var priceTextAndLabel = $('#productpage-price').find('span.sp').text(); 

    // Get the HTML of "Rs. 263" and slice off the first 4 characters of "Rs. " leaving "263" only. 
    // Adjust the .slice() if possiable that number is after decimal point. Example: "Rs.1000" 
    var priceText = $('#productpage-price').find('span.sp').text().slice(4); 

    // As above but convert text string of "263" to a number (to allow JavaScript Math if req.). 
    // The value 10 seen below reflects decimal base 10 (vs, octal(8) example) for .parseInt(); 
    var priceNumber = parseInt($('#productpage-price').find('span.sp').text().slice(4),10); 

    // Firefox with Firebug Console will show BLACK characters for "Rs. 263" since it's a "string". 
    console.log(priceTextAndLabel); 

    // Firefox with Firebug Console will show BLACK characters for "263" since it's a "string". 
    console.log(priceText); 

    // Firefox with Firebug Console will show BLUE characters for "263" since it's a "number". 
    console.log(priceNumber); 

// End section to show random method to use HTML values 

好了,现在的关键组成部分......你一直在等待的部分.. 。那就是如何在你的目标(甚至网页)中使用flipkart.com搜索网址。

可悲的答案是你不能。他们不仅禁止它,而且阻止它。这意味着你不能iframe的网页,甚至使用AJAX加载搜索URL。

为了说明上面的失败,这里有一个jsFiddle Demo,当用浏览器控制台查看时,在AJAX连接完成后没有任何东西被获得。

参考3:jsFiddle flipkart.com Demo


推荐的解决方案:这里有只有一个真正的选择。使用具有可用API的书店。该API以及可能的特权访问API密钥将允许您成为合法的商店代表。

也许他们最终会有API提供。现在,他们有一个Mobile App Store有MP3收藏。看到MP3如何反映Audio Books,它们也可能是时间问题,然后他们也会提供一个用于图书的Mobile App Store。