DHL 快遞跟蹤查詢

?

思路描述:主要使用正則表達式解析。

返回一個跟蹤步驟列表。

  1. public class TrackingData
  2. ????{
  3. ????????public string time { get; set; }
  4. ????????public string context { get; set; }
  5. ????}
  6. ????public class DHLExpressTrackingHelper
  7. ????{
  8. ????????private static string urlFormat = "http://webtrack.dhlglobalmail.com/?trackingnumber={0}";
  9. ????????public static List<TrackingData> GetTrackingData(string trackCode)
  10. ????????{
  11. ????????????//trackCode = "A150529020091";
  12. ????????????WebMocker dhlMocker = new WebMocker();
  13. ????????????var url = string.Format(urlFormat, trackCode);
  14. ????????????var html = dhlMocker.Get(url);
  15. ????????????//1
  16. ????????????var patternOLTag = "<ol.*?>(?<olvalue>.*?)</ol>";
  17. ????????????var match = Regex.Match(html, patternOLTag, RegexOptions.Multiline | RegexOptions.Singleline);
  18. ????????????if (match.Success)
  19. ????????????{
  20. ????????????????var olValue = match.Groups["olvalue"].Value;
  21. ????????????????return ParseTrackingData(olValue);
  22. ????????????}
  23. ????????????return new List<TrackingData>();
  24. ????????}
  25. ????????private static List<TrackingData> ParseTrackingData(string olValue)
  26. ????????{
  27. ????????????var patternLITag = "<li.*? class=\"(?<className>.*?)\".*?>(?<content>.*?)</li>";
  28. ????????????var list = new List<TrackingData>();
  29. ????????????string datePrefix = null;
  30. ????????????foreach (Match item in Regex.Matches(olValue, patternLITag, RegexOptions.Singleline | RegexOptions.Multiline | RegexOptions.IgnoreCase))
  31. ????????????{
  32. ????????????????var className = item.Groups["className"].Value;
  33. ????????????????var content = item.Groups["content"].Value;
  34. ????????????????if (className == "timeline-date")
  35. ????????????????{
  36. ????????????????????datePrefix = content;
  37. ????????????????}
  38. ????????????????else if (className.Contains("timeline-event"))
  39. ????????????????{
  40. ????????????????????var pp = "<div.*?class=\"(?<divClassName>.*?)\".*?>(?<divContent>.*?)</div>";
  41. ????????????????????TrackingData trackingData = null;
  42. ????????????????????foreach (Match subItem in Regex.Matches(content, pp, RegexOptions.Singleline | RegexOptions.Multiline | RegexOptions.IgnoreCase))
  43. ????????????????????{
  44. ????????????????????????var divClassName = subItem.Groups["divClassName"].Value.Trim();
  45. ????????????????????????var subContent = subItem.Groups["divContent"].Value.Trim();
  46. ????????????????????????if (divClassName == "timeline-time")
  47. ????????????????????????{
  48. ????????????????????????????subContent = Regex.Replace(subContent, "<[^<]*>", "");
  49. ????????????????????????????trackingData = new TrackingData();
  50. ????????????????????????????trackingData.time = datePrefix + " " + subContent;
  51. ????????????????????????}
  52. ????????????????????????else if (divClassName == "timeline-location")
  53. ????????????????????????{
  54. ????????????????????????????trackingData.context += subContent + " ";
  55. ????????????????????????}
  56. ????????????????????????else if (divClassName == "timeline-description")
  57. ????????????????????????{
  58. ????????????????????????????trackingData.context += subContent + " ";
  59. ????????????????????????}
  60. ????????????????????????//else if (divClassName == "timeline-location timeline-location-responsive")
  61. ????????????????????????//{
  62. ????????????????????????// trackingData.Description += subContent;
  63. ????????????????????????//}
  64. ????????????????????}
  65. ????????????????????list.Add(trackingData);
  66. ????????????????}
  67. ????????????}
  68. ????????????//foreach (var item in list)
  69. ????????????//{
  70. ????????????// Console.WriteLine(item.DateString + "--" + item.Description);
  71. ????????????//}
  72. ????????????return list;
  73. ????????}
  74. ????}

