1. 程式人生 > >京東手機銷售價格抓取

京東手機銷售價格抓取

名稱 comment err write reat ces pre vivo rect

   /// <summary>
        /// 京東手機銷售價格抓取
        /// </summary>
        private static void GetPhonePrice ( object querry)
        {
            var querry1=querry as Tuple<int,int>;
            //HttpHelper helper=new HttpHelper();
            HttpItem item=new HttpItem()
            {
                Method
="GET" }; List<PhonePrice> list=new List<PhonePrice>(); for ( var i = querry1.Item1 ; i < querry1.Item2; i++ ) { item.URL = "https://list.jd.com/list.html?cat=9987,653,655&page=" + i + "&sort=sort_rank_asc&trans=1&JL=6_0_0#J_main
"; var result=helper.GetHtml(item).Html; HtmlDocument doc=new HtmlDocument(); doc.LoadHtml ( result ); var info=doc.DocumentNode.SelectNodes("//div[@class=‘gl-i-wrap j-sku-item‘]"); List<PhonePrice> phoneList=info.Select(p=>new
PhonePrice { PhoneName =p.InnerText.Replace(" ","").Replace("<","").Replace(">","").Replace("關註","").Replace("\n",""), SkuId=p.Attributes["data-sku"].Value } ).ToList(); var skuList=info.Select(p=>p.Attributes["data-sku"].Value).ToList(); string searchSku="https://p.3.cn/prices/mgets?callback=jQuery1214924&ext=11000000&pin=&type=1&area=22_1930_4284_0&skuIds="; for ( var j = 0 ; j < skuList.Count ( ) ; j++ ) { if ( j != skuList.Count ( ) - 1 ) searchSku += "J_" + skuList [ j ] + ","; else searchSku += "J_" + skuList [ j ] + "&pdbp=0&pdtk=&pdpin=&pduid=1523417466534118232925&source=list_pc_front&_=1523501043677"; } item.URL = searchSku; var result1=helper.GetHtml(item).Html.Replace("jQuery1214924(","").Replace(");",""); var priceJArray=JsonConvert.DeserializeObject<JArray>(result1); for ( var k = 0 ; k < priceJArray.Count ; k++ ) { var sku_id=priceJArray[k]["id"].ToString().Replace("J_",""); if ( sku_id == phoneList [ k ].SkuId ) { phoneList [ k ].Price = priceJArray [ k ] [ "p" ].ToString ( ); } } list.AddRange ( phoneList ); using ( con ) { TSqlBulkInsert ( "INSERT INTO jd_sale_price" , list ); } //foreach ( var item3 in phoneList ) //{ // Console.WriteLine ( "名稱:{0},價格:{1}" , item3.PhoneName , item3.Price ); //} } //return list; } /// <summary> /// 批量數據寫入 /// </summary> /// <typeparam name="T"></typeparam> /// <param name="sql"></param> /// <param name="dataList"></param> /// <returns></returns> public static bool TSqlBulkInsert<T> ( string sql , List<T> dataList ) where T : new() { bool result = false; //獲取T的公共屬性 Type type = dataList[0].GetType(); PropertyInfo[] param = type.GetProperties(); List<string> properotyList = param.Select(p => p.Name).ToList(); using ( con ) { con.Open ( ); sql = CreateSqlStr ( sql , dataList , properotyList ); MySqlTransaction tran = (MySqlTransaction)con.BeginTransaction(); MySqlCommand commd = new MySqlCommand(sql,(MySqlConnection) con, tran); try { int query = commd.ExecuteNonQuery(); tran.Commit ( ); result = true; } catch ( Exception e ) { tran.Rollback ( ); throw; } return result; } } /// <summary> /// 構建大批量寫入數據SQL語句 /// </summary> /// <typeparam name="T"></typeparam> /// <param name="sql">原始SQL</param> /// <param name="dataList">寫入數據</param> /// <param name="properotyList"></param> /// <returns></returns> private static string CreateSqlStr<T> ( string sql , List<T> dataList , List<string> properotyList ) where T : new() { StringBuilder sb = new StringBuilder(); sb.Append ( sql ); sb.Append ( " VALUES" ); int i = 0; foreach ( var item in dataList ) { sb.Append ( "(" ); for ( int j = 0 ; j < properotyList.Count ; j++ ) { PropertyInfo properotyInfo = item.GetType().GetProperty(properotyList[j]); // 屬性的信息 object properotyValue = properotyInfo.GetValue(item,null);// 屬性的值 sb.Append ( "\"" ); sb.Append ( properotyValue.ToString ( ) ); sb.Append ( "\"" ); if ( j < properotyList.Count - 1 ) { sb.Append ( "," ); } } sb.Append ( ")" ); if ( i++ < dataList.Count - 1 ) { sb.Append ( "," ); } } sql = sb.ToString ( ); return sql; } /// <summary> /// 京東手機評級數據抓取 /// </summary> private static void GetComment ( ) { HttpItem item = new HttpItem() { URL = "https://sclub.jd.com/comment/productPageComments.action?callback=fetchJSON_comment98vv1957&productId=6494554&score=0&sortType=5&page=99&pageSize=20&isShadowSku=0&fold=1" , Method = "GET" , }; List<Comment> list=new List<Comment>(); for ( var i = 0 ; i < 100 ; i++ ) { item.URL = "https://sclub.jd.com/comment/productPageComments.action?callback=fetchJSON_comment98vv1957&productId=6494554&score=0&sortType=5&page=" + i + "&pageSize=20&isShadowSku=0&fold=1"; var result=helper.GetHtml(item).Html; result = result.Replace ( "fetchJSON_comment98vv1957(" , "" ).Replace ( ");" , "" ); var jobject=JsonConvert.DeserializeObject<JObject>(result).Value<JToken>("comments"); foreach ( var info in jobject ) { Comment comment=new Comment(); comment.userClientShow = info.SelectToken ( "userClientShow" ) == null ? "" : info.SelectToken ( "userClientShow" ).ToString ( ).Replace ( "來自" , "" ).Replace ( "客戶端" , "" ).Replace ( "京東" , "" ).Replace ( "購物" , "" ); comment.nickname = info.SelectToken ( "nickname" ) == null ? "" : info.SelectToken ( "nickname" ).ToString ( ); comment.userExpValue = info.SelectToken ( "userExpValue" ) == null ? "" : info.SelectToken ( "userExpValue" ).ToString ( ); comment.userLevelName = info.SelectToken ( "userLevelName" ) == null ? "" : info.SelectToken ( "userLevelName" ).ToString ( ); comment.referenceTime = info.SelectToken ( "referenceTime" ) == null ? "" : info.SelectToken ( "referenceTime" ).ToString ( ); comment.referenceName = info.SelectToken ( "referenceName" ) == null ? "" : info.SelectToken ( "referenceName" ).ToString ( ); comment.productColor = info.SelectToken ( "productColor" ) == null ? "" : info.SelectToken ( "productColor" ).ToString ( ); comment.productSize = info.SelectToken ( "productSize" ) == null ? "" : info.SelectToken ( "productSize" ).ToString ( ); comment.score = info.SelectToken ( "score" ) == null ? "" : info.SelectToken ( "score" ).ToString ( ); comment.content = info.SelectToken ( "content" ) == null ? "" : info.SelectToken ( "content" ).ToString ( ); comment.creationTime = info.SelectToken ( "creationTime" ) == null ? "" : info.SelectToken ( "creationTime" ).ToString ( ); list.Add ( comment ); } } NPOI.SS.UserModel.IWorkbook workbook=new NPOI.HSSF.UserModel.HSSFWorkbook(); NPOI.SS.UserModel.ISheet sheet=workbook.CreateSheet("京東vivo評價數據"); for ( var i = 0 ; i < list.Count ; i++ ) { NPOI.SS.UserModel.IRow row = sheet.CreateRow ( i + 1 ); if ( i == 0 ) { row.CreateCell ( 1 ).SetCellValue ( "userClientShow" ); row.CreateCell ( 2 ).SetCellValue ( "nickname" ); row.CreateCell ( 3 ).SetCellValue ( "userExpValue" ); row.CreateCell ( 4 ).SetCellValue ( "userLevelName" ); row.CreateCell ( 5 ).SetCellValue ( "referenceTime" ); row.CreateCell ( 6 ).SetCellValue ( "referenceName" ); row.CreateCell ( 7 ).SetCellValue ( "productColor" ); row.CreateCell ( 8 ).SetCellValue ( "productSize" ); row.CreateCell ( 9 ).SetCellValue ( "score" ); row.CreateCell ( 10 ).SetCellValue ( "content" ); row.CreateCell ( 11 ).SetCellValue ( "creationTime" ); } else { row.CreateCell ( 1 ).SetCellValue ( list [ i ].userClientShow ); row.CreateCell ( 2 ).SetCellValue ( list [ i ].nickname ); row.CreateCell ( 3 ).SetCellValue ( list [ i ].userExpValue ); row.CreateCell ( 4 ).SetCellValue ( list [ i ].userLevelName ); row.CreateCell ( 5 ).SetCellValue ( list [ i ].referenceTime ); row.CreateCell ( 6 ).SetCellValue ( list [ i ].referenceName ); row.CreateCell ( 7 ).SetCellValue ( list [ i ].productColor ); row.CreateCell ( 8 ).SetCellValue ( list [ i ].productSize ); row.CreateCell ( 9 ).SetCellValue ( list [ i ].score ); row.CreateCell ( 10 ).SetCellValue ( list [ i ].content ); row.CreateCell ( 11 ).SetCellValue ( list [ i ].creationTime ); } } var path=AppDomain.CurrentDomain.BaseDirectory+"test.xls"; using ( System.IO.FileStream file = new System.IO.FileStream ( path , System.IO.FileMode.Create ) ) { workbook.Write ( file ); file.Close ( ); } } public static int Test(int x) { return x; } } public class PhonePrice { public string PhoneName { get; set; } public string Price { get; set; } public string SkuId { get; set; } } public class Comment { public string userClientShow { get; set; } public string nickname { get; set; } public string userExpValue { get; set; } public string userLevelName { get; set; } public string referenceTime { get; set; } public string referenceName { get; set; } public string productColor { get; set; } public string productSize { get; set; } public string score { get; set; } public string content { get; set; } public string creationTime { get; set; } }

京東手機銷售價格抓取