c# JD快速搜索工具,2015分析JD搜索报文,模拟请求搜索数据,快速定位宝贝排行
分析JD搜索报文
搜索关键字 女装
第二页,分2次加载。 rt=1&stop=1&click=&psort=&page=3
?keyword=%E5%A5%B3%E8%A3%85&enc=utf-8#keyword=%E5%A5%B3%E8%A3%85&enc=utf-8&qrst=UNEXPAND&as=1&qk=title_key%2C%2C%E5%A5%B3%E8%A3%85&rt=1&stop=1&sttr=1&cid2=1343&click=2-1343&psort=&page=3
?keyword=%E5%A5%B3%E8%A3%85&enc=utf-8&qrst=UNEXPAND&as=1&qk=title_key%2C%2C%E5%A5%B3%E8%A3%85&rt=1&stop=1&sttr=1&cid2=1343&click=2-1343&psort=&page=4&scrolling=y&start=30&log_id=1422445952.81302&tpl=3_L&vt=2
主要参数:
keyword=女装 //搜索关键字
enc=utf-8
qrst=UNEXPAND
pr=9706%28288%2C303%29%3B9712%28179%2C242%29%3B //有的关键字还有pr参数
as=1
qk=title_key%2C%2C女装 //title_key%2C%2C加关键字
rt=1
stop=1
sttr=1
cid2=1343 //跟类目有关,我们的业务不需要关注它
click=2-1343
psort=
page=4 //页数,3第二页上半数据,4第二页下半数据,每个30条数据。
scrolling=y
start=30 //测试没效果默认30吧
log_id=1422445952.81302 //时间
tpl=3_L //样式,这里替换成1_M,方便采集数据。
vt=2 //样式,这里固定2即可。
模拟解析说明:
第一步,模拟请求?keyword=搜索关键字&enc=utf-8
在正文中取出“SEARCH.top_url = ‘search?keyword=……‘”链接地址和“SEARCH.click = ‘‘”。
SEARCH.top_url =
‘search?keyword=%E5%A5%B3%E8%A3%85&enc=utf-8&qrst=UNEXPAND&as=1&qk=title_key%2C%2C%E5%A5%B3%E8%A3%85&rt=1&stop=1&sttr=1‘;
SEARCH.list_category = ‘‘;
SEARCH.click = ‘2-1343‘;
第二步,修改访问地址,删除重复#keyword=123&enc=utf-8(必须),
search? 替换s.php?,添加参数cid2、click、page、scrolling、start、log_id、tpl、vt。
第三步,模拟访问新地址,HOST:search.jd.com,获取正文(包含商品标题、图片地址、评价、shop_id、sku)。
这里通过正则取html a标签等信息太复杂了,给大家推荐一款插件HtmlAgilityPack.1.4.6,使用方法就不在这里细说了。
第四步,模拟请求,参数ids,ids多个值用“%2C”分割。
例:?ids=11111%2C2222,参数值为shop_id。
返回json数据,反序列化可获取店铺名称。
/// <summary>
/// 店铺model
/// </summary>
public class ShopName
{
public string id { get; set; } //shop_id
public string title { get; set; } //店铺名字
public string url { get; set; } //店铺地址
public int venderId { get; set; } //
}
注意:传30个shop_id不是一定返回30个数据,相同店铺名称相同id值,自动过滤重复shop_id。
第五步,模拟请求,参数skuids、area、type,callback、_,skuids多个值用“,”分割,
例:?skuids=J_1229193627,J_1083650580&area=&type=1&callback=&_=1422292699860
返回json数据,反序列化可获取商品价格和定价。
/// <summary>
/// 价格model
/// </summary>
public class Price
{
public string id { get; set; } //price_id
public string p { get; set; } //价格
public string m { get; set; } //定价
}
注意:反序列化之前要去掉两边括号,去除bom报头。返回“skuids input error\n”表示查询出错。
=======================================================
分析JD搜索报文 2015.8.11更新
搜索关键字 女装
搜索女装:?keyword=%E5%A5%B3%E8%A3%85&enc=utf-8&wq=%E5%A5%B3%E8%A3%85&pvid=aro2g7di.6zerm5
第二页链接:<a href="search?keyword=%E5%A5%B3%E8%A3%85&enc=utf-8&qrst=1&ps=addr&rt=1&stop=1&sttr=1&cid2=1343&page=2#filter">2</a>
跳转链接:?keyword=%E5%A5%B3%E8%A3%85&enc=utf-8&wq=%E5%A5%B3%E8%A3%85&pvid=aro2g7di.6zerm5#keyword=%E5%A5%B3%E8%A3%85&enc=utf-8&qrst=1&ps=addr&rt=1&stop=1&sttr=1&cid2=1343&click=2-1343&psort=&page=3
后半页链接:?keyword=%E5%A5%B3%E8%A3%85&enc=utf-8&qrst=1&ps=addr&rt=1&stop=1&sttr=1&cid2=1343&click=2-1343&psort=&page=4&scrolling=y&start=30&log_id=1439304095.81302&tpl=3_L&vt=2
每页,分2次加载,1排4个,一页60个商品,每次加载30个商品,默认访问第一页,跟回到第一页不一定结果都一样,有些关键字会附加ev参数等,结果会有不同的变化。
Search主要参数:
keyword=女装 //搜索关键字
enc=utf-8
wq=女装
pvid= 2015版新增加的,经测试没有对搜索结果有任何影响
#keyword=女装
enc=utf-8
qrst=1
ps=addr
rt=1
stop=1
sttr=1
cid2=1343 //全部结果=》导航, 不指定它会改变最终的搜索结果,跟筛选商品有关,很重要
click=2-1343
psort=
page=4 //页数,3第二页上半数据,4第二页下半数据,每个30条数据。
ev= //有些关键字还会产生ev参数,会改变当前搜索结果
s.php主要参数:
keyword=女装 //*搜索关键字
enc=utf-8 //*
qrst=1
ps=addr
rt=1
stop=1
sttr=1
cid2=1343 //*这里值通过按关键字搜索返回的报文中获取
click=2-1343 //这个参数测试不会改变搜索结果
psort=
page=4 //*页数,3第二页上半数据,4第二页下半数据,每个30条数据。
scrolling=y
start=30 //测试没效果
log_id=1439234928.52874 //时间
tpl=3_L //*默认样式 有些关键字是3_M,这里统一用3_L,方便采集数据。
vt=2
备注:加*部分是必须的。
模拟解析说明:
通过s.php也可以获得上半页数据,结果相同,数据量小,更适合快速批量查询
第一步,模拟请求?keyword=搜索关键字&enc=utf-8&pvid=kx1x86di.u737zi
在正文中取出第2页超链接地址,使用正则取href值,并截取search?……&page=2#filter中间部分。
添加s.php主要参数,&psort=&page=4&scrolling=y&start=30&log_id=1439304095.81302&tpl=3_L&vt=2
<a[\s]+onclick[\s]*=[\s]*"[\s]*searchlog\(1, 2, 0, 56\);"[\s]*href[\s]*=[\s]*"search\?(?<url>.+)&page=2#filter">2</a>[\s\S]+
第二步,模拟请求?新的连接
HOST:search.jd.com,获取正文(包含商品标题、图片地址、评价、shop_id、sku)。
这里通过正则取html a标签等信息太复杂了,给大家推荐一款插件HtmlAgilityPack.1.4.6,使用方法就不在这里细说了。
第三步,模拟请求,参数ids,ids多个值用“%2C”分割。
例:?ids=11111%2C2222,参数值为shop_id。
返回json数据,反序列化可获取店铺名称。
?ids=56210
[{"id":"56210","title":"MOMO\u5973\u88c5\u4e13\u8425\u5e97","url":"http:\/\/mengbuluo.jd.com","venderId":60335}]
/// <summary>
/// 店铺model
/// </summary>
public class ShopName
{
public string id { get; set; } //shop_id
public string title { get; set; } //店铺名字
public string url { get; set; } //店铺地址
public int venderId { get; set; } //
}
注意:传30个shop_id不是一定返回30个数据,,相同店铺名称相同id值,自动过滤重复shop_id。
注意:反序列化之前要去掉两边括号,去除bom报头。返回“skuids input error\n”表示查询出错。
好了,现在我们通过指定关键字模拟请求返回数据中,拿到所有宝贝标题、宝贝价格、宝贝店铺名、评价等信息。
接下来就是使用C#编写小工具来实现我们需求的业务逻辑,可通过宝贝关键字,店铺名称,价格范围,访问页数范围等。
HttpHelper.cs
温馨提示: 本文由Jm博客推荐,转载请保留链接: https://www.jmwww.net/file/67940.html
- 上一篇:[CLR via C#]委托
- 下一篇:git svn cygwin