轉載于:https://www.cnblogs.com/pengzhen/p/4832787.html

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/272923.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/272923.shtml
英文地址,請注明出處:http://en.pswp.cn/news/272923.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

會返回兩次_嫦娥五號為何用獨特的半彈道式返回方式?原來有更深遠的考慮……...

更多戰史及裝備評說&#xff0c;請移步公眾號asiavikin&#xff08;轉載請注明出處&#xff09;24日凌晨4時30分&#xff0c;嫦娥五號在文昌航天發射場由長征五號火箭成功送入地月轉移軌道&#xff0c;22時6分完成第一次軌道修正&#xff0c;可喜可賀。這是人類44年來首度去月球…

【轉】VS2013中如何解決error C4996: 'fopen'問題

原文網址&#xff1a;http://jingyan.baidu.com/article/ce436649fd61543773afd32e.html 今天編寫控制臺應用程序時出現如下錯誤 error C4996: fopen: This function or variable may be unsafe. Consider using fopen_s instead. To disable deprecation, use _CRT_SECURE_NO_…

中關鍵字 表示空類型_C語言數據類型

程序在運行時要做的內容就是處理數據。程序要解決復雜的問題&#xff0c;就要處理不同的數據。不同的數據都是以自己本身的一種特定形式存在的&#xff0c;不同的數據類型占用不同的存儲空間。C語言中有多種不同的數據類型&#xff0c;其中包括幾個大的方向&#xff1a;基本數據…

理解inode

。 理解inode 一、inode是什么&#xff1f; 理解inode&#xff0c;要從文件儲存說起。 文件儲存在硬盤上&#xff0c;硬盤的最小存儲單位叫做"扇區"&#xff08;Sector&#xff09;。每個扇區儲存512字節&#xff08;相當于0.5KB&#xff09;。 操作系統讀取硬盤的時…

幀同步_微信小游戲接入“熊孩子噩夢”健康系統 幀同步能力上線

3月31日&#xff0c;微信小游戲官方公眾號“做個小游戲”發文宣布全新面向未成年人保護的健康系統已經上線&#xff0c;該系統聯動“成長守護平臺”的功能&#xff0c;可以更好助力家長群體對于未成年人游戲行為的監管。另外就在昨天&#xff0c;微信小游戲也曝光了另外一項新能…

【js】獲得項目路徑

1 var curWwwPathwindow.document.location.href; 2 //獲取主機地址之后的目錄&#xff0c;如&#xff1a; uimcardprj/share/meun.jsp 3 var pathNamewindow.document.location.pathname; 4 var poscurWwwPath.indexOf(pathName); //獲取主機地址&#xff0c;如&…

寫一個python程序、求解使得npv值為零的折現率_計算題專題:凈現值NPV分析與習題...

凈現值(NPV)是反映投資方案在計算期內獲利能力的動態評價指標。投資方案的凈現值是指用一個預定的基準收益率(或設定的折現率)i&#xff0c;分別把整個計算期間內各年所發生的凈現金流量都折現到投資方案開始實施時的現值之和。今天的一分錢要比明天的一分錢值錢NPV—計算公式和…

Myeclipse 安裝Aptana3.2 插件

轉自&#xff08;http://www.cnblogs.com/yinger/archive/2011/08/29/2157193.html&#xff09; 安裝步驟&#xff1a; 1、下載aptana3.2 Eclipse Plugin插件. 下載地址&#xff1a;http://update1.aptana.org/studio/3.2/024747/index.html 2、在java文件夾下新建文件夾plugin…

python語言的取余運算符_Python 中用于整數除法取余的運算符是()_學小易找答案...

【填空題】隱球菌病多由()傳播。【單選題】下列選項中,哪一個符號是管道符號。 ( )【多選題】可采用分批法計算產品成本的企業有( )【填空題】現有字符串 s”1234567” ,則 s[::2] 得到子串 , s[-1:0:-2] 得到子串【單選題】關于 Python 格式控制,下列說法正確的是()【單選題】…

Linux系統初級優化

系統參數優化和怎樣增強系統安全性&#xff0c;系統默認的一些參數都是比較保守的&#xff0c;所以我們可以通過調整系統參數來提高系統內存、CPU、內核資源的占用&#xff0c;通過禁用不必要的服務、端口&#xff0c;來提高系統的安全性&#xff0c;更好的發揮系統的可用性。通…

