c#如何获取网站内容,请高手指教

时间:2023-02-22 10:04:20
各位大虾:
   我需要取“http://edi.easipass.com/dataportal/q.do?qn=dp_export_shipinfo”这个页面,点确定以后出来的,分页的所有数据。应该怎么写呢?
  c#windows窗体

18 个解决方案

#1


使用webbrowser控件

#2


抓包分析post/get提交的数据,然后模拟这个提交过程,获取后续页面内容

#3


有相关例子或者代码吗?

#4


还是没有人给回答啊!

#7


C#远程抓取网站内容的代码 
http://www.eeeey.net/Detail.aspx?ID=58697&Gid=102

#9


打不开啊 !

#10


用webclient去把网页的html下载下来吧

#11


用webbrowser

#12


点击确定之后,会跳转到另一个页面上,你会发现浏览器的地址变化了,
http://edi.easipass.com/dataportal/query.do?
vessel1=111&vess_call1=222&voyage1=333&carr_code1=444&ship_agen1=555&berth1=&esti_sail1=&esti_sail2=&qid=402803af0ecb1a4c010ecb1bc2bb00a0&pagesize=30&submit=%E6%9F%A5%E8%AF%A2

从连接上的内容可以看出这个URL你可以自己组装出来
http://edi.easipass.com/dataportal/query.do?vessel1=船名&vess_call1=船名呼号......
然后根据这个组装出来的URL获取该网页的源代码,解析源代码获取你想要的内容

#13


我是想把这些数据定期取下来以后,存到数据库里面,因为平时输入船名等,会自动提示航次多少,。不用每次去网站上查询。

另外还想实现的是,别人的一个网站,我有用户名和密码,实现系统模拟登录,自动录入相关数据,然后点保存提交。

#14


最好有例子可以给看下。

#15


例子是没有,但是很久之前有做过类似的程序,就是从他人网站上获取我们有用的数据。
主要思路是:
1、获取出来他的所有的html文件。
2.分析html文件,看我们想用到的数据在在什么节点下,
 <tr height="21">
             <td align="left" bgcolor="#EEEEEE">TIRUA</td>
        <td align="left" bgcolor="#EEEEEE">D5AD8</td>
        <td align="left" bgcolor="#EEEEEE">1204</td>
        <td align="left" bgcolor="#EEEEEE">MSK</td>
        <td align="left" bgcolor="#EEEEEE">&#32852;&#20195;</td>
        <td align="left" bgcolor="#EEEEEE">&#27915;&#23665;&#19968;&#26399;</td>
        <td align="left" bgcolor="#EEEEEE">20121023</td>
        <td align="left" bgcolor="#EEEEEE">9612882</td>
<td bgcolor="#EEEEEE"><a href='query.do?qn=dp_export_ship_info_port&amp;vessel=TIRUA&amp;voyage=1204&amp;estisail=20121023'/>挂靠港</a> <a href='query.do?qn=dp_export_agent&amp;EXPORT_AGENT_VESSEL=TIRUA&amp;EXPORT_AGENT_VOYAGE=1204'>共用舱位</a></td>
</tr>
。这是一组,在用字符串截取,截取我们有用的信息即可。

#16



第一页:
http://edi.easipass.com/dataportal/query.do?qid=402803af0ecb1a4c010ecb1bc2bb00a0&esti_sail1=&vess_call1=&voyage1=&vessel1=&carr_code1=&esti_sail2=&berth1=&ship_agen1=&pagesize=30&page=1
第二页:
http://edi.easipass.com/dataportal/query.do?qid=402803af0ecb1a4c010ecb1bc2bb00a0&esti_sail1=&vess_call1=&voyage1=&vessel1=&carr_code1=&esti_sail2=&berth1=&ship_agen1=&pagesize=30&page=2
第三页:
http://edi.easipass.com/dataportal/query.do?qid=402803af0ecb1a4c010ecb1bc2bb00a0&esti_sail1=&vess_call1=&voyage1=&vessel1=&carr_code1=&esti_sail2=&berth1=&ship_agen1=&pagesize=30&page=3
发现规律了没,这就好办了啊

#17


