zoukankan      html  css  js  c++  java
  • [传智播客学习日记]正则提取网页信息并写入文件

    今天来复习赵老师讲过的旧知识!

    知识点:文件的按行读写、正则提取组。

    这次我加了详细的注释,完全就是面向过程,跟着思路一步一步走的,其实写程序就是跟着思路来,有思路,就有代码!非C#玩家应该也能看得懂。(注:C#中的using块的作用是自动释放非托管资源。)

    这段演示代码的用途是把大街网上的求职信息的单位名称和链接地址按照一定格式提取到一个文本文件里。假设页面是“1.htm”、输出为“1.txt”(实际应用中不会写死的),效果是编号-名称-地址-换行,如下:

    7.名称:某某某公司招聘某某某职位
    地址:http://job.dajie.com/xxxxx.html


    代码:

     1 //首先要读取文件,建立一个文件流来读取
    2 using (FileStream fs = File.OpenRead("1.htm"))
    3 {
    4 //由于一个标签就是一行,所以用StreamReader来按行读取
    5 using (StreamReader sr = new StreamReader(fs))
    6 {
    7 //我们要收集所有信息到一个集合里,建立一个集合
    8 List<string> lines = new List<string>();
    9
    10 //这里是正则匹配的字符串,第一个组是连接,第二个组是名称,这个字符串是匹配大街网的
    11 string reg = "[^<p>]<a href=\"(.*)\" onmousedown=\"return c.*\">(.*)</a>";
    12
    13 //看读没读到文件结尾,读取每一行
    14 while (!sr.EndOfStream)
    15 {
    16 //读取下一行
    17 string line = sr.ReadLine();
    18
    19 //如果匹配成功
    20 if (Regex.IsMatch(line, reg))
    21 {
    22 //则收集匹配到的信息到Match变量中
    23 Match match = Regex.Match(line, reg);
    24 //拼接结果字符串
    25 string result = string.Format("名称:{0}\r\n地址:{1}", match.Groups[2], match.Groups[1]);
    26 //把结果加入到最终的集合里
    27 lines.Add(result);
    28 }
    29 }//读取每一行,循环结束
    30
    31 //读完了之后要写入目标文件,先建立一个
    32 using (FileStream fs2 = File.Create("1.txt"))
    33 {
    34 //由于是按行写的,所以使用StreamWriter
    35 using (StreamWriter sw = new StreamWriter(fs2))
    36 {
    37 //循环集合里的每一行
    38 for (int i=0; i<lines.Count; i++)
    39 {
    40 //加上标号和换行,写进目标文件
    41 sw.WriteLine((i+1)+"."+lines[i]+"\r\n");
    42 }
    43 }
    44 }
    45 }
    46 }



  • 相关阅读:
    科学计算和可视化,做数据分析与雷达图。
    Leetcode 429 N叉树的层序遍历
    Leetcode 867转置矩阵
    Leetcode 832 翻转图像
    Leetcode 1052 爱生气的书店老板
    Leetcode 337打家劫舍 III
    Leetcode 766 托普利茨矩阵
    Leetcode 1438绝对差不超过限制的最长连续子数组
    Leetcode 697 数组的度
    Leetcode 567 字符串的排列
  • 原文地址:https://www.cnblogs.com/Elijah/p/2260788.html
Copyright © 2011-2022 走看看