在线时间:8:00-16:00
迪恩网络APP
随时随地掌握行业动态
扫描二维码
关注迪恩网络微信公众号
感谢大家的支持,以及微软社区精英计划团队的肯定,我被邀请在微软MSDN网络建立个人主页,由于第一次建立主页的时候,需要提交相关博文的信息,为了实现该需求,我用PowerShell来完成博文的采集。本文讲述如何使用PowerShell来采集博客园上的博文信息。
需求需要把提交的博文整理成一个表格,显示发布时间,内容标题,具体链结位置,技术分类和内容形式,入下表格。
尽管文章列表的生成只是一次性的工作,可是Copy&Paste(拷贝粘贴)还是很annoying和error-prone(恼人和容易出错)的工作,这次继续使用PowerShell来简化工作。我承认我是一个偷懒的程序员。上次的文章讲述如何使用Powershell简化Windows Mobile和Windows Embedded CE的开发流程,可以参考 如何使用PowerShell提升开发效率(以Windows Embedded CE为例)。
源代码先上代码,然后再解析 #Global variables
下面是在PowerShell执行的截图,关于PowerShell的环境配置,请看上篇文章。
下面是生成的文章列表。
代码解析$blogName = "procoder";
$articles = New-Object System.Collections.Generic.List``1[System.Object] $articles是用于保存采集文章信息的容器。注意生成的时候格式有点怪,需要加上``1
$OutputEncoding = New-Object -typename System.Text.UTF8Encoding;
由于我使用的是英文的操作系统,所有需要把环境变量$OutputEncoding改成UTF8的编码方式。
$webClient = New-Object System.Net.WebClient; 使用WebClient进行采集,由于采集内容有中文,把编码改成UTF8. $regex = New-Object System.Text.RegularExpressions.Regex('<a\s+>'http://www.cnblogs.com/\w+/archive/(?<year>\d+)/(?<month>\d+)/(?<day>\d+)/.+.html');
使用正则表达式来匹配采集的结果。正则表达式根据采集的内容来写,例如下面为采集到的HTML源码,根据其格式采集出题目,链接以及日期信息。 <a id="homepage1_HomePageDays_ctl00_DayList_ctl00_TitleUrl" class="postTitle2" href="http://www.cnblogs.com/procoder/archive/2010/05/17/Microsoft_Word_Save_As_PDF.html">[Office 2010 易宝典]怎样直接将Office文档保存为PDF格式?</a>
echo "Analysing Page $i ..."; 调用$webClient.DownloadString采集网页的内容,把HTML源码保存到字符串中。通过$regex.Matches($html);来匹配出标题,链接等信息。如果没有匹配,表示采集完成。 foreach ($match in $matches) 匹配出年月日的信息,并且把所有匹配信息放到对象$artile中,最后存放到容器中。
# Generate the report 最后使用ConvertTo-HTML把容器信息转换成HTML输出,然后使用Out-File导出到文件中,由于使用了中文,所有要指定编码为"unicode"。 |
2023-10-27
2022-08-15
2022-08-17
2022-09-23
2022-08-13
请发表评论