求一个C#的网页数据抓取源代码

cjk_0607 2009-05-18 09:08:01
谁能给个C#的网页数据抓取源代码,最好是完整的,用VS2008开发的
先谢谢了
...全文
6433 36 打赏 收藏 转发到动态 举报
写回复
用AI写文章
36 条回复
切换为时间正序
请发表友善的回复…
发表回复
jacksoncan 2012-08-17
  • 打赏
  • 举报
回复
路过,我也想要
yksyuan 2012-08-17
  • 打赏
  • 举报
回复


/// <summary>获取网页源代码
///
/// </summary>
/// <param name="url">目标网页地址</param>
/// <param name="code">如果目标网页是utf-8编码的在此输入utf8,若是gb2312编码的则不用输入</param>
/// <returns></returns>
public static string GetWebresourceFile(string url, string code)
{

WebClient myWebClient = new WebClient();
byte[] myDataBuffer = myWebClient.DownloadData(url);
string SourceCode = "";
if ("utf8" == code)
{
SourceCode = Encoding.UTF8.GetString(myDataBuffer); //url对应的网页是 utf-8 的编码则是用这个
}
else
{
SourceCode = Encoding.Default.GetString(myDataBuffer); //url对应的网页是 gb2312 的编码则是用这个
}

return SourceCode;
}


大大黑眼圈 2012-08-17
  • 打赏
  • 举报
回复
string str = @"D:\Raymond's Documents\My Pictures\247129.jpg";
FileStream fs = new FileStream(str, FileMode.Open, FileAccess.Read);
BinaryReader by = new BinaryReader(fs);
int length = (int)fs.Length;
byte[] imgbyte = by.ReadBytes(length);

MemoryStream ms = new MemoryStream(imgbyte);
ms.Seek(0, SeekOrigin.Begin);
Image image = Image.FromStream(ms);
DreamXzn 2012-08-17
  • 打赏
  • 举报
回复
我用PHP做过一个,你的需求是截取一部分代码存储在数据库吧?
在查询出来的时候又能显示网页的信息?
听可笑的承诺 2012-08-17
  • 打赏
  • 举报
回复
 protected void Page_Load(object sender, EventArgs e)
{
string strurl = "http://www.baidu.com"; //欲获取的网页地址

WebClient myWebClient = new WebClient(); //创建WebClient实例myWebClient

//获取或设置用于对向 Internet 资源的请求进行身份验证的网络凭据。
myWebClient.Credentials = CredentialCache.DefaultCredentials;

//从资源下载数据并返回字节数组。(加@是因为网址中间有"/"符号)
byte[] pagedata = myWebClient.DownloadData(strurl);

//以下两句每次只要使用一条即可,功能是一样是用来转换字符集,根据获取网站页面的字符编码选择
//string result=Encoding.Default.GetString(pagedata);
//如果获取网站页面采用的是GB2312,则使用这句
string result = Encoding.UTF8.GetString(pagedata);
//如果获取网站页面采用的是UTF-8,则使用这句
//因为我的博客使用了UTF-8编码,所以在这里我使用这句
Response.Write(result); //在WEB页中显示获取的内容
}


这个比较简单点。
青天流雲 2012-08-17
  • 打赏
  • 举报
回复
好东西,先谢个
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 的回复:]

大哥,这只是把网页的数据读取下,不过还是谢谢你!
最好还要有塞选标题和内容(静态HTML),然后把它插入数据库(SQLSERVER2005)
麻烦大家了,虚心向高手请教啊
[/Quote]
需求本身不明确还怪人家....
zagj11 2012-07-06
  • 打赏
  • 举报
回复
昨天主管突然找我,说月底有个游戏要发新补丁,但是没有新增部分的资料,找到一个网站却不知道怎么下载到我们的数据库中.
我看了一下,网页为了防抓取,都是用js来生成内容,不过还是让我找到具体位置,所有物品有3万多,需要的还要过滤,有用的只有3千多,人工来做几乎不太现实的,于是写了一个winform来抓它的信息来写到数据库中
动作在DocumentCompleted事件中完成.



private const string SQL_DATA = "select * from Table1";
private const string SQL_INSERT_1 = "insert into Table1 (WebID,Name,NeedLevel,Content) values (";
private const string Sql_INSERT_2 = ")";
private void webBrowser1_DocumentCompleted(object sender, WebBrowserDocumentCompletedEventArgs e)
{
string mydocument = webBrowser1.DocumentText;

//listBox1.Items.Add(mydocument);
string SQL_INSERT = string.Empty;
//取得页面中的物品等级
int mylevel = GetLevel(mydocument);
//取得页面中物品名称
string myname = GetName(mydocument);
if (!string.IsNullOrEmpty(myname))
{
SQL_INSERT = SQL_INSERT_1 + ID.ToString() + ",'" + myname + "'," + mylevel + ",'" + mydocument + "'" + Sql_INSERT_2;

SqlConnection cn = new SqlConnection();
cn.ConnectionString = SQL_CONNECTION;
SqlCommand sqlcmd = new SqlCommand(SQL_INSERT, cn);
cn.Open();
try
{
int tmp = sqlcmd.ExecuteNonQuery();
}
catch
{
throw new Exception("no good");
}
sqlcmd.Dispose();
cn.Close();
}
}
取得物品名称和等级:www.shiapifa.com

