今日看博客园发现一个不错的抓取贴(主要是那个url。。。你懂的),花几分钟改了下,代码增加了按年月日建立目录,按文章建立子目录,图片都保存于内,命令行方式运行,增加了全站的参数。。。
原始版本:
利用HtmlAgilityPack抓取XX网站图片并下载~~~~~~邪恶版。。。。
新版本代码:
#region Using namespace
using System;
using System.IO;
using System.Linq;
using System.Net;
using HtmlAgilityPack;
#endregion
namespace DownloadImages
{
internal class Program
{
private static readonly WebClient Wc = new WebClient();
private static readonly char[] InvalidFileNameChars = new[]
{
'"',
'<',
'>',
'|',
'\0',
'\u0001',
'\u0002',
'\u0003',
'\u0004',
'\u0005',
'\u0006',
'\a',
'\b',
'\t',
'\n',
'\v',
'\f',
'\r',
'\u000e',
'\u000f',
'\u0010',
'\u0011',
'\u0012',
'\u0013',
'\u0014',
'\u0015',
'\u0016',
'\u0017',
'\u0018',
'\u0019',
'\u001a',
'\u001b',
'\u001c',
'\u001d',
'\u001e',
'\u001f',
':',
'*',
'?',
'\\',
'/'
};
public static string CleanInvalidFileName(string fileName)
{
fileName = fileName + "";
fileName = InvalidFileNameChars.Aggregate(fileName, (current, c) => current.Replace(c + "", ""));
if (fileName.Length > 1)
if (fileName[0] == '.')
fileName = "dot" + fileName.TrimStart('.');
return fileName;
}
private static void Main(string[] args)
{
Start();
}
private static void Start()
{
var web = new HtmlWeb();
var startDate = int.Parse(DateTime.Parse("2010-08-18").ToString("yyyyMMdd"));
var endDate = int.Parse(DateTime.Now.ToString("yyyyMMdd"));
const int startPageId = 49430;
const int endPageId = 124621;
for (int k = startDate; k <= endDate; k++)
{
for (int j = startPageId; j <= endPageId; j++)
{
string cnblogs = http://xxxxxxxx/ + k + "/" + j + ".html"; //此处省略……源码内详
HtmlDocument doc = web.Load(cnblogs);
var titles = doc.DocumentNode.SelectNodes("//title");
var titleName = j.ToString();
if( titles!=null && titles.Count>0)
titleName = titles[0].InnerText;
HtmlNode node = doc.GetElementbyId("ks_xp");
if (node == null)
{
continue;
}
foreach (HtmlNode child in node.SelectNodes("//img"))
{
if (child.Attributes["src"] == null)
continue;
string imgurl = child.Attributes["src"].Value;
DownLoadImg(imgurl, k + "", CleanInvalidFileName(titleName));
Console.WriteLine("正在下载:" + titleName + " " + imgurl);
}
}
}
//善后
CleanEmptyFolders();
}
private static void CleanEmptyFolders()
{
var rootFolders = Environment.CurrentDirectory + "\\Images\\";
var folders = Directory.GetDirectories(rootFolders, "*.*", SearchOption.AllDirectories);
foreach( var f in folders)
{
if (Directory.GetFiles(f, "*.*", SearchOption.AllDirectories).Length == 0)
Directory.Delete(f);
}
}
private static void DownLoadImg(string url, string folderName, string subFolderName)
{
var fileName = CleanInvalidFileName(url.Substring(url.LastIndexOf("/") + 1));
var fileFolder = Environment.CurrentDirectory + "\\Images\\" + folderName + "\\" + subFolderName + "\\" ;
if (!Directory.Exists(fileFolder))
Directory.CreateDirectory(fileFolder);
fileName = fileFolder + fileName;
try
{
Wc.DownloadFile(url, fileName);
}
catch (Exception ex)
{
Console.WriteLine(ex.Message);
}
}
}
}
using System;
using System.IO;
using System.Linq;
using System.Net;
using HtmlAgilityPack;
#endregion
namespace DownloadImages
{
internal class Program
{
private static readonly WebClient Wc = new WebClient();
private static readonly char[] InvalidFileNameChars = new[]
{
'"',
'<',
'>',
'|',
'\0',
'\u0001',
'\u0002',
'\u0003',
'\u0004',
'\u0005',
'\u0006',
'\a',
'\b',
'\t',
'\n',
'\v',
'\f',
'\r',
'\u000e',
'\u000f',
'\u0010',
'\u0011',
'\u0012',
'\u0013',
'\u0014',
'\u0015',
'\u0016',
'\u0017',
'\u0018',
'\u0019',
'\u001a',
'\u001b',
'\u001c',
'\u001d',
'\u001e',
'\u001f',
':',
'*',
'?',
'\\',
'/'
};
public static string CleanInvalidFileName(string fileName)
{
fileName = fileName + "";
fileName = InvalidFileNameChars.Aggregate(fileName, (current, c) => current.Replace(c + "", ""));
if (fileName.Length > 1)
if (fileName[0] == '.')
fileName = "dot" + fileName.TrimStart('.');
return fileName;
}
private static void Main(string[] args)
{
Start();
}
private static void Start()
{
var web = new HtmlWeb();
var startDate = int.Parse(DateTime.Parse("2010-08-18").ToString("yyyyMMdd"));
var endDate = int.Parse(DateTime.Now.ToString("yyyyMMdd"));
const int startPageId = 49430;
const int endPageId = 124621;
for (int k = startDate; k <= endDate; k++)
{
for (int j = startPageId; j <= endPageId; j++)
{
string cnblogs = http://xxxxxxxx/ + k + "/" + j + ".html"; //此处省略……源码内详
HtmlDocument doc = web.Load(cnblogs);
var titles = doc.DocumentNode.SelectNodes("//title");
var titleName = j.ToString();
if( titles!=null && titles.Count>0)
titleName = titles[0].InnerText;
HtmlNode node = doc.GetElementbyId("ks_xp");
if (node == null)
{
continue;
}
foreach (HtmlNode child in node.SelectNodes("//img"))
{
if (child.Attributes["src"] == null)
continue;
string imgurl = child.Attributes["src"].Value;
DownLoadImg(imgurl, k + "", CleanInvalidFileName(titleName));
Console.WriteLine("正在下载:" + titleName + " " + imgurl);
}
}
}
//善后
CleanEmptyFolders();
}
private static void CleanEmptyFolders()
{
var rootFolders = Environment.CurrentDirectory + "\\Images\\";
var folders = Directory.GetDirectories(rootFolders, "*.*", SearchOption.AllDirectories);
foreach( var f in folders)
{
if (Directory.GetFiles(f, "*.*", SearchOption.AllDirectories).Length == 0)
Directory.Delete(f);
}
}
private static void DownLoadImg(string url, string folderName, string subFolderName)
{
var fileName = CleanInvalidFileName(url.Substring(url.LastIndexOf("/") + 1));
var fileFolder = Environment.CurrentDirectory + "\\Images\\" + folderName + "\\" + subFolderName + "\\" ;
if (!Directory.Exists(fileFolder))
Directory.CreateDirectory(fileFolder);
fileName = fileFolder + fileName;
try
{
Wc.DownloadFile(url, fileName);
}
catch (Exception ex)
{
Console.WriteLine(ex.Message);
}
}
}
}
测试程序和源码下载:
posted @ 2012-02-16 21:31 萧寒 阅读(416) 评论(1) 编辑
纪念不用 Delphi 开发7周年
函数,获取web page文本,识别字符集编码;
1 function CreateHttpRequest(proxyServer: string = ''; proxyPort: integer = 0):
2 TIdHTTP;
3 function DecodeHttpRequestText(InString: string): string;
4 implementation
5
6 {$R *.dfm}
7
8 function DecodeHttpRequestText(InString: string): string;
9 begin
10 Result := UpperCase(InString);
11 //google,baidu,cnblogs,localhost等测试ok...
12 if (Pos('CHARSET=', Result) = 0) or (pos('=UTF-', Result) <> 0) then
13 InString := Utf8Decode(InString);
14 Result := InString;
15 end;
16
17 function CreateHttpRequest(proxyServer: string = ''; proxyPort: integer = 0):
18 TIdHTTP;
19 begin
20 Result := TIdHTTP.Create(nil);
21 with Result do
22 begin
23 HandleRedirects := true;
24 HTTPOptions := [hoForceEncodeParams];
25 ReadTimeout := 30000;
26 Request.Accept :=
27 'image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/x-shockwave-flash, */*';
28 Request.AcceptLanguage := 'zh-cn';
29 Request.ContentType := 'application/x-www-form-urlencoded';
30 Request.UserAgent :=
31 'Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; .NET CLR 4.0)';
32 if (proxyServer <> '') then
33 proxyParams.ProxyServer := proxyServer; //'代理服务器地址';
34 if proxyPort <> 0 then
35 proxyParams.ProxyPort := proxyPort; //'代理服务器端口';
36 end;
37 end;
38
39 procedure TForm1.btn1Click(Sender: TObject);
40 var
41 getstr: string;
42 begin
43 mmo1.Lines.Clear;
44 getstr :=DecodeHttpRequestText( CreateHttpRequest().Get(edt1.Text));
45 mmo1.Lines.Add(getstr);
46
47 end;
2 TIdHTTP;
3 function DecodeHttpRequestText(InString: string): string;
4 implementation
5
6 {$R *.dfm}
7
8 function DecodeHttpRequestText(InString: string): string;
9 begin
10 Result := UpperCase(InString);
11 //google,baidu,cnblogs,localhost等测试ok...
12 if (Pos('CHARSET=', Result) = 0) or (pos('=UTF-', Result) <> 0) then
13 InString := Utf8Decode(InString);
14 Result := InString;
15 end;
16
17 function CreateHttpRequest(proxyServer: string = ''; proxyPort: integer = 0):
18 TIdHTTP;
19 begin
20 Result := TIdHTTP.Create(nil);
21 with Result do
22 begin
23 HandleRedirects := true;
24 HTTPOptions := [hoForceEncodeParams];
25 ReadTimeout := 30000;
26 Request.Accept :=
27 'image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/x-shockwave-flash, */*';
28 Request.AcceptLanguage := 'zh-cn';
29 Request.ContentType := 'application/x-www-form-urlencoded';
30 Request.UserAgent :=
31 'Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; .NET CLR 4.0)';
32 if (proxyServer <> '') then
33 proxyParams.ProxyServer := proxyServer; //'代理服务器地址';
34 if proxyPort <> 0 then
35 proxyParams.ProxyPort := proxyPort; //'代理服务器端口';
36 end;
37 end;
38
39 procedure TForm1.btn1Click(Sender: TObject);
40 var
41 getstr: string;
42 begin
43 mmo1.Lines.Clear;
44 getstr :=DecodeHttpRequestText( CreateHttpRequest().Get(edt1.Text));
45 mmo1.Lines.Add(getstr);
46
47 end;
posted @ 2012-01-11 19:04 萧寒 阅读(272) 评论(0) 编辑
| 电信 DNS 列表 -- 共 32 条 (按拼音排序) | |||||
| 电信 | A安徽 | 202.102.192.68 | 202.102.199.68 | ||
| 电信 | A澳门 | 202.175.3.8 | 202.175.3.3 | ||
| 电信 | B北京 | 202.96.199.133 | 202.96.0.133 | 202.106.0.20 | 202.106.148.1 |
| 电信 | C重庆 | 61.128.128.68 | 61.128.192.68 | ||
| 电信 | F福建 | 202.101.115.55 | 218.85.157.99 | ||
| 电信 | G甘肃 | 202.100.64.68 | 61.178.0.93 | ||
| 电信 | G广东 | 202.96.128.86 | 202.96.128.166 | 202.96.134.133 | 202.96.128.68 |
| 电信 | G广西 | 202.103.224.68 | 202.103.225.68 | ||
| 电信 | G贵州 | 202.98.192.67 | 202.98.198.167 | ||
| 电信 | H海南 | 202.100.192.68 | 202.100.199.8 | ||
| 电信 | H河北 | 219.150.32.132 | |||
| 电信 | H黑龙江 | 219.150.32.132 | 219.146.0.130 | 219.147.198.230 | |
| 电信 | H河南 | 219.150.150.150 | 222.88.88.88 | 222.85.85.85 | |
| 电信 | H湖北 | 202.103.0.68 | 202.103.24.68 | 202.103.0.117 | 202.103.44.150 |
| 电信 | H湖南 | 202.103.96.112 | 202.103.96.68 | 220.170.0.18 | 61.187.91.18 |
| 电信 | J江苏 | 61.177.7.1 | 61.147.37.1 | 218.2.135.1 | 221.228.255.1 |
| 电信 | J江西 | 202.101.224.68 | 202.101.226.69 | ||
| 电信 | J吉林 | 219.149.194.55 | |||
| 电信 | L辽宁 | 219.150.32.132 | |||
| 电信 | N内蒙古 | 219.150.32.132 | 219.146.0.130 | ||
| 电信 | N宁夏 | 202.100.96.68 | 222.75.152.129 | ||
| 电信 | Q青海 | 202.100.128.68 | |||
| 电信 | S山东 | 219.146.0.130 | |||
| 电信 | S上海 | 202.96.209.5 | 202.96.209.133 | 202.96.199.133 | |
| 电信 | S陕西 | 218.30.19.40 | 61.134.1.4 | ||
| 电信 | S四川 | 61.139.2.69 | 202.98.96.68 | 218.6.200.139 | 61.139.54.66 |
| 电信 | T台湾 | 168.95.1.1 | 168.95.192.1 | ||
| 电信 | T天津 | 202.99.104.68 | |||
| 电信 | X香港 | 205.252.144.126 | 218.102.62.71 | ||
| 电信 | X新疆 | 61.128.114.166 | 61.128.114.133 | 61.128.99.133 | 61.128.99.134 |
| 电信 | Y云南 | 222.172.200.68 | 61.166.150.123 | ||
| 电信 | Z浙江 | 60.191.244.5 | 202.96.113.34 | 220.189.127.107 | 60.191.134.206 |
| 网通 DNS 列表 -- 共 23 条 (按拼音排序) | |||||
| 网通 | A安徽 | 218.104.78.2 | |||
| 网通 | B北京 | 202.106.0.20 | 202.106.196.115 | ||
| 网通 | G甘肃 | 221.7.34.10 | |||
| 网通 | G广东 | 221.4.66.66 | 210.21.4.130 | 221.4.8.1 | |
| 网通 | G广西 | 202.103.229.40 | 221.7.128.68 | ||
| 网通 | H海南 | 221.11.132.2 | |||
| 网通 | H河北 | 202.99.160.68 | 202.99.166.4 | ||
| 网通 | H黑龙江 | 202.97.224.68 | 202.97.224.69 | ||
| 网通 | H河南 | 202.102.224.68 | 202.102.227.68 | ||
| 网通 | H湖北 | 218.104.111.112 | 218.104.111.114 | ||
| 网通 | H湖南 | 58.20.127.170 | 58.20.57.4 | ||
| 网通 | J江苏 | 221.6.4.66 | 221.6.96.177 | 218.104.32.106 | |
| 网通 | J江西 | 220.248.192.12 | 220.248.192.13 | ||
| 网通 | J吉林 | 202.98.0.68 | 202.98.5.68 | ||
| 网通 | L辽宁 | 202.96.69.38 | 202.96.64.68 | ||
| 网通 | N内蒙古 | 202.99.224.8 | 202.99.224.67 | 202.99.224.68 | |
| 网通 | S山东 | 202.102.152.3 | 202.102.134.68 | ||
| 网通 | S上海 | 210.22.70.3 | 210.22.84.3 | 210.52.207.2 | |
| 网通 | S山西 | 202.99.192.66 | 202.99.192.68 | ||
| 网通 | S四川 | 221.10.251.196 | |||
| 网通 | T天津 | 202.99.96.68 | 202.99.64.69 | ||
| 网通 | Y云南 | 221.3.131.9 | 221.3.131.10 | ||
| 网通 | Z浙江 | 221.12.1.228 | 221.12.33.228 | 221.12.65.228 | 218.108.248.200 |
posted @ 2011-11-08 09:30 萧寒 阅读(357) 评论(0) 编辑
现象参考:Visual studio 2010 中文版正式版无法安装Silverlight4 Tools的解决办法
解决办法如下:
编辑:ParameterInfo.xml
替换:1033 为 2052
保存:运行 SPInstaller.exe 完成安装
请详细阅读上个sl4 tools的文章内的步骤;不详谈,写博也没什么兴趣了。
posted @ 2011-09-02 14:56 萧寒 阅读(718) 评论(0) 编辑
昨天收到一个留言,说到Resharper 6 已经出来了,上次发布的 5.0 keygen 已经不能使用了,所以这次更新了下,让其支持 6.x ;和 5.x 的版本不能混用。

