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.mzph.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;才可以培养出优秀的孩子。优秀的…