zoukankan      html  css  js  c++  java
  • 京东手机销售价格抓取

       /// <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("
    ",""),
                        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; }
        }
  • 相关阅读:
    vue官方实例-组件
    数据处理-js
    图片大于div时的居中显示
    angularjs select通过动态加载option有空白项的处理方法-
    背景图片自适应div
    input-text
    input-number-required
    input-number-not-required
    null与undefined的区别?
    是true还是false呢?
  • 原文地址:https://www.cnblogs.com/fuxuyang/p/8807561.html
Copyright © 2011-2022 走看看