在UWP中,如果使用.NET framework4.5以上或者UWP中的.NET Core的话,就可以使用HTTPClient进行更方便的网络访问。

在本次项目中,选择“快递100”网站进行爬取。


首先随便查询一个快递,在F12开发人员工具中,可以发现请求的url为

http://www.kuaidi100.com/query?type={0}&postid={1}", com, ExpressNum

其中com为公司的代码,如“顺丰”则代替为shunfeng,

postid为快递单号。

获取到正确的url后,需要解析返回的json数据。

推荐使用开源的Newtonsoft.Json;免得在反序列化的路上折磨自己。


过程代码:

var client = new HttpClient();
//快递单号格式http://www.kuaidi100.com/query?type=shunfeng&postid=xxxxxxxx
var response = await client.GetAsync(String.Format("http://www.kuaidi100.com/query?type={0}&postid={1}", com, ExpressNum));
var result = await response.Content.ReadAsStringAsync();
ExpressData reExpress = (ExpressData)JsonConvert.DeserializeObject<ExpressData>(result);


得到的reExpress就是我们要的数据,具体ExpressData是什么后面说。
比较容易理解过程。注意GetAsync为异步方法,所以需要await,函数也声明为async

class ExpressItem
    {
        //com为快递公司的字符串转换,ExpressNum为快递单号,userInfo为数据绑定的集合。
        public static async void GetResponse(string com, string ExpressNum, ObservableCollection<Detail> userInfo)
        {
            var client = new HttpClient();
            var response = await client.GetAsync(String.Format("http://www.kuaidi100.com/query?type={0}&postid={1}", com, ExpressNum));
            var result = await response.Content.ReadAsStringAsync();
            ExpressData reExpress = (ExpressData)JsonConvert.DeserializeObject<ExpressData>(result);

            userInfo.Clear();
            //倒序显示。
            for (int i = reExpress.data.Count - 1; i >= 0; --i)
                //reExpress.data.ForEach(p => userInfo.Add(p));
                userInfo.Add(reExpress.data[i]);
        }
    }


类定义:

public class ExpressData
    {
        public int status;
        public int errCode;
        public string message;
        public string html;
        public int mailTo;
        public string tel;
        public string expTextName;
        public List<Detail> data;
    }
    public class Detail
    {
        public string time;
        public string context;
    }

这个是根据获得的json数据包含的内容设置的,类型也是自选,因为返回的序列化数据为json字符串。

可以在在线json解析网站先观察一下。

使用jsonconverter后,可以获得我们想要的类型的数据。


如果是在python中使用,获得json字符串后

eval(result)

即可。

至此,一个快递查询核心已完毕,剩余应当是异常处理等,不再赘述。

Logo

电商企业物流数字化转型必备!快递鸟 API 接口,72 小时快速完成物流系统集成。全流程实战1V1指导,营造开放的API技术生态圈。

更多推荐