Resharper 6.x 下载地址:/Files/Chinasf/Resharper6Keygen.rar
Resharper 5.x 下载地址:http://www.cnblogs.com/Chinasf/archive/2010/01/08/1642095.html
Resharper 5.x 在线注册机(Silverlight):http://www.cnblogs.com/Chinasf/archive/2010/03/12/1684292.html
仅供学习和研究使用,下载后请24小时内删除。
2011/7/5
17:44 updated!
posted @ 2011-07-05 13:35 萧寒 阅读(6371) 评论(20) 编辑
摘要: 该软件是为了对付那些不友好的软件而开发;像迅雷、PPS、QQ,它们的主程序退出了,但还有静默程序在运行;这些静默程序不光浪费内存,而且还占用网络带宽,非常的讨厌;如果每次手动关闭它们的进程,初级用户不会,而且每次这样操作很麻烦;这个软件就是解决每次手工的问题,可以随系统自动启动;只要设置好进程名,即可实现监视。配置方法:进程名之间用'->'符号分割 主进程->静默进程1->静默进程2->静默进程3->....静默进程N例 如:ppstream.exe->ppsap.exe检测原理:当主进程结束后,将关闭它产生的静默进程;下载地址/Files/Chinasf/DaemonProcess阅读全文
posted @ 2010-12-12 00:06 萧寒 阅读(507) 评论(4) 编辑
摘要: 很多人都做出了silverlight 版本的xps 浏览器,但很多人都卡在了xps printer输出的xps格式上,结果只能浏览Office saveas 导出的xps,而xps printer输出的xps文件一概不认;今天就来说说这个xps printer 输出的格式问题 当xps文档是打印输出的,导致的现象是如下这样子 1、Application.GetResourceS...阅读全文
posted @ 2010-09-24 14:16 萧寒 阅读(1014) 评论(2) 编辑
摘要: Vs2005 的环境连不上的主要原因是 sp1包打在安装teamExplorer之前导致的正确的安装顺序:1、vs20052、2005版的团队资源管理器3、打vs2005 sp1补丁4、打vs2005 向前兼容的 tfs2010的补丁 http://www.microsoft.com/downloads/details.aspx?displaylang=zh-cn&FamilyID=222...阅读全文
posted @ 2010-08-25 13:47 萧寒 阅读(942) 评论(1) 编辑
摘要: 1.软件开发价格估算方法 软件开发价格与工作量、商务成本、国家税收和企业利润等项有关。为了便于计算,给出一个计算公式:软件开发价格 = 开发工作量 × 开发费用/人·月1.1开发工作量 软件开发工作量与估算工作量经验值、风险系数和复用系数等项有关:软件开发工作量 = 估算工作量经验值 × 风险系数 × 复用系数1.1.1估算工作量经验值(以A来表示) 软什开...阅读全文
posted @ 2010-07-17 21:19 萧寒 阅读(2663) 评论(0) 编辑
摘要: 如果你也碰到这个问题,那么算你运气好;昨日下了园子里vs2010的msdn 版本,并在自家机器上安装了下,xp 系统,安装过程没问题,但是发觉无法安装 silverlight4_tool,不安装这个,最近的项目编译不了;项目是英文版vs2010开发的,我以为是自己的台式机环境出问题了;然后我到自己的thinkpad t400上win7环境里装;装好后发觉还是无法正常安装阅读全文
posted @ 2010-05-30 22:28 萧寒 阅读(10931) 评论(34) 编辑
摘要: 无忧JSON编辑器【辅助工具】<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head&...阅读全文
posted @ 2010-05-09 16:13 萧寒 阅读(1169) 评论(0) 编辑
摘要: 用Ubuntu破解wep无线加密2009-09-29 09:50一、安装ubuntu和aircrack-ng 先安装 Ubuntu最新版,更新系统到最新终端中输入 sudo apt-get install aircrack-ng 安装aircrack-ng没联网的话 到别的电脑上网下载aircrack-ng Ubuntu DEB安装包 安装二、破解过程 1、启动无线网卡的监控模式,在终端中输入:s...阅读全文
posted @ 2010-05-07 10:13 萧寒 阅读(3706) 评论(1) 编辑
摘要: 在 ubuntu 下 使用 虚拟光驱 很简单的 ,和 window下需要安装专门的软件不同 ,只要 运行下面的命令就可以查看 其中的内容了 :例:#mount -t iso9660 -o loop 你的iso文件名字.iso /media/cdrom0 (没有请先新建)这样你就可以在 /media/cdrom0 下查看到 ISO文件的内容了 。更 详细的内容如下:(转自: http://sch...阅读全文
posted @ 2010-05-06 13:56 萧寒 阅读(941) 评论(1) 编辑
摘要: Ubuntu Tweak工具: 国产的Ubuntu实用配置工具,相当于Ubuntu下的优化大师。本文用于配置第三方源和实用软件。安装此软件后可以单击“应用程序/系统工具 /Ubuntu Tweak”打开。 Ailurus 工具:Ubuntu增强软件,可以安装多种专业软件,搜索最快的源和调整系统隐藏设置。安装此软件后可以单击“应用程序/系统工具 /Ailurus&...阅读全文
posted @ 2010-05-06 11:06 萧寒 阅读(557) 评论(0) 编辑