private string GetName(string mydocument)
{
if (string.IsNullOrEmpty(mydocument)) return string.Empty;
int pos_start = mydocument.IndexOf(".html\">", 0);
if (pos_start == -1) return string.Empty;
int pos_end = mydocument.IndexOf("</a></div>", 0);
if (pos_end == -1) return string.Empty;
if (pos_start >= pos_end) return string.Empty;
string name = string.Empty;
name = mydocument.Substring(pos_start + 7, pos_end - pos_start - 7);
return name;
}

private int GetLevel(string mydocument)
{
if (string.IsNullOrEmpty(mydocument))return 0;
int pos_start = mydocument.IndexOf("需要等级", 0);
if (pos_start == -1) return 0;
int pos_end = mydocument.IndexOf("</div>", pos_start);
if (pos_end == -1) return 0;
if (pos_start >= pos_end) return 0;
string Level = "0";
Level = mydocument.Substring(pos_start + 5, pos_end - pos_start - 5);
int intleve = 0;
try
{
intleve = Convert.ToInt32(Level);
}
catch
{
}
finally
{

}
return intleve;
}

无法判断浏览器是否完成加载,所以用timer控件来完成: www.wanxinyi.com

private const int START_ID = 1;
private const int END_ID = 40000;//32999;
private static int ID = 1;

private void timer1_Tick(object sender, EventArgs e)
{
if (ID < END_ID && !webBrowser1.IsBusy)
{
ID = ID + 1;
webBrowser1.Navigate("http://xxxx.com/xx.php?id=" + ID.ToString());

//listBox1.Items.Add(ID.ToString() + webBrowser1.DocumentText);

//InsertIntoDB(webBrowser1.DocumentText, ID);
textBox4.Text = ID.ToString();
}
}
timer的interval控制在1000ms,40000条数据用了11个多小时,从昨天晚上10点到今天早上,刚来的时候看到数据全都乖乖的在数据库呆着了.呵呵,搞定,交差...

jxyao 2012-07-05
  • 打赏
  • 举报
回复
小弟求一份 501764875@qq.com
谢谢
谢谢
谢谢
basfgfcu 2012-06-13
  • 打赏
  • 举报
回复
小弟急需一份,请发我QQ:317516596 谢谢了!
杨友山 2012-03-09
  • 打赏
  • 举报
回复
看来抓取还是挺多的啊
哂哂
安静写代码 2012-03-09
  • 打赏
  • 举报
回复
留个脚印,以后来看
wangaiping825 2012-03-09
  • 打赏
  • 举报
回复
楼主!小弟虚心求一份! 284849650@qq.com
jinwuchen 2011-11-28
  • 打赏
  • 举报
回复
好多高手前辈,晚辈也求教一份,谢谢1194239523@qq.com
流风csdn 2011-11-11
  • 打赏
  • 举报
回复
也发我一个楼主! 发我邮箱ywang@lentro.com
开发者孙小聪 2011-11-11
  • 打赏
  • 举报
回复

string netUrl = "http://www.265.com";
HttpWebRequest myWebRequest = (HttpWebRequest)WebRequest.Create(netUrl);
WebResponse resp = myWebRequest.GetResponse();
StreamReader oStreamRd = new StreamReader(resp.GetResponseStream(),Encoding.GetEncoding("GB2312"));
string content = oStreamRd.ReadToEnd();
Console.WriteLine(content);
Console.ReadLine();


mulk 2011-10-14
  • 打赏
  • 举报
回复
这个问题面临的好多噢,我是初学者,能否给发一份完整版的,谢谢了高手们!! 邮箱1192488985@qq.com
a346297839 2011-07-27
  • 打赏
  • 举报
回复
楼主 问题解决了吧?给我发个吧 我现在很需要 发我邮箱346297839@qq.com 谢谢
程序猿6699 2011-07-01
  • 打赏
  • 举报
回复
LZ,有了吗?可以给我发一份吗?谢谢。邮箱:529293998@qq.com
huwei001982 2011-05-06
  • 打赏
  • 举报
回复
额, 还真有贴代码的
加载更多回复(16)

110,578

社区成员

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

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

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