正则表达式应用--提取CSDN所有下载资源URl的思路与代码实现分享

xuexiaodong2009
领域专家: 前端开发技术领域
2012-04-23 08:36:33
加精
原文
http://blog.csdn.net/xuexiaodong2009/article/details/7481122
其实这个内容本身没有什么实际价值,只是有段时间,自己想找所有下载分为0的资源,闲来没事就随手写了一个小程序,见识到了正则表达式的强大

1分析需求 2查找规律,实现思路,3实现代码


1分析需求

需求很简单,就是找到所有下载分为0的资源,也就是不需要下载分的资源,刚开始时自己手动一个一个的找,感觉太慢了,

首先得打开资源分类页http://download.csdn.net/category,

再打开某一分类例如android http://download.csdn.net/category/mobile_development/android,

再点列表的某一页 例如第2页,http://download.csdn.net/category/mobile_development/android/orderbypubdate/2,

一页六个资源,一个一个的看,是不是存在不需要下载分的资源,有就打开到资源的详细页面,

最后才可以到下载页面,实在感觉太慢了,于是就有了写一个小程序的想法。在50页中查找差不多得一个小时。

2查找规律,实现思路

有了想法就开始想着怎么实现了。第一步就是分析各个页面的关系或者说是规律。对于某一个具体的分类列表页的url组成是有三部分组成:

第一部分http://download.csdn.net/category/是固定的,

第二部分是mobile_development是资源的大分类,

第三部分是android小分类,

最后就是排序方式和页码了orderbypubdate/2

分析列表的网页的源代码,发现关键的一行,包含了资源详细信息的链接和下载分,

例如如下一行的链接为/detail/ipoints/4241887,下载分为1


[html] view plaincopy
<dt><a href="/detail/ipoints/4241887">Yaffs专家.apk</a><span class="marks">1</span></dt>
通过正则表达式就可以匹配到链接和下载分。

资源的详细介绍页面和最终下载页面也有一定的关系,一个是detail一个是download,所以只要得到了资源的详细介绍页面就可以了。

http://download.csdn.net/detail/xuexiaodong2009/4241131

http://download.csdn.net/download/xuexiaodong2009/4241131


3实现代码
获取资源列表页


[csharp] view plaincopy
HttpWebRequest request = WebRequest.Create(url) as HttpWebRequest;

request.Method = "GET";
request.KeepAlive = false;
//Get the response
using (HttpWebResponse response = request.GetResponse() as HttpWebResponse)
{
using (Stream responseStream = response.GetResponseStream())
{
using (StreamReader reader = new StreamReader(responseStream, Encoding.UTF8))
{
string line = reader.ReadLine();
int count = 0;
int lineNo = 0;
while (line != null)
{
lineNo++;
if (lineNo < startLineIndex || string.IsNullOrEmpty(line))
{
line = reader.ReadLine();
continue;
}

if (lineNo >= endLineIndex)
{
break;
}
Match match = reDetailUrl.Match(line);
if (match.Success)
{
string inerUrl = match.Groups["url"].Value;
string marks = match.Groups["marks"].Value;
}
line = reader.ReadLine();
}
}
}
}

匹配资源详细介绍URL的正则表达式,

[csharp] view plaincopy
<a\s+href\s*=\s*"(?<url>[^"]{1,})">[^<]{1,}\s*</a><span\s+class\s*=\s*"marks"\s*>\s*(?<marks>\d{1,})\s*</span>

实现效果,分析一类资源,也就不到十分钟,效果非常明显。

遗留问题:

本想通过程序自动下载资源,但没有找到通过CSDN下载资源前,先需要验证的方法,只能暂时放一放了。

希望有想法的可以给指点一下。
源代码下载地址
http://download.csdn.net/detail/xuexiaodong2009/4242746
...全文
3043 95 打赏 收藏 转发到动态 举报
写回复
用AI写文章
95 条回复
切换为时间正序
请发表友善的回复…
发表回复
E次奥 2012-05-04
  • 打赏
  • 举报
回复
很黄,很暴力!不,所措了。。。很好,很强大!
「已注销」 2012-05-04
  • 打赏
  • 举报
回复
学习啊~~
ZZIA_TIAN 2012-04-29
  • 打赏
  • 举报
回复
强人......
李云top 2012-04-29
  • 打赏
  • 举报
回复
谢谢分享,又让我学会了很多东西
hg2980986 2012-04-29
  • 打赏
  • 举报
回复
a461991666 2012-04-29
  • 打赏
  • 举报
回复
真的很强大!f
chate 2012-04-29
  • 打赏
  • 举报
回复
高手啊!
new_fengzi 2012-04-28
  • 打赏
  • 举报
回复
感谢 分享
qq294052929 2012-04-28
  • 打赏
  • 举报
回复
表示没看懂 希望能来学点基础
孙峰90 2012-04-28
  • 打赏
  • 举报
回复
留下来有用。。。
lmy0403 2012-04-28
  • 打赏
  • 举报
回复
想想确实鸭梨山大!!!
[Quote=引用 64 楼 的回复:]

引用 46 楼 的回复:

正则表达式基本可以检测一个程序员是否科班出身 :-)

非科班出身,,亚历山大呀...
[/Quote]
yp19910928 2012-04-27
  • 打赏
  • 举报
回复
很不错,很强大。
jy251 2012-04-27
  • 打赏
  • 举报
回复
真佩服你的勇气。。。。。
这个帖子如果出现在豆豆,那么没问题。。。关键是出现在了csdn。。。。
张正 2012-04-27
  • 打赏
  • 举报
回复
有心人 学习了! 支持下~! 呵呵
叶子 2012-04-27
  • 打赏
  • 举报
回复
路过,支持小薛!!
不懂游走 2012-04-27
  • 打赏
  • 举报
回复
waaoo 2012-04-27
  • 打赏
  • 举报
回复
都是强人,过来膜拜一下!
j982277308 2012-04-27
  • 打赏
  • 举报
回复
谢谢分享.
zhe8300975 2012-04-26
  • 打赏
  • 举报
回复
这个不错 要学习
harveyXXX 2012-04-26
  • 打赏
  • 举报
回复
很强大
加载更多回复(56)

111,126

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Creator Browser
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