@ -16,6 +16,8 @@ using Utils;
using System.Threading.Tasks ;
using System.Threading.Tasks ;
using System.IO ;
using System.IO ;
using System.IO.Compression ;
using System.IO.Compression ;
using System.Text.RegularExpressions ;
using System.Diagnostics ;
namespace JdShopListener
namespace JdShopListener
{
{
@ -98,9 +100,86 @@ namespace JdShopListener
InitWeb ( ) ;
InitWeb ( ) ;
} ) . ContinueWith ( ( state ) = > {
} ) . ContinueWith ( ( state ) = > {
LoadHYItems ( ) ;
Test ( ) ;
// LoadHYItems();
} ) ;
}
private void Test ( )
{
InitLoginCookie ( ) ;
Stopwatch watch = new Stopwatch ( ) ;
watch . Start ( ) ;
for ( int i = 1 ; i < = 1 0 0 ; i + + )
{
try
{
var list = GetSearchList ( i ) ;
list . ForEach ( skuId = >
{
try
{
var detail = GetItemDetail ( skuId ) ;
Thread . Sleep ( 1 0 0 0 ) ;
var sku = new SkuModel ( )
{
SkuId = skuId
} ;
//主图
string src = detail . product . src ;
var catIds = detail . product . cat ;
List < int > cats = new List < int > ( ) ;
foreach ( var catId in catIds )
{
cats . Add ( ( int ) catId ) ;
}
string cat = string . Join ( "," , cats ) ;
//标题
string title = detail . product . name ;
string shopId = detail . product . shopId ;
string vid = detail . product . venderId ;
sku . ImgUrl = "http://img11.360buyimg.com/n1/" + src ;
sku . Title = title ;
sku . Cat = cat ;
sku . ShopId = shopId ;
sku . VenderId = vid ;
GetWareBusiness ( sku ) ;
Debug . WriteLine ( $"{skuId}采集完成!{DateTime.Now}" ) ;
Thread . Sleep ( 2 0 0 0 ) ;
}
catch
{
}
} ) ;
} ) ;
}
}
catch ( Exception ex )
{
}
Thread . Sleep ( 1 0 0 0 ) ;
}
watch . Stop ( ) ;
Debug . WriteLine ( "100页全面采集花费:" + watch . ElapsedMilliseconds + "毫秒!!!" ) ;
}
private string _ InitText = "正在加载慧眼竞品商品数据, 请稍后..." ;
private string _ InitText = "正在加载慧眼竞品商品数据, 请稍后..." ;
@ -893,7 +972,7 @@ namespace JdShopListener
string html = http . GetStringAsync ( $"https://item.jd.com/{skuId}.html" ) . Result ;
string html = http . GetStringAsync ( $"https://item.jd.com/{skuId}.html" ) . Result ;
if ( html . Contains ( "passport.jd.com/new/login.aspx" ) | | html . Contains ( "//item.jd.com/html/token.html?returnUrl=" ) )
if ( html . Contains ( "passport.jd.com/new/login.aspx" ) | | html . Contains ( "//item.jd.com/html/token.html?returnUrl=" ) | | html . Contains ( "passport.jd.com/uc/login" ) )
{
{
AddLog ( "登录失效,触发验证!!重新尝试获取登录状态" ) ;
AddLog ( "登录失效,触发验证!!重新尝试获取登录状态" ) ;
InitLoginCookie ( ) ;
InitLoginCookie ( ) ;
@ -1213,13 +1292,19 @@ namespace JdShopListener
var json = client . GetStringAsync ( url ) . Result ;
var json = client . GetStringAsync ( url ) . Result ;
if ( json . Contains ( "passport.jd.com/new/login.aspx" ) )
if ( json . Contains ( "passport.jd.com/new/login.aspx" ) | | json . Contains ( "passport.jd.com/uc/login" ) )
{
{
AddLog ( "登录失效,触发验证!!重新尝试获取登录状态" ) ;
AddLog ( "登录失效,触发验证!!重新尝试获取登录状态" ) ;
InitLoginCookie ( ) ;
InitLoginCookie ( ) ;
return GetWareBusiness ( model ) ;
return GetWareBusiness ( model ) ;
}
}
if ( json . Length < 1 0 0 )
{
}
json = json . Remove ( 0 , "jQuery6834366(" . Length ) ;
json = json . Remove ( 0 , "jQuery6834366(" . Length ) ;
json = json . Remove ( json . Length - 1 , 1 ) ;
json = json . Remove ( json . Length - 1 , 1 ) ;
@ -1228,6 +1313,67 @@ namespace JdShopListener
return data ;
return data ;
}
}
private List < string > GetSearchList ( int page )
{
int pageSize = 2 5 ;
int s = ( page - 1 ) * pageSize + 1 ;
string url = $"https://search.jd.com/s_new.php?keyword=%E9%9E%8B%E5%AD%90&wq=%E9%9E%8B%E5%AD%90&pvid=8c8009784e07405f944330cee2f375b3&page={page}&s={s}&click=0" ;
HttpClient client = new HttpClient ( ) ;
client . DefaultRequestHeaders . Add ( "Cookie" , JDCookie ) ;
client . DefaultRequestHeaders . Add ( "User-Agent" , "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.87 Safari/537.36 SE 2.X MetaSr 1.0" ) ;
client . DefaultRequestHeaders . Add ( "Accept" , "*/*" ) ;
client . DefaultRequestHeaders . Add ( "sec-ch-ua" , @""" Not A;Brand"";v=""99"", ""Chromium"";v=""102"", ""Google Chrome"";v=""102""" ) ;
client . DefaultRequestHeaders . Add ( "sec-ch-ua-mobile" , "?0" ) ;
client . DefaultRequestHeaders . Add ( "X-Requested-With" , "XMLHttpRequest" ) ;
client . DefaultRequestHeaders . Add ( "sec-ch-ua-platform" , @"""Windows""" ) ;
client . DefaultRequestHeaders . Add ( "Referer" , "https://search.jd.com/Search?keyword=%E9%9E%8B%E5%AD%90&wq=%E9%9E%8B%E5%AD%90&pvid=8c8009784e07405f944330cee2f375b3&page=5&s=116&click=1" ) ;
/ *
sec - ch - ua : " Not A;Brand" ; v = "99" , "Chromium" ; v = "102" , "Google Chrome" ; v = "102"
X - Requested - With : XMLHttpRequest
sec - ch - ua - mobile : ? 0
User - Agent : Mozilla / 5.0 ( Windows NT 1 0.0 ; Win64 ; x64 ) AppleWebKit / 5 3 7.36 ( KHTML , like Gecko ) Chrome / 1 0 2.0 . 0.0 Safari / 5 3 7.36
sec - ch - ua - platform : "Windows"
Sec - Fetch - Site : same - origin
Sec - Fetch - Mode : cors
Sec - Fetch - Dest : empty
Referer : https : //search.jd.com/Search?keyword=%E9%9E%8B%E5%AD%90&wq=%E9%9E%8B%E5%AD%90&pvid=8c8009784e07405f944330cee2f375b3&page=5&s=116&click=1
Accept - Encoding : gzip , deflate , br
Accept - Language : zh - CN , zh ; q = 0.9
* /
var json = client . GetStringAsync ( url ) . Result ;
if ( json . Contains ( "passport.jd.com/new/login.aspx" ) | | json . Contains ( "passport.jd.com/uc/login" ) )
{
AddLog ( "登录失效,触发验证!!重新尝试获取登录状态" ) ;
InitLoginCookie ( ) ;
return GetSearchList ( page ) ;
}
Regex reg = new Regex ( @"data-sku=""([0-9]{1,})""" ) ;
List < string > data = new List < string > ( ) ;
var matchs = reg . Matches ( json ) ;
foreach ( Match match in matchs )
{
if ( match . Success )
{
data . Add ( match . Groups [ 1 ] . Value ) ;
}
}
return data ;
}
/// <summary>
/// <summary>
/// 将时间戳转换为时间
/// 将时间戳转换为时间
/// </summary>
/// </summary>