扫黄大队 发表于 2014-1-13 11:43

C#TaoBaoHelper类;今天写的现在分享给大家

功能:
      1.获取店铺所有的商品ID
      2.通过商品ID获取商品的HTML
就以上两个小功能,后面会添加更多的功能!希望大家多多支持哦!


辅助功能:
       1.过滤相同内容
       2.取文本中间内容
       3.取文本中间到List集合

代码如下:/// <summary>
/// 类说明:获取店铺所有商品ID,然后调用获取到ID可获得制定的商品数据
/// 编码日期:2014-01-13
/// 编 码 人:Lese
/// 联系方式:97354625
/// </summary>
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace TaoBaoHelper
{
    public class TaoBaoHelper
    {
      /// <summary>
      /// 店铺商品页数
      /// </summary>
      private static int page = 1;

      public static int Page
      {
            get { return TaoBaoHelper.page; }
            set { TaoBaoHelper.page = value; }
      }
      /// <summary>
      /// 循环判断
      /// </summary>
      private static bool b = false;

      public static bool B
      {
            get { return TaoBaoHelper.b; }
            set { TaoBaoHelper.b = value; }
      }
      /// <summary>
      /// 储存每页的商品ID
      /// </summary>
      private static StringBuilder sb = new StringBuilder();

      public static StringBuilder Sb
      {
            get { return TaoBaoHelper.sb; }
            set { TaoBaoHelper.sb = value; }
      }
      /// <summary>
      /// 返回的商品ID
      /// </summary>
      private static string[] id;

      public static string[] ID
      {
            get { return TaoBaoHelper.id; }
            set { TaoBaoHelper.id = value; }
      }
      /// <summary>
      /// 取文本中间内容
      /// </summary>
      /// <param name="url">店铺域名 例如:http://june23day.taobao.com/ 必须是这个格式,可以直接点击店铺中的“所有分类”获得</param>
      /// <returns>店铺所有商品</returns>
      public static string[] ReadID(string url)
      {
            HttpHelper http = new HttpHelper();
            while (B != true)
            {
                HttpItem item = new HttpItem()
                {
                  URL = url + "search.htm?pageNo=" + Page.ToString(),//URL   必需项   
                  Method = "get",//URL   可选项 默认为Get   
                  IsToLower = false,//得到的HTML代码是否转成小写   可选项默认转小写   
                  Cookie = "",//字符串Cookie   可选项   
                  Referer = "",//来源URL   可选项   
                  Postdata = "",//Post数据   可选项GET时不需要写   
                  Timeout = 10000,//连接超时时间   可选项默认为100000   
                  ReadWriteTimeout = 10000,//写入Post数据超时时间   可选项默认为30000   
                  UserAgent = "Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Trident/5.0)",//用户的浏览器类型,版本,操作系统   可选项有默认值   
                  ContentType = "text/html",//返回类型    可选项有默认值   
                  Allowautoredirect = false,//是否根据301跳转   可选项   
                  ProxyIp = "",//代理服务器ID   可选项 不需要代理 时可以不设置这三个参数   

                };
                HttpResult result = http.GetHtml(item);
                string html = result.Html;
                if (html.IndexOf("J_SearchAsync next") == -1)
                {

                  foreach (String s in BetweenArr(html, "&itemIds=", "&source=shop\"/>"))
                  {
                        Sb.Append("," + s);

                  }
                  B = true;
                }
                else
                {
                  foreach (String s in BetweenArr(html, "&itemIds=", "&source=shop\"/>"))
                  {
                        Sb.Append("," + s);
                        Page++;
                  }
                }
            }
            string[]uid = Sb.ToString().Split(',');
            ID = RemoveLike(uid);
            return ID;
      }
      /// <summary>
      /// 获取商品数据
      /// </summary>
      /// <param name="ID">商品ID</param>
      /// <returns>返回商品数据HTML</returns>
      public static String ReadCommodity(string ID)
      {
            HttpHelper http = new HttpHelper();
            HttpItem item = new HttpItem()
            {
                URL = "http://item.taobao.com/item.htm?id=" + ID,//URL   必需项   
                Method = "get",//URL   可选项 默认为Get   
                IsToLower = false,//得到的HTML代码是否转成小写   可选项默认转小写   
                Cookie = "",//字符串Cookie   可选项   
                Referer = "",//来源URL   可选项   
                Postdata = "",//Post数据   可选项GET时不需要写   
                Timeout = 10000,//连接超时时间   可选项默认为100000   
                ReadWriteTimeout = 10000,//写入Post数据超时时间   可选项默认为30000   
                UserAgent = "Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Trident/5.0)",//用户的浏览器类型,版本,操作系统   可选项有默认值   
                ContentType = "tehp/html",//返回类型    可选项有默认值   
                Allowautoredirect = false,//是否根据301跳转   可选项   
            };
            HttpResult result = http.GetHtml(item);
            string html = result.Html;
            return html;
      }
      /// <summary>
      /// 过滤相同内容
      /// </summary>
      /// <param name="values">要过滤数组</param>
      /// <returns>过滤后的数组</returns>
      public static string[] RemoveLike(string[] values)
      {
            List<string> list = new List<string>();
            for (int i = 0; i < values.Length; i++)//遍历数组成员
            {
                if (values != "")
                {
                  if (list.IndexOf(values.ToLower()) == -1)//对每个成员做一次新数组查询如果没有相等的则加到新数组
                        list.Add(values);
                }

            }

            return list.ToArray();
      }
      /// <summary>
      /// 取文本中间内容
      /// </summary>
      /// <param name="str">原文本</param>
      /// <param name="leftstr">左边文本</param>
      /// <param name="rightstr">右边文本</param>
      /// <returns>返回中间文本内容</returns>
      public static string Between(string str, string leftstr, string rightstr)
      {
            int i = str.IndexOf(leftstr) + leftstr.Length;
            string temp = str.Substring(i, str.IndexOf(rightstr, i) - i);
            return temp;
      }
      /// <summary>
      /// 取文本中间到List集合
      /// </summary>
      /// <param name="str">文本字符串</param>
      /// <param name="leftstr">左边文本</param>
      /// <param name="rightstr">右边文本</param>
      /// <returns>List集合</returns>
      public static List<string> BetweenArr(string str, string leftstr, string rightstr)
      {
            List<string> list = new List<string>();
            int leftIndex = str.IndexOf(leftstr);//左文本起始位置
            int leftlength = leftstr.Length;//左文本长度
            int rightIndex = 0;
            string temp = "";
            while (leftIndex != -1)
            {
                rightIndex = str.IndexOf(rightstr, leftIndex + leftlength);
                if (rightIndex == -1)
                {
                  break;
                }
                temp = str.Substring(leftIndex + leftlength, rightIndex - leftIndex - leftlength);
                list.Add(temp);
                leftIndex = str.IndexOf(leftstr, rightIndex + 1);
            }
            return list;
      }
    }
}


Hacker丶绝筱伦 发表于 2014-1-13 11:49

扫黄大队 发表于 2014-1-13 13:39

ferrice 发表于 2014-1-13 12:06 static/image/common/back.gif
求整个VS的解决方案或者项目 = =

整个项目也是一个类,拿这两个类放进你自己的项目不就可以用了!

ferrice 发表于 2014-1-13 12:06

求整个VS的解决方案或者项目 = =

laughing______ 发表于 2014-1-13 11:58

很一般的代码。。。。。。。。没什么出彩的地方

uuwhat 发表于 2014-10-10 04:31

有用,谢谢了

crazybaby 发表于 2014-11-17 21:57

学习下。谢谢分享

fengxichou 发表于 2014-12-28 01:27

有了店主和商品的相关信息
LZ下一步是准备获取个人评价和购买详情吗?

xx_sj 发表于 2014-12-31 05:01

看看 支持一下
页: [1]
查看完整版本: C#TaoBaoHelper类;今天写的现在分享给大家