京东商城手机频道商品价格信息的抓取
2014-11-19 16:52
197 查看
在做页面解析时,最大难度在于对动态数据的抓取,特别是由ajax加载的内容。目前对这方面的处理还没很好的解决方案,,虽然有htmlunit之类的模拟浏览器运行工具包,但是其效率以及准确性远远不能满足实际生产的需要。通常情况,我们需要对特定的场景进行特殊性分析、比如,一个商品详细页的加载过程,可能存在向服务端多个http请求。所以我们对商城商品内容的解析过程中,需要对价格等动态加载的内容进一步的获取。下面给大家分享下我抓取京东商城手机频道商品价格的整个过程。以http://item.jd.com/1057746.htm这个链接的商品为例:
![](http://img.blog.csdn.net/20141119224818381?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQva20xMjE4/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center)
商品1057746的详细页
![](http://img.blog.csdn.net/20141119230705498?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQva20xMjE4/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center)
商品1057746源代码的价格代码段
在查看源代码时,发现价格没有内容。这是因为价格内容是通过浏览器解析页面过程,通过js向服务端再次发送请求,根据结果修改html标签内容,达到动态加载加载价格的效果。那么,我们如何才能获取到价格信息呢?
1.首先,使用抓包工具(这里我使用fiddler)抓取访问http://item.jd.com/1057746.html页面所发送出去的所有请求。逐个请求查看其返回的结果,找到返回内容中包含价格信息的请求。请求的链接:http://rs.jd.com/accessorie/newServiceWhite.jsonp?sku=1057746&callback=Recommend.cbNewFittings
![](http://img.blog.csdn.net/20141120093303531?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQva20xMjE4/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center)
2.然后,使用httpclient设置header,模拟浏览器向服务器发送http请求。对返回的结果进行分析,截下价格的那部分,这样就可以得到价格信息。当然,也可以获取其它的数据。
相对应的代码:
![](http://img.blog.csdn.net/20141120101708109?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQva20xMjE4/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center)
总结:我们在抓取动态页面时,使用抓包工具分析动态信息所在的url请求,然后采取httpclient获取到所需信息。
商品1057746的详细页
商品1057746源代码的价格代码段
在查看源代码时,发现价格没有内容。这是因为价格内容是通过浏览器解析页面过程,通过js向服务端再次发送请求,根据结果修改html标签内容,达到动态加载加载价格的效果。那么,我们如何才能获取到价格信息呢?
1.首先,使用抓包工具(这里我使用fiddler)抓取访问http://item.jd.com/1057746.html页面所发送出去的所有请求。逐个请求查看其返回的结果,找到返回内容中包含价格信息的请求。请求的链接:http://rs.jd.com/accessorie/newServiceWhite.jsonp?sku=1057746&callback=Recommend.cbNewFittings
2.然后,使用httpclient设置header,模拟浏览器向服务器发送http请求。对返回的结果进行分析,截下价格的那部分,这样就可以得到价格信息。当然,也可以获取其它的数据。
相对应的代码:
import java.io.IOException; import java.util.regex.Matcher; import java.util.regex.Pattern; import org.apache.http.HttpEntity; import org.apache.http.client.ClientProtocolException; import org.apache.http.client.methods.CloseableHttpResponse; import org.apache.http.client.methods.HttpGet; import org.apache.http.impl.client.CloseableHttpClient; import org.apache.http.impl.client.HttpClients; import org.apache.http.util.EntityUtils; public class JDPhonePriceParser { public static void parserPrice() throws ClientProtocolException, IOException{ CloseableHttpClient httpclient=HttpClients.createDefault(); String url="http://rs.jd.com/accessorie/newServiceWhite.jsonp?sku=1057746&callback=Recommend.cbNewFittings";//这里直接修改sku的值就 // 可以获取其它手机的价格信息 HttpGet httpGet= new HttpGet(url); httpGet.addHeader("Accept","*/*"); httpGet.addHeader("Accept-Encoding","gzip, deflate"); httpGet.addHeader("Accept-Language","zh-cn,zh;q=0.8,en-us;q=0.5,en;q=0.3"); httpGet.addHeader("User-Agent","Mozilla/5.0 (Windows NT 5.1; rv:33.0) Gecko/20100101 Firefox/33.0"); CloseableHttpResponse response=httpclient.execute(httpGet); HttpEntity entity=response.getEntity(); String str=EntityUtils.toString(entity); Pattern p=Pattern.compile("\"price\":\"[0-9]{1,6}.[0-9]{2}\""); Matcher m=p.matcher(str); if(m.find()){ String priceStr=m.group(0); String []array=priceStr.split(":"); if(array!=null&&array.length==2){ System.out.println(array[1].replace("\"", "")); } } } public static void main(String[]args) throws ClientProtocolException, IOException{ JDPhonePriceParser.parserPrice(); } }
总结:我们在抓取动态页面时,使用抓包工具分析动态信息所在的url请求,然后采取httpclient获取到所需信息。
相关文章推荐
- <四>、python爬虫抓取购物网站商品信息--图片价格名称
- 用手机短信查询商品的价格信息
- python抓取京东商城的商品名称和价格
- fiddler抓取手机数据信息
- 利用淘宝给定id,php编写抓取淘宝价格或其他信息
- python抓取京东价格分析京东商品价格走势
- 【实例】python 使用beautifulSoup 抓取网页正文 以淘宝商品价格为例
- python抓取京东价格分析京东商品价格走势
- ECSHOP全站调用购物车显示商品图片,价格,数量,总价等详细信息
- 教您使用java爬虫gecco抓取JD全部商品信息(三)
- scrapy-抓取天猫女装销量前60的商品名称、价格、链接及打开连接后的店铺名称和链接
- 例题:超市买东西的程序。输入商品信息,计算价格,价格满多少元打折。这道题用到结构体,集合,for循环,if else语句
- java写一个类,包括信息为手机的型号,价格和颜色。功能为打电话给某人和发信息给某人
- 京东、商品信息(价格)、用户评论、用户信息采集
- 配合scrapy,用请求方式抓取一些网站内容。例如抓取360手机应用APP信息。
- 抓取淘宝天猫的商品的促销价格
- ECSHOP全站调用购物车显示商品图片,价格,数量,总价等详细信息
- 网络爬虫: 从allitebooks.com抓取书籍信息并从amazon.com抓取价格(1): 基础知识Beautiful Soup
- requests模块实践:爬取淘宝商品信息和价格
- Python抓取聚划算商品分析页面获取商品信息并以XML格式保存到本地