给你一个我写的获取HTML的类,你可以保存起来。
直接发送请求即可:

        public static string contentType = "application/x-www-form-urlencoded";
        public static string accept = "image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/x-shockwave-flash, application/x-silverlight, application/vnd.ms-excel, application/vnd.ms-powerpoint, application/msword, application/x-ms-application, application/x-ms-xbap, application/vnd.ms-xpsdocument, application/xaml+xml, application/x-silverlight-2-b1, */*";
        public static string userAgent = "Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.1; WOW64; Trident/5.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; .NET4.0C; .NET4.0E; Zune 4.7; BOIE9;ZHCN)";
        public static string referer = "";

        /// <summary>
        /// 获取HTML
        /// </summary>
        /// <param name="url"></param>
        /// <param name="cookieContainer"></param>
        /// <param name="method">GET or POST</param>
        /// <param name="postData">like "username=admin&password=123"</param>
        /// <returns></returns>
        public static string GetHtml(string url, CookieContainer cookieContainer, string method = "GET", string postData = "")
        {
            HttpWebRequest httpWebRequest = null;
            HttpWebResponse httpWebResponse = null;
            try
            {
                httpWebRequest = (HttpWebRequest)HttpWebRequest.Create(url);
                httpWebRequest.CookieContainer = cookieContainer;
                httpWebRequest.ContentType = contentType;
                httpWebRequest.Referer = referer;
                httpWebRequest.Accept = accept;
                httpWebRequest.UserAgent = userAgent;
                httpWebRequest.Method = method;
                httpWebRequest.ServicePoint.ConnectionLimit = int.MaxValue;

                if (method.ToUpper() == "POST")
                {
                    byte[] byteRequest = Encoding.Default.GetBytes(postData);
                    Stream stream = httpWebRequest.GetRequestStream();
                    stream.Write(byteRequest, 0, byteRequest.Length);
                    stream.Close();
                }

                httpWebResponse = (HttpWebResponse)httpWebRequest.GetResponse();
                Stream responseStream = httpWebResponse.GetResponseStream();
                StreamReader streamReader = new StreamReader(responseStream, Encoding.UTF8);
                string html = streamReader.ReadToEnd();

                streamReader.Close();
                responseStream.Close();

                httpWebRequest.Abort();
                httpWebResponse.Close();

                return html;
            }
            catch (Exception)
            {
                return string.Empty;
            }
        }
    }




调用:


            string result = HttpHelper.GetHtml("http://edi.easipass.com/dataportal/query.do?vessel1=&vess_call1=&voyage1=&carr_code1=&ship_agen1=&berth1=&esti_sail1=&esti_sail2=&qid=402803af0ecb1a4c010ecb1bc2bb00a0&pagesize=30&submit=%E6%9F%A5%E8%AF%A2", new System.Net.CookieContainer());
            Console.WriteLine(result);//输出查询后页面的HTML,查询条件在URL参数中设置。


HttpWebRequest更多用法参见MSDN:http://msdn.microsoft.com/zh-cn/library/system.net.httpwebrequest%28v=VS.80%29.aspx

#18


上面的代码少了一句类的声明:public class HttpHelper
这是一个get请求,直接HttpWebRequest发送请求到浏览器上的地址就可以了。

#1


使用webbrowser控件

#2


抓包分析post/get提交的数据,然后模拟这个提交过程,获取后续页面内容

#3


有相关例子或者代码吗?

#4


还是没有人给回答啊!

#5


#6


#7


C#远程抓取网站内容的代码 
http://www.eeeey.net/Detail.aspx?ID=58697&Gid=102

#8


#9


打不开啊 !

#10


用webclient去把网页的html下载下来吧

#11


用webbrowser

#12


点击确定之后,会跳转到另一个页面上,你会发现浏览器的地址变化了,
http://edi.easipass.com/dataportal/query.do?
vessel1=111&vess_call1=222&voyage1=333&carr_code1=444&ship_agen1=555&berth1=&esti_sail1=&esti_sail2=&qid=402803af0ecb1a4c010ecb1bc2bb00a0&pagesize=30&submit=%E6%9F%A5%E8%AF%A2

从连接上的内容可以看出这个URL你可以自己组装出来
http://edi.easipass.com/dataportal/query.do?vessel1=船名&vess_call1=船名呼号......
然后根据这个组装出来的URL获取该网页的源代码,解析源代码获取你想要的内容

#13


我是想把这些数据定期取下来以后,存到数据库里面,因为平时输入船名等,会自动提示航次多少,。不用每次去网站上查询。

另外还想实现的是,别人的一个网站,我有用户名和密码,实现系统模拟登录,自动录入相关数据,然后点保存提交。

#14


最好有例子可以给看下。

#15


例子是没有,但是很久之前有做过类似的程序,就是从他人网站上获取我们有用的数据。
主要思路是:
1、获取出来他的所有的html文件。
2.分析html文件,看我们想用到的数据在在什么节点下,
 <tr height="21">
             <td align="left" bgcolor="#EEEEEE">TIRUA</td>
        <td align="left" bgcolor="#EEEEEE">D5AD8</td>
        <td align="left" bgcolor="#EEEEEE">1204</td>
        <td align="left" bgcolor="#EEEEEE">MSK</td>
        <td align="left" bgcolor="#EEEEEE">&#32852;&#20195;</td>
        <td align="left" bgcolor="#EEEEEE">&#27915;&#23665;&#19968;&#26399;</td>
        <td align="left" bgcolor="#EEEEEE">20121023</td>
        <td align="left" bgcolor="#EEEEEE">9612882</td>