python3 selenium安裝教程_Python3爬蟲利器之Selenium的安裝

Selenium是一個自動化測試工具&#xff0c;利用它我們可以驅動瀏覽器執行特定的動作&#xff0c;如點擊、下拉等操作。對于一些JavaScript渲染的頁面來說&#xff0c;這種抓取方式非常有效。下面我們來看看Selenium的安裝過程。1. 相關鏈接官方網站&#xff1a;http://www.sele…

【原創】SQlServer數據庫生成簡單的說明文檔小工具(附源碼)

這是一款簡單的數據庫文檔生成工具&#xff0c;主要實現了SQlServer生成說明文檔的小工具&#xff0c;目前不夠完善&#xff0c;主要可以把數據庫的表以及表的詳細字段信息&#xff0c;導出到Word中&#xff0c;可以方便開發人員了解數據庫的信息或寫技術說明文檔。技術上主要采…

php導出excel時間錯誤(同一個時間戳,用date得到不同的時間)

通過在date之前設置時區解決了 date_default_timezone_set("Asia/Shanghai"); $schedule_time date("Y-m-d H:i:s", 1443234565);轉載于:https://www.cnblogs.com/bushe/p/4840463.html

封裝成vla函數_第四章:Python之函數

第一節&#xff1a;函數入門與定義函數理解函數所謂函數&#xff0c;就是為一段實現特定功能的代碼“取”個名字&#xff0c;以后即可通過該名字來執行(調用)這段代碼從邏輯上看&#xff0c;函數相當于一個黑匣子定義函數的語法定義函數的三條鐵律函數需要幾個關鍵的、需要動態…

sqlhelper中事務的簡單用法(初學者)

自己的博客sql1"INSERT INTO tablename(Id,col1,col2) VALUES(Id,col1,col2) update tablename2 set colcol";sql2"INSERT INTO tablename3(Id,col1,col2) VALUES(Id,col1,col2)";//參數設置&#xff08;略&#xff09;using(SqlTransaction tran SqlHel…

allegro大十字光標設置方法

使用大十字光標&#xff0c;在擺放元器件時&#xff0c;容易對齊。在allegro中&#xff0c;可以通過設置實現大十字光標&#xff0c;其具體方法如下&#xff1a; &#xff11;、選擇Setup->User Perferences,即可出現如下圖所示界面&#xff1a; &#xff12;、選擇Display-…

基于.NET平臺常用的框架整理(收藏)

目錄 分布式緩存框架 日志記錄異常處理 關于NoSQL數據庫 自動任務調度框架 依賴注入IOC容器框架 常用的幾個ORM框架 格式和數據類型轉換 反射和動態語言 跨平臺和運行時解決方案 WEB開發和設計 移動互聯網和云計算 網絡通信和網絡協議 圖形和圖像處理框架 桌面應用程序框架 測試…

界址點號_界址點及四至優化

先對文中提到的面做一個解釋&#xff0c;他可以指地塊&#xff0c;宗地。一、界址點先說一下對界址點優化的情況&#xff0c;之前的方法主要是只要考慮了對坐標排序的問題&#xff0c;對于比較規整的面出的效果還是挺好&#xff0c;但往往現實中的面都比較復雜&#xff0c;像下…

java程序 輸入10個數字并求和

課程作業&#xff1a; 模仿JavaAppArguments.java示例&#xff0c;編寫編寫一個程序&#xff0c;此程序從命令行接受多個數字&#xff0c;求和之后輸出結果。 設計思想&#xff1a; 先從命令行讀出數字&#xff0c;然后計算各個數字之和。求出結果。 流程圖&#xff1a; 程序源…

是先打工還是直接創業?答案讓我驚呆了!

第一問&#xff1a;成功路上&#xff0c;您是自己亂走&#xff0c;還是有老師指導更好&#xff1f;人生路上&#xff0c;因為有父母&#xff0c;才有生命&#xff1b;成功路上&#xff0c;因為有老師&#xff0c;才有方向。父母優秀&#xff0c;才可以培養出優秀的孩子。優秀的…