在C#应用程序中,要获取HTML源代码是非常容易的事。但是,近日我发现soso的搜吧居然获取不到HTML代码。请问如何解决?
比如说这句网址的HTML代码:
http://post.soso.com/cgi-bin/cgimain?proto=8&tid=407966&pgn=1谢谢!近日我在一个采集程序时,想采集搜吧呢。请大家贴代码前测试一下,这样可以节省你我的时间。
比如说这句网址的HTML代码:
http://post.soso.com/cgi-bin/cgimain?proto=8&tid=407966&pgn=1谢谢!近日我在一个采集程序时,想采集搜吧呢。请大家贴代码前测试一下,这样可以节省你我的时间。
解决方案 »
- EF+MVC3的问题,连表的MODEL怎么用EF进行查询.
- C#怎么修改浏览器中文本框的右键菜单?
- _NewWindow如何获取PostData
- 哪位用过 NetAdvantage?
- 如何从文本文件里 指定行数开始读,从最后开始读几行。。。
- DataTable如何快速查找数据
- Checkedlistbox取每行值的问题问题?
- webBrowser.Navigate()这个东西怎么用
- 如何把DataGridView中的某一行数据复制到另一个DataGridView中??
- 怎么使得点TabControl属性标签而不改变属性页.
- 关于用反射动态调用DLL的一个问题~
- 请问在.net中如何调pdf的编程接口
403会不会是服务器对User-Agent进行了验证?弄个AddHeader()添加上Internet Explorer试试
在button事件里写代码,参考代码如下:(不要忘了加引用哦)
using System.Net;
using System.IO;
private void button1_Click(object sender, EventArgs e)
{
WebRequest request = WebRequest.Create(
"http://post.soso.com/cgi-bin/cgimain?proto=8&tid=407966&pgn=1");
request.Credentials = CredentialCache.DefaultCredentials;
WebResponse response = request.GetResponse();
Stream dataStream = response.GetResponseStream();
StreamReader reader = new StreamReader(dataStream);
string responseFromServer = "";
string strTemp;
while ( (strTemp = reader .ReadLine ()) != null )
{
listBox1.Items.Add(strTemp );
}
reader.Close();
response.Close(); }
-------------------------------------------
在vs2005 winform下测试通过,并顺利取得html代码,只要将网址改成你想要的,基本都能获得html(对用不常用编码写的html代码,要考虑转换了再显示出来),在此例中是将它show到listbox
中,既然能获得流了,你要怎么处理都是不难的事了,呵呵
*****************************************************************************
欢迎使用CSDN论坛阅读器 : CSDN Reader(附全部源代码)
http://www.cnblogs.com/feiyun0112/archive/2006/09/20/509783.html
你的代码在读SOSO时,总是返回403错误。
<?php
$file = fopen ("http://post.soso.com/cgi-bin/cgimain?proto=8&tid=407966&pgn=1", "r");
if (!$file) {
echo "<p>Unable to open remote file.\n";
exit;
}
while (!feof ($file)) {
$line = fgets ($file, 1024);
print($line);
}
fclose($file);
?>
---------------------------------------------------------------------------------
InternetExplorerClass m_IE=new InternetExplorerClass();
m_IE.Silent=true;
stbr.Text="正在打开IE...";
object o=null;
string url="http://post.soso.com/cgi-bin/cgimain?proto=8&tid=407966&pgn=1";
m_IE.Navigate(url,ref o,ref o,ref o,ref o);
stbr.Text="正在打开网页...";
while(m_IE.ReadyState!=SHDocVw.tagREADYSTATE.READYSTATE_COMPLETE)
{
Thread.Sleep(500);
Application.DoEvents();
}
HTMLDocument doc=(HTMLDocument)m_IE.Document;
//MessageBox.Show(doc.body.outerHTML);//doc.createDocumentFromUrl
rch1.AppendText(doc.body.outerHTML);
m_IE.Quit();
不符合我的项目要求。
你只须将axWebBrowser放在窗体中,然后删除该控件
然后右击"引用",添加Microsoft.mshtml
在文件中添加:
using SHDocVw;
using mshtml;
我上述代码就可以运行了,不需要WebBrowser控件
那样同样可以得到该文档所有节点,得到的doc.documentElement.outerHTML好象和HTML的源文件差不多
<input type=button value=查看网页源代码 onclick="window.location = 'view-source:'+ 'http://post.soso.com/cgi-bin/cgimain?proto=8&tid=407966&pgn=1'">
client.Headers.Set("User-Agent", "Microsoft Internet Explorer");//此句是关键
Byte[] pageData = client.DownloadData(textBox2 .Text);
textBox1.Text = Encoding.GetEncoding("gb2312").GetString(pageData);