<td bgcolor="#EEEEEE"><a href='query.do?qn=dp_export_ship_info_port&amp;vessel=TIRUA&amp;voyage=1204&amp;estisail=20121023'/>挂靠港</a> <a href='query.do?qn=dp_export_agent&amp;EXPORT_AGENT_VESSEL=TIRUA&amp;EXPORT_AGENT_VOYAGE=1204'>共用舱位</a></td>
</tr>
。这是一组,在用字符串截取,截取我们有用的信息即可。

#16



第一页:
http://edi.easipass.com/dataportal/query.do?qid=402803af0ecb1a4c010ecb1bc2bb00a0&esti_sail1=&vess_call1=&voyage1=&vessel1=&carr_code1=&esti_sail2=&berth1=&ship_agen1=&pagesize=30&page=1
第二页:
http://edi.easipass.com/dataportal/query.do?qid=402803af0ecb1a4c010ecb1bc2bb00a0&esti_sail1=&vess_call1=&voyage1=&vessel1=&carr_code1=&esti_sail2=&berth1=&ship_agen1=&pagesize=30&page=2
第三页:
http://edi.easipass.com/dataportal/query.do?qid=402803af0ecb1a4c010ecb1bc2bb00a0&esti_sail1=&vess_call1=&voyage1=&vessel1=&carr_code1=&esti_sail2=&berth1=&ship_agen1=&pagesize=30&page=3
发现规律了没,这就好办了啊

#17


给你一个我写的获取HTML的类,你可以保存起来。
直接发送请求即可:

        public static string contentType = "application/x-www-form-urlencoded";
        public static string accept = "image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/x-shockwave-flash, application/x-silverlight, application/vnd.ms-excel, application/vnd.ms-powerpoint, application/msword, application/x-ms-application, application/x-ms-xbap, application/vnd.ms-xpsdocument, application/xaml+xml, application/x-silverlight-2-b1, */*";
        public static string userAgent = "Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.1; WOW64; Trident/5.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; .NET4.0C; .NET4.0E; Zune 4.7; BOIE9;ZHCN)";
        public static string referer = "";

        /// <summary>
        /// 获取HTML
        /// </summary>
        /// <param name="url"></param>
        /// <param name="cookieContainer"></param>
        /// <param name="method">GET or POST</param>
        /// <param name="postData">like "username=admin&password=123"</param>
        /// <returns></returns>
        public static string GetHtml(string url, CookieContainer cookieContainer, string method = "GET", string postData = "")
        {
            HttpWebRequest httpWebRequest = null;
            HttpWebResponse httpWebResponse = null;
            try
            {
                httpWebRequest = (HttpWebRequest)HttpWebRequest.Create(url);
                httpWebRequest.CookieContainer = cookieContainer;
                httpWebRequest.ContentType = contentType;
                httpWebRequest.Referer = referer;
                httpWebRequest.Accept = accept;
                httpWebRequest.UserAgent = userAgent;
                httpWebRequest.Method = method;
                httpWebRequest.ServicePoint.ConnectionLimit = int.MaxValue;

                if (method.ToUpper() == "POST")
                {
                    byte[] byteRequest = Encoding.Default.GetBytes(postData);
                    Stream stream = httpWebRequest.GetRequestStream();
                    stream.Write(byteRequest, 0, byteRequest.Length);
                    stream.Close();
                }

                httpWebResponse = (HttpWebResponse)httpWebRequest.GetResponse();
                Stream responseStream = httpWebResponse.GetResponseStream();
                StreamReader streamReader = new StreamReader(responseStream, Encoding.UTF8);
                string html = streamReader.ReadToEnd();

                streamReader.Close();
                responseStream.Close();

                httpWebRequest.Abort();
                httpWebResponse.Close();

                return html;
            }
            catch (Exception)
            {
                return string.Empty;
            }
        }
    }




调用:


            string result = HttpHelper.GetHtml("http://edi.easipass.com/dataportal/query.do?vessel1=&vess_call1=&voyage1=&carr_code1=&ship_agen1=&berth1=&esti_sail1=&esti_sail2=&qid=402803af0ecb1a4c010ecb1bc2bb00a0&pagesize=30&submit=%E6%9F%A5%E8%AF%A2", new System.Net.CookieContainer());
            Console.WriteLine(result);//输出查询后页面的HTML,查询条件在URL参数中设置。


HttpWebRequest更多用法参见MSDN:http://msdn.microsoft.com/zh-cn/library/system.net.httpwebrequest%28v=VS.80%29.aspx

#18


上面的代码少了一句类的声明:public class HttpHelper
这是一个get请求,直接HttpWebRequest发送请求到浏览器上的地址就可以了。