A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

上课第四天,学到正则表达式这部份,虽然只说半天的正则,老师说的也对,用到的时候再把这部份的内容专门看下,虽然没说太多这方面的东西,不过觉得有个课堂上的小练习倒是挺有趣,把招聘网站的职位信息抓取出来,不过只是显示出职位信息,觉得这样练得不太爽,还可以把再多一点的相关信息也显示出来,所以现把这功能扩展了下,显示出网站上的职位、公司、地区、日期都显示出来并且生成一个HTML页面以表格的形式来展示出获取到的职位信息。
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using System.Text;
  5. using System.Collections;
  6. using System.Net;
  7. using System.Text.RegularExpressions;
  8. using System.IO;

  9. namespace hm1
  10. {
  11.     class Program
  12.     {
  13.         static void Main(string[] args)
  14.         {
  15.             // 抓取信息,生成以表格形式的的职位公司地址和日期的HTML页面
  16.             WebClient wb = new WebClient();
  17.             // 获取页面源码
  18.             string s = wb.DownloadString(@"http://search.51job.com/jobsearch/search_result.php?fromJs=1&jobarea=010000%2C00&funtype=0000&industrytype=00&keyword=net%E5%BC%80%E5%8F%91%E5%B7%A5%E7%A8%8B%E5%B8%88&keywordtype=2&lang=c&stype=1&postchannel=0000&fromType=23");
  19.             // 正则,获取招聘相关信息
  20.             Regex regall = new Regex(@"<td class=""td1""><a href="".+"" onclick=""zzSearch.acStatRecJob\( 1 \);"" class=""jobname"" target=""_blank"" >(?<zhiwei>.+)</a><img src="".+"" align=""absmiddle"" onclick=""zzSearch.switchListType\( this , '#[\w]{6}' \);""></td>\s+<td class=""td2""><a href="".+"" class=""coname"" target=""_blank"" >(?<gs>.+)</a></td>\s+<td class=""td3""><span id="".+"">(?<address>[\w\-]+)</span></td>\s+<td class=""td4""><span id="".+"">(?<datename>\d{4}\-\d{2}\-\d{2})</span></td>\s+<td class=""td5"">&nbsp;</td>");
  21.             List<zhaoping> ls = new List<zhaoping>();
  22.             MatchCollection m = regall.Matches(s);
  23.             StringBuilder sb = new StringBuilder();
  24.             for (int i = 0; i < m.Count; i++)
  25.             {
  26.                 zhaoping z = new zhaoping(); // 获取每一条招聘信息
  27.                 z.zihwei = m[i].Groups["zhiwei"].Value.Replace(@"<font color=""#fe0201"">", "").Replace(@"</font>", "");
  28.                 z.gongshi = m[i].Groups["gs"].Value;
  29.                 z.dizhi = m[i].Groups["address"].Value;
  30.                 z.riqi = m[i].Groups["datename"].Value;
  31.                 ls.Add(z);
  32.                 Console.WriteLine("职位:{0} 公司:{1} 地址:{2} 日期:{3}", z.zihwei, z.gongshi, z.dizhi, z.riqi);
  33.             }
  34.             // 生成HTML源码
  35.             sb.AppendLine("<html><head><title>招聘信息</title></head><body><table><tr align ='left' ><th>职位</th><th>公司</th><th>地址</th><th>日期</th></tr>");
  36.             foreach (var item in ls)
  37.             {
  38.                 sb.AppendLine(item.getline());
  39.             }
  40.             sb.AppendLine("</table></body></html>");
  41.             // 输出文件
  42.             System.IO.File.WriteAllText("招聘.html", sb.ToString(), Encoding.UTF8);
  43.             Console.ReadKey();
  44.         }
  45.     }
  46.     class zhaoping
  47.     {
  48.         public string zihwei { get; set; } // 职位
  49.         public string gongshi { get; set; }// 公司
  50.         public string dizhi { get; set; }// 地址
  51.         public string riqi { get; set; }// 日期
  52.         public string getline()
  53.         {
  54.             return string.Format("<tr><td>{0}</td><td>{1}</td><td>{2}</td><td>{3}</td></tr>", zihwei, gongshi, dizhi, riqi);
  55.         }
  56.     }
  57. }
复制代码

运行之后会在程序启动目录下生成一个招聘.html的文件,里面是.NET相关的开发职位(如图)
网站页面
yyyyyyyyyyyy.png (130.83 KB, 下载次数: 0)
抓取后生成的页面
应用中心截屏_2014-04-26T13-17-56.788Z.png (227.5 KB, 下载次数: 0)

1 个回复

倒序浏览
真的很强大,又给我去学习加了一把劲
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马