某电商商品属性获取分析

为完成一个小型爬虫项目,在并未使用该平台提供的API状况下,细致分析了国内某著名电商网站商品属性的获取思路和方法,兹此记录分享,学习交流。javascript

静态页面部分

为了获取静态页面部分的内容,须要使用firefox的开发者功能禁用javascript,如图
firefox设置
勾选"Disable JavaScript"。刷新页面后可见。经过静态页面可获取标题,商品ID,分类号,商品URL,图片url等内容。可直接使用正则表达式或xpath等工具分析得到,这里再也不赘述。java

动态内容部分

该网站大部分商品属性都是经过ajax动态获取的。仍是经过浏览器来分析。取消勾选"Disable JavaScript"后,使用"Network"工具可对服务器响应的包进行抓包和分类。为避免反复从新加载页面时缓存的影响,勾选"Disable Cache"选项。先打开"Network"界面,而后刷新页面,可得到加载过程的抓包内容。ajax请求返回的数据为json或js类型。例如:
某json数据
url为python

http://p.3.cn/prices/get?callback=cnp&type=1&area=1_72_4137&pdtk=&pduid=1516989398&pdpin=&pdbp=0&skuid=J_1743187

可在network工具箱内查看其response内容为
图片描述
对照页面内容后发现其中p字段正是商品价格数据!
经过直接打开连接获得json串为ajax

cnp([{"id":"J_1743187","p":"499.00","m":"549.00"}]);

此response中带有回调函数名"cnp",观察在url中也有一个相同字段。遂尝试在url中去掉该字段,从新请求后正则表达式

http://p.3.cn/prices/get?type=1&area=1_72_4137&pduid=1516989398&pdbp=0&skuid=J_1743187

得到json:json

[{"id":"J_1743187","p":"499.00","m":"549.00"}]

继续尝试删除请求中的get参数,最终发现可用浏览器

http://p.3.cn/prices/mgets?skuids=J_1743187

正常获取到相同的数据。
python解析代码:缓存

import urllib2
import json

p=urllib2.urlopen('http://p.3.cn/prices/get?type=1&area=1_72_4137&pduid=1516989398&pdbp=0&skuid=J_1743187').read()
p_json=json.loads(p)
price=p_json['p']

获取到价格数据,方便了自动化生成。其他不能经过静态内容获取的属性都可类比分析尝试得到。服务器

相关文章
相关标签/搜索