当前位置:首页 > Windows程序 > 正文

c# JD快速搜索工具,2015分析JD搜索报文,模拟请求搜索数据,快速定位宝贝排行

2021-03-26 Windows程序

分析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