在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);
比較容易理解過程。注意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)
即可。
至此,一個快遞查詢核心已完畢,剩餘應當是異常處理等,不再贅述。