CSkin博客
标题: 【网络爬虫类】HttpHelper网络爬虫类,Cookie、ssl、https都支持 [打印本页]
作者: 乔克斯 时间: 2014-8-21 12:24
标题: 【网络爬虫类】HttpHelper网络爬虫类,Cookie、ssl、https都支持
HttpHelper网络爬虫类,Cookie、ssl、https都支持
C#HttpHelper实现了C#HttpWebRequest抓取时无视编码,无视证书,无视Cookie,并且实现的代理的功能,使用它您可以进行Get和Post请求,
可以很方便 的设置Cookie,证书,代理,编码问题您不用管,因为类会自动为您识别网页的编码。
这个类是我以前写百度,和网络蜘蛛时使用的,经过上千万个网站的测试,上万个网站抓取的例子总结出来的,中间的方法也是我实验了很久之后方案,所以大家可以放心使用。
我不敢说100%,但是应该是99%的网站都没有问题,都可以无视编码,证书,和Cookie,如果你确实发现那个网站在使用本类过程中有问题,出现乱码,或者是获取不了,不能带Cookie,不能带证书等问题,我非常乐意您能联系我,提出您的问题,您也可以直接回复本帖子,我会第一时间进行解答。
不要动不动就说我的类不行,类有Bug,获取不到Cookie,无法登录之类的,先看看教程,然后再看看自己获取的包是否有问题。类的Bug是很难出现的。
在webBrowser中取Cookie的方法:
[C#] 纯文本查看 复制代码
//取当前webBrowser登录后的Cookie值
[DllImport("wininet.dll", CharSet = CharSet.Auto, SetLastError = true)]
static extern bool InternetGetCookieEx(string pchURL, string pchCookieName, StringBuilder pchCookieData, ref int pcchCookieData, int dwFlags, object lpReserved);
//取出Cookie,当登录后才能取
private static string GetCookieString(string url)
{
// Determine the size of the cookie
int datasize = 256;
StringBuilder cookieData = new StringBuilder(datasize);
if (!InternetGetCookieEx(url, null, cookieData, ref datasize, 0x00002000, null))
{
if (datasize < 0)
return null;
// Allocate stringbuilder large enough to hold the cookie
cookieData = new StringBuilder(datasize);
if (!InternetGetCookieEx(url, null, cookieData, ref datasize, 0x00002000, null))
return null;
}
return cookieData.ToString();
}
去掉所有的Html代码:
[C#] 纯文本查看 复制代码
/// <summary>
/// 过滤html标签
/// </summary>
/// <param name="strHtml">html的内容</param>
/// <returns></returns>
public static string StripHTML(string stringToStrip)
{
// paring using RegEx //
stringToStrip = Regex.Replace(stringToStrip, "</p(?:\\s*)>(?:\\s*)<p(?:\\s*)>", "\n\n", RegexOptions.IgnoreCase | RegexOptions.Compiled);
stringToStrip = Regex.Replace(stringToStrip, "
", "\n", RegexOptions.IgnoreCase | RegexOptions.Compiled);
stringToStrip = Regex.Replace(stringToStrip, "\"", "''", RegexOptions.IgnoreCase | RegexOptions.Compiled);
stringToStrip = StripHtmlXmlTags(stringToStrip);
return stringToStrip;
}
private static string StripHtmlXmlTags(string content)
{
return Regex.Replace(content, "<[^>]+>", "", RegexOptions.IgnoreCase | RegexOptions.Compiled);
}
设置URl格式的问题
public static string URLDecode(string text)
{
return HttpUtility.UrlDecode(text, Encoding.Default);
}
public static string URLEncode(string text)
{
return HttpUtility.UrlEncode(text, Encoding.Default);
}
HttpHelper类使用方法:
[C#] 纯文本查看 复制代码
HttpHelper http = new HttpHelper();
HttpItem item = new HttpItem()
{
URL = "http://www.cskin.net",//URL 必需项
Encoding = null,//编码格式(utf-8,gb2312,gbk) 可选项 默认类会自动识别
//Encoding = Encoding.Default,
Method = "get",//URL 可选项 默认为Get
Timeout = 100000,//连接超时时间 可选项默认为100000
ReadWriteTimeout = 30000,//写入Post数据超时时间 可选项默认为30000
IsToLower = false,//得到的HTML代码是否转成小写 可选项默认转小写
Cookie = "",//字符串Cookie 可选项
UserAgent = "Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Trident/5.0)",//用户的浏览器类型,版本,操作系统 可选项有默认值
Accept = "text/html, application/xhtml+xml, */*",// 可选项有默认值
ContentType = "text/html",//返回类型 可选项有默认值
Referer = "http://www.cskin.net",//来源URL 可选项
Allowautoredirect = true,//是否根据301跳转 可选项
CerPath = "d:\\123.cer",//证书绝对路径 可选项不需要证书时可以不写这个参数
Connectionlimit = 1024,//最大连接数 可选项 默认为1024
Postdata = "C:\\PERKYSU_20121129150608_ScrubLog.txt",//Post数据 可选项GET时不需要写
PostDataType = PostDataType.FilePath,//默认为传入String类型,也可以设置PostDataType.Byte传入Byte类型数据
ProxyIp = "192.168.1.105:8015",//代理服务器ID 端口可以直接加到后面以:分开就行了 可选项 不需要代理 时可以不设置这三个参数
ProxyPwd = "123456",//代理服务器密码 可选项
ProxyUserName = "administrator",//代理服务器账户名 可选项
ResultType = ResultType.Byte,//返回数据类型,是Byte还是String
PostdataByte = System.Text.Encoding.Default.GetBytes("测试一下"),//如果PostDataType为Byte时要设置本属性的值
CookieCollection = new System.Net.CookieCollection(),//可以直接传一个Cookie集合进来
};
item.Header.Add("测试Key1", "测试Value1");
item.Header.Add("测试Key2", "测试Value2");
//得到HTML代码
HttpResult result = http.GetHtml(item);
//取出返回的Cookie
string cookie = result.Cookie;
//返回的Html内容
string html = result.Html;
if (result.StatusCode == System.Net.HttpStatusCode.OK)
{
//表示访问成功,具体的大家就参考HttpStatusCode类
}
//表示StatusCode的文字说明与描述
string statusCodeDescription = result.StatusDescription;
//把得到的Byte转成图片
Image img = byteArrayToImage(result.ResultByte);
}
/// <summary>
/// 字节数组生成图片
/// </summary>
/// <param name="Bytes">字节数组</param>
/// <returns>图片</returns>
private Image byteArrayToImage(byte[] Bytes)
{
MemoryStream ms = new MemoryStream(Bytes);
Image outputImg = Image.FromStream(ms);
return outputImg;
}}
最简单的Post与Get的写法:
[C#] 纯文本查看 复制代码
HttpHelper http = new HttpHelper();
HttpItem item = new HttpItem()
{
URL = "http://www.sufeinet.com",//URL这里都是测试 必需项
Method = "get",//URL 可选项 默认为Get
};
//得到HTML代码
HttpResult result = http.GetHtml(item);
item = new HttpItem()
{
URL = "http://www.cskin.net",//URL这里都是测试URl 必需项
Encoding = null,//编码格式(utf-8,gb2312,gbk) 可选项 默认类会自动识别
//Encoding = Encoding.Default,
Method = "post",//URL 可选项 默认为Get
Postdata = "user=123123&pwd=1231313"
};
//得到新的HTML代码
result = http.GetHtml(item);
HttpHelper设置Header参考的方法:
[C#] 纯文本查看 复制代码
HttpHelper http = new HttpHelper();
HttpItem item = new HttpItem()
{
URL = "http://www.cskin.net",//URL 必需项
Encoding = null,//编码格式(utf-8,gb2312,gbk) 可选项 默认类会自动识别
//Encoding = Encoding.Default,
Method = "get",//URL 可选项 默认为Get
};
item.Header.Add("测试Key1", "测试Value1");
item.Header.Add("测试Key2", "测试Value2");
//得到HTML代码
HttpResult result = http.GetHtml(item);
//取出返回的Cookie
string cookie = result.Cookie;
//返回的Html内容
string html = result.Html;
if (result.StatusCode == System.Net.HttpStatusCode.OK)
{
//表示访问成功,具体的大家就参考HttpStatusCode类
}
//表示StatusCode的文字说明与描述
string statusCodeDescription = result.StatusDescription;
HttpHelper获取图片的方式:
[C#] 纯文本查看 复制代码
HttpHelper http = new HttpHelper();
HttpItem item = new HttpItem()
{
URL = "http://www.cskin.net",//URL 必需项
Encoding = null,//编码格式(utf-8,gb2312,gbk) 可选项 默认类会自动识别
//Encoding = Encoding.Default,
ResultType = ResultType.Byte
};
//得到HTML代码
HttpResult result = http.GetHtml(item);
if (result.StatusCode == System.Net.HttpStatusCode.OK)
{
//表示访问成功,具体的大家就参考HttpStatusCode类
}
//表示StatusCode的文字说明与描述
string statusCodeDescription = result.StatusDescription;
//把得到的Byte转成图片
Image img = byteArrayToImage(result.ResultByte);
}
/// <summary>
/// 字节数组生成图片
/// </summary>
/// <param name="Bytes">字节数组</param>
/// <returns>图片</returns>
private Image byteArrayToImage(byte[] Bytes)
{
MemoryStream ms = new MemoryStream(Bytes);
Image outputImg = Image.FromStream(ms);
return outputImg;
}
二次或多次使用Cookie的方式:
[C#] 纯文本查看 复制代码
HttpHelper http = new HttpHelper();
HttpItem item = new HttpItem()
{
URL = "http://www.cskin.net",//URL这里都是测试 必需项
Encoding = null,//编码格式(utf-8,gb2312,gbk) 可选项 默认类会自动识别
//Encoding = Encoding.Default,
Method = "get",//URL 可选项 默认为Get
};
//得到HTML代码
HttpResult result = http.GetHtml(item);
item = new HttpItem()
{
URL = "http://www.cskin.net",//URL这里都是测试URl 必需项
Encoding = null,//编码格式(utf-8,gb2312,gbk) 可选项 默认类会自动识别
//Encoding = Encoding.Default,
Method = "get",//URL 可选项 默认为Get
Cookie = result.Cookie,
};
//得到新的HTML代码
result = http.GetHtml(item);
CookieCollection类型的Cookie使用方法:
[C#] 纯文本查看 复制代码
HttpHelper http = new HttpHelper();
HttpItem item = new HttpItem()
{
URL = "http://www.cskin.net",//URL这里都是测试 必需项
Encoding = null,//编码格式(utf-8,gb2312,gbk) 可选项 默认类会自动识别
//Encoding = Encoding.Default,
Method = "get",//URL 可选项 默认为Get
ResultCookieType = ResultCookieType.CookieCollection
};
//得到HTML代码
HttpResult result = http.GetHtml(item);
item = new HttpItem()
{
URL = "http://www.cskin.net",//URL这里都是测试URl 必需项
Encoding = null,//编码格式(utf-8,gb2312,gbk) 可选项 默认类会自动识别
//Encoding = Encoding.Default,
Method = "get",//URL 可选项 默认为Get
CookieCollection = result.CookieCollection,
ResultCookieType = ResultCookieType.CookieCollection
};
//得到新的HTML代码
result = http.GetHtml(item);
案例源码下载:
HttpHelper网络爬虫类.rar
(6.76 KB, 下载次数: 2180, 售价: 1 金钱)
作者: gjfabc 时间: 2014-9-4 16:24
下载一个,研究一下,谢谢分享。
作者: jiasongmao 时间: 2014-9-12 13:45
做了简单的测试,这个类确实写的不错。
作者: bbspcs 时间: 2014-10-31 11:38
支持一下!
作者: 判囚 时间: 2014-11-1 16:54
强力的支持哈
作者: longgun119 时间: 2014-12-17 10:43
下载一个,研究一下,谢谢分享。
作者: evilatom 时间: 2014-12-29 16:08
下载一个,研究一下,谢谢分享。
作者: 傲风残月 时间: 2014-12-30 16:54
学习学习,好想很叼
作者: ssxh_tanhc 时间: 2015-1-4 15:24
GOOD JOB, THANKS
作者: kunkun0921 时间: 2015-4-13 15:30
这个应该是苏飞的HttpHelper类把
作者: offcharge 时间: 2015-9-12 00:16
支持 试试看
作者: ZBQ 时间: 2015-10-28 00:24
很给力的,好用
作者: sfbirp 时间: 2015-10-29 11:05
很不错的感觉
作者: easy 时间: 2015-10-29 15:13
个人觉得很不错
作者: mcevilrock 时间: 2015-10-29 19:50
玄机论坛HttpCode v1.9.8.2 更新日期10-06/2015
http://bbs.msdn5.com/thread-11-1-1.html
(出处: 玄机论坛-C#论坛-玄机宝盒-玄机类库-C#)
分分钟甩他几条街....
作者: 13852150112 时间: 2015-10-29 20:25
下载学习一下,支持分享。
作者: 13852150112 时间: 2015-10-29 20:25
下载学习一下,支持分享。
作者: the1244 时间: 2015-11-5 01:31
支持一下!
作者: 见钱开眼 时间: 2015-11-5 14:57
下载一个,研究一下,谢谢分享。正需要这方面的东西
作者: osuerBA 时间: 2015-11-12 15:11
好强大的东西,跪不起,尿一地www
作者: wzy7676 时间: 2015-11-23 17:58
好,下来研究!
作者: 菟紫 时间: 2015-11-24 08:59
好久没上来了 顶下_(:з」∠)_
作者: 舞影雾踪 时间: 2016-1-19 14:11
不错,多谢,学习
作者: jakebug 时间: 2016-1-20 18:49
看上去不错。
作者: liqud 时间: 2016-1-27 09:58
乔总,你这个跟另外一个叫苏飞的人做的东西好像差不多啊,还是你们就是一个人?
作者: 乔克斯 时间: 2016-1-27 14:56
不是同一个人
作者: wpf 时间: 2016-2-26 16:50
想看看,好东西,谢谢
作者: C#NET 时间: 2016-2-27 22:16
谢谢楼主分享
作者: 小哲 时间: 2016-3-29 00:22
,6666可以
作者: 344155731 时间: 2016-5-12 15:20
请问下如何用这个类获取到webBrowser的cookie并在使用这个公共类进行写到这webBrowser的cookie进行操作
作者: 乔克斯 时间: 2016-5-12 16:37
webBrowser1可以直接操作。webBrowser1.Document.Cookie
作者: 杨员外 时间: 2016-11-18 10:01
这个有时间要研究一下了
作者: jackysongzh 时间: 2016-11-18 23:11
非常有参考价值啊
作者: jackysongzh 时间: 2016-11-18 23:11
非常有参考价值啊
作者: jackysongzh 时间: 2016-11-18 23:23
非常有参考价值啊
作者: 沉默如谜的呼吸 时间: 2017-7-20 19:58
支持一下!!!!!!!!!!!!!!
作者: hominidclint 时间: 2017-8-5 17:14
xue xi le,ganxie fenxiang
作者: cd37ycs 时间: 2018-1-28 13:42
下载一个,研究一下,谢谢分享。
作者: sd1888636 时间: 2018-2-13 10:58
好东西 收藏
作者: succfu22 时间: 2018-2-25 00:10
谢谢,我正在整理,到时会把类库发布
作者: yocei 时间: 2018-2-28 15:01
下载一个,研究一下,谢谢分享。
作者: yocei 时间: 2018-2-28 15:01
下载一个,研究一下,谢谢分享。
作者: yocei 时间: 2018-2-28 15:02
下载一个,研究一下,谢谢分享。
作者: bbs.csk 时间: 2018-4-12 02:51
研究一下,谢谢分享。
作者: xiaopyzzzz 时间: 2018-5-21 10:10
dddddddddddddddddddddddddddddddddd
作者: xzp132706 时间: 2018-6-23 13:41
下载一个,研究一下,谢谢分享
作者: anxiaohuai 时间: 2018-6-25 21:59
66666666666666666666666
作者: msms 时间: 2019-2-14 20:11
下载研究一下
作者: 不同的世界 时间: 2019-2-21 12:31
学习一下
作者: XGA 时间: 2019-12-3 22:31
这个网站太赞了
作者: yy1ww2tt30 时间: 2019-12-13 07:47
写的不错
作者: bigboss520 时间: 2020-5-16 00:24
感谢您的分享,正需要例子
作者: sdo1jp 时间: 2021-2-4 08:36
感谢分享,LZ辛苦了~
作者: 快乐程序 时间: 2021-5-12 15:44
下载来学习学习,感谢分享66
作者: livehu5188 时间: 2023-10-20 10:55
谢谢楼主分享 下载之后 学习看看
欢迎光临 CSkin博客 (http://bbs.cskin.net/) |
Powered by Discuz! X3.2 |