取远程网页数据,R语言从小木虫网页批量提取考

作者: 网页游戏资讯  发布:2019-05-26

一、从U奇骏L读取并重回html树

取远程网页数据,R语言从小木虫网页批量提取考研调剂信息。修改版,由于取的网址多对应加了校勘.笔者就没发新贴了.
1,同1个用户(或浏览器)的不相同请求共享同一个变量积累空间,就称其为Session(会话)
Session内的变量保存在服务器中。
用SessionID以分别不一样的Session(会话),因为不是二个用户在央浼。

    1.1 Rcurl包

二, 众人周知HTTP是无连接的,所以服务端和客户端交流时说道好应用些什么标识来保持Session(会话)状态,于是应际而生了库克ie(或者你更纯熟Cookie的其余用途)。那就是HTTP协议的景况保持机制,是标准,全数的浏览器都应有扶助。为啥不用IP标记?呵呵,因为有人用代理啊,开始的1段时代的代 理服务器是很宽泛的连到Internet的艺术。

       行使Escortcurl包能够方便的向服务器发出请求,捕获U途达I,get 和 post 表单。比BMWX五 socktet连接要提供更加高品位的相互,并且帮忙FTP/FTPS/TFTP,SSL/HTTPS,telnet 和cookies等。本文用到的函数是basicTextGatherer和getU普拉多L。想详细摸底那些包的能够点击参谋资料的链接。

So, 在Cookie中放置二个近乎于SessionID的Value,同1个客户端在与服务端交互式,该ID便被来往传递,服务端便可依此创建若干变量,便是Session变量。区别的客户端因为SessionID差别,所以访问服务器时得到的Session变量就差异。

        R命令:

注脚原理服务器的Session会在客户端产生有时总COOKIESS.
APS.NET网址就能生成ASP.NET_SessionId=hjguqsn34ai3h3aattozr2fy
PHP,JSP网址生成的JSESSIONID=4D玖D贰F0B六伍C773八伍C43CE四EE2二D053陆E
不畏看怎么服务器而以
取远程网页数据,R语言从小木虫网页批量提取考研调剂信息。取了登入成功后的CEOKIESS,只要Computer不清空高管KIESS,这就足以做成免登录了.
换句话AComputer的组长KIESS,不能够在B计算机上用.
工具WPE之类的互连网探嗅器.
先记下叁回得逞登入时所发送的音讯.
找新闻中的POST,和GET
图片 1图片 2

        h <- basicTextGatherer( )   # 查看服务器重返的头音讯
        txt <- getURL(url, headerfunction = h$update,.encoding="UTF-8...")  # 再次来到字符串格局html

这网络打资料都并未有完全的材质极其是验证码登录。

       参数url即为需求拜访的url这里参数用headerfunction用到上一条命令归来的头消息,.encoding钦定网页的编码形式为“UTF-八"。

实际上自个儿那都以从英特网搜罗整理出来的的。做的不是太好。

       网页的编码格局有为数相当的多,一般选用UTF-八,一些国语网页编码方式为“gbk",可以在浏览器的网页代码查看可能getU普拉多L再次来到的字符串看到。

动用的五个WebClient,HttpWebRequest。NET的类分别做出3个静态类和动态类。

       小木虫网页代码查看

静态类GetHtml 帮助一般的网页取多少和POET提交,但不能够支持验证码,自动识别网页编码也足以手动输入网页编码。不过最棒是手动输入那样会让程序少做运转代码。

                                  图片 3

System.Collections.Specialized.NameValueCollection PostVars =new System.Collections.Specialized.NameValueCollection()
PostVars.Add("uid","name");
PostVars.Add("pwd","123456");

      可知小木虫网页编码格局为gbk。

string tmphtml= GetStrHtmlPost(url,PostVars);

     1.2  XML包

动态类PostWeb 协理验证码、验证用户、登录过会发生COOKIES字符串,第叁遍运维程序时可通过CEOKIES而毫无再行登录。

       中华V语言XML包 具有读取也许成立XML(HTML)文件的意义,能够当麻芋果件也辅助HTTP 只怕 FTP ,也提供Xpath(XML路线语言)深入分析方法。此处函数htmlparse,将文件深入分析为XML恐怕HTML树,便于进一步数据的领到大概编辑。

PostWeb web=new PostWeb();

        R命令:

web.GetCode(验证码地址);

        htmlParse(file,asText=T,encoding="UTF-8"...) #参数file 即为XML或许HTML文件名或许text,asText参数是T钦命file是text,encoding内定网页编码格局。

string tmplogin=web.LoginPost("");

 

if(tmplogin.Contains(条件))

       这里大家须要读取网页,并且获得该网页的html树内容

{

        自定义函数download,输入strU帕杰罗L,strU帕杰罗L为网站,再次来到html树内容

string cookie= web.cookieHeader;//保存到文件中后一次直接付到类就可免登入

            download <- function(strURL){
              h <- basicTextGatherer( )# 查看服务器再次来到的头音信
              txt <- getURL(strURL, headerfunction = h$update,.encoding="gbk") ## 字符串方式
               htmlParse(txt,asText=T,encoding="gbk")      #慎选gbk举办网页的辨析
             }

web.GetPage("", "");

二、获得二个网页全体的U智跑L

}

    有的时候候我们须要进入各种网页上的子链接取剖析数据,那年可以用到XML包的getHTMLLinks函数。

 

    R命令:

PostWeb web=new PostWeb();

        getHTMLLinks(doc,  xpQuery = "//a/@href"...) #doc为深入分析后的HTML树文件,xpQuery钦定想相称的Xpath成分(下边会详细讲一点Xpath基础)。

web.cookieHeader=cookie;//把保存文件中的cookie付到类中

    此处大家须要获得小木虫“导师招生”页面下的兼具话题链接。

web.GetPage("", "");

    贰.一首先大家要获取导师招生的首先页,第3页,第二页,乃至到终极1页的网址。

图片 4
图片 5using System;
图片 6using System.Collections.Generic;
图片 7取远程网页数据,R语言从小木虫网页批量提取考研调剂信息。using System.Text;
图片 8using System.Net;
图片 9using System.Text.RegularExpressions;
图片 10using System.IO;
图片 11using System.IO.Compression;
图片 12
图片 13namespace Manager.Net.Html
图片 14{
图片 15    #region  HTML相关类
图片 16    /// <summary>
图片 17    /// HTML相关
图片 18    /// </summary>
图片 19    public class CHtml
图片 20    {
图片 21      
图片 22        #region 过滤 Sql 语句字符串中的注入脚本
图片 23        /// <summary>
图片 24        /// 过滤 Sql 语句字符串中的注入脚本
图片 25        /// </summary>
图片 26        /// <param name="source">传入的字符串</param>
图片 27        /// <returns></returns>
图片 28        public static string FilterSql(string source)
图片 29        {
图片 30            //单引号替换到四个单引号
图片 31            source = source.Replace("'", "''");
图片 32            source = source.Replace(""", "“");
图片 33            source = source.Replace("|", "|");
图片 34            //半角封号轮换为全角封号,制止多语句施行
图片 35            source = source.Replace(";", ";");
图片 36
图片 37            //半角括号轮换为全角括号
图片 38            source = source.Replace("(", "(");
图片 39            source = source.Replace(")", ")");
图片 40
图片 41            /**/
图片 42            ///////////////要用正则表明式替换,幸免字母大小写得景况////////////////////
图片 43
图片 44            //去除施行存款和储蓄进度的下令关键字
图片 45            source = source.Replace("Exec", "");
图片 46            source = source.Replace("Execute", "");
图片 47
图片 48            //去除系统存款和储蓄进度或扩充存款和储蓄进程关键字
图片 49            source = source.Replace("xp_", "x p_");
图片 50            source = source.Replace("sp_", "s p_");
图片 51
图片 52            //幸免1陆进制注入
图片 53            source = source.Replace("0x", "0 x");
图片 54
图片 55            return source;
图片 56        }
图片 57
图片 58        #endregion
图片 59
图片 60        #region 输出HTML
图片 61        /// <summary>
图片 62        /// 输出HTML
图片 63        /// </summary>
图片 64        /// <param name="Stream">流</param>
图片 65        /// <param name="Encod">编码</param>
图片 66        /// <returns></returns>
图片 67        public static string HtmlStr(System.IO.Stream Stream, Encoding Encod)
图片 68        {
图片 69
图片 70            System.IO.StreamReader sr;
图片 71            if (Encod != null)
图片 72            {
图片 73                sr = new System.IO.StreamReader(Stream, Encod);
图片 74                return sr.ReadToEnd();
图片 75            }
图片 76            else
图片 77            {
图片 78                sr = new System.IO.StreamReader(Stream, Encoding.Default);
图片 79                return sr.ReadToEnd();
图片 80
图片 81            }
图片 82
图片 83        }
图片 84        #endregion
图片 85
图片 86        #region 查验用户提交的U昂CoraL参数字符里面是否有越轨字符,假诺有则赶回True.制止SQL注入.
图片 87        /// <summary>
图片 88        /// 核查用户提交的U奥迪Q叁L参数字符里面是还是不是有不合法字符,如若有则赶回True.幸免SQL注入.
图片 89        /// </summary>
图片 90        /// <param name="str">(string)</param>
图片 91        /// <returns>bool</returns>
图片 92        public static bool VerifyString(string str)
图片 93        {
图片 94            string strTmp = str.ToUpper();
图片 95            if (strTmp.IndexOf("SELECT ") >= 0 || strTmp.IndexOf(" AND ") >= 0 || strTmp.IndexOf(" OR ") >= 0 ||
图片 96                strTmp.IndexOf("EXEC ") >= 0 || strTmp.IndexOf("CHAR(") >= 0)
图片 97            {
图片 98                return true;
图片 99            }
图片 100
图片 101            strTmp.Replace("'", "'").Replace(";", ";");
图片 102            return false;
图片 103        }
图片 104        #endregion
图片 105
图片 106        #region 相称页面包车型大巴图纸地址
图片 107        /// <summary>
图片 108        /// 匹配页面包车型地铁图样地址
图片 109        /// </summary>
图片 110        /// <param name="HtmlCode"></param>
图片 111        /// <param name="imgHttp">要补偿的;
图片 112        /// <returns></returns>
图片 113        public static string GetImgSrc(string HtmlCode, string imgHttp)
图片 114        {
图片 115            string MatchVale = "";
图片 116            string Reg = @"<img. ?>";
图片 117            foreach (Match m in Regex.Matches(HtmlCode.ToLower(), Reg))
图片 118            {
图片 119                MatchVale  = GetImg((m.Value).ToLower().Trim(), imgHttp)   "|";
图片 120            }
图片 121
图片 122            return MatchVale;
图片 123        }
图片 124        #endregion
图片 125
图片 126        #region 相称<img src="" />中的图片路径实际上链接
图片 127        /// <summary>
图片 128        /// 相配<img src="" />中的图片路径实际上链接
图片 129        /// </summary>
图片 130        /// <param name="ImgString"><img src="" />字符串</param>
图片 131        /// <returns></returns>
图片 132        public static string GetImg(string ImgString, string imgHttp)
图片 133        {
图片 134            string MatchVale = "";
图片 135            string Reg = @"src=. .(bmp|jpg|gif|png|)";
图片 136            foreach (Match m in Regex.Matches(ImgString.ToLower(), Reg))
图片 137            {
图片 138                MatchVale  = (m.Value).ToLower().Trim().Replace("src=", "");
图片 139            }
图片 140            if (MatchVale.IndexOf(".net") != -1 || MatchVale.IndexOf(".com") != -1 || MatchVale.IndexOf(".org") != -1 || MatchVale.IndexOf(".cn") != -1 || MatchVale.IndexOf(".cc") != -1 || MatchVale.IndexOf(".info") != -1 || MatchVale.IndexOf(".biz") != -1 || MatchVale.IndexOf(".tv") != -1)
图片 141                return (MatchVale);
图片 142            else
图片 143                return (imgHttp   MatchVale);
图片 144        }
图片 145        #endregion
图片 146
图片 147        #region 获取页面包车型大巴链接正则
图片 148        /// <summary>
图片 149        /// 获取页面包车型地铁链接正则
图片 150        /// </summary>
图片 151取远程网页数据,R语言从小木虫网页批量提取考研调剂信息。        /// <param name="HtmlCode"></param>
图片 152取远程网页数据,R语言从小木虫网页批量提取考研调剂信息。        /// <returns></returns>
图片 153        public static string GetHref(string HtmlCode)
图片 154        {
图片 155            string MatchVale = "";
图片 156            string Reg = @"(h|H)(r|R)(e|E)(f|F) *= *('|"")?((w|\|/|.|:|-|_) )[S]*";
图片 157            foreach (Match m in Regex.Matches(HtmlCode, Reg))
图片 158            {
图片 159                MatchVale  = (m.Value).ToLower().Replace("href=", "").Trim()   "|";
图片 160            }
图片 161            return MatchVale;
图片 162        }
图片 163        #endregion
图片 164
图片 165        #region 去HTML标记
图片 166        /// <summary>
图片 167        /// 去HTML标记
图片 168        /// </summary>
图片 169        /// <param name="strhtml">HTML页面</param>
图片 170        /// <returns></returns>
图片 171        public static string RemoveHTML(string strhtml)
图片 172        {
图片 173            string stroutput = strhtml;
图片 174            Regex regex = new Regex(@"<[^>] >|</[^>] >");
图片 175            stroutput = regex.Replace(stroutput, "");
图片 176            return stroutput.Trim();
图片 177        }
图片 178        #endregion
图片 179
图片 180        /// <summary>
图片 181        /// 去中文
图片 182        /// </summary>
图片 183        /// <param name="strhtml">HTML页面</param>
图片 184        /// <returns></returns>
图片 185        public static string RemoveChinese(string strhtml)
图片 186        {
图片 187            string stroutput = strhtml;
图片 188            Regex regex = new Regex(@"[u4e00-u9fa5]");
图片 189            stroutput = regex.Replace(stroutput, "");
图片 190            return stroutput.Trim();
图片 191        }
图片 192        #region 去UBB标记
图片 193        /// <summary>
图片 194        /// 去UBB标记
图片 195        /// </summary>
图片 196        /// <param name="strhtml">HTML页面</param>
图片 197        /// <returns></returns>
图片 198        public static string RemoveUBB(string strhtml)
图片 199        {
图片 200            string stroutput = strhtml;
图片 201            Regex regex = new Regex(@"[[^[[]]*]");
图片 202            stroutput = regex.Replace(stroutput, "");
图片 203            return stroutput.Trim();
图片 204        }
图片 205        #endregion
图片 206
图片 207        #region 去UBB和HTML标记
图片 208        /// <summary>
图片 209        /// 去UBB和HTML标记
图片 210        /// </summary>
图片 211        /// <param name="strhtml">HTML页面</param>
图片 212        /// <returns></returns>
图片 213        public static string RemoveUBBHTML(string strhtml)
图片 214        {
图片 215
图片 216            return RemoveUBB(RemoveHTML(strhtml));
图片 217        }
图片 218        #endregion
图片 219
图片 220        #region 取网页编码
图片 221        /// <summary>
图片 222        /// 取网页编码
图片 223        /// </summary>
图片 224        /// <param name="strHtml">HTML页面</param>
图片 225        /// <returns>重回编码</returns>
图片 226        public static Encoding GetEncoding(string strHtml)
图片 227        {
图片 228
图片 229            string pattern = @"(?i)bcharset=(?<charset>[-a-zA-Z_0-9] )";
图片 230            string charset = Regex.Match(strHtml, pattern).Groups["charset"].Value;
图片 231            if (charset.Length <= 0)
图片 232            {
图片 233                if (strHtml.Contains("charset=""))
图片 234                    charset = Manager.Text.StringEx.GetStringMiddle(strHtml, "charset="", """);
图片 235
图片 236            }
图片 237            if (charset.Length <= 0)
图片 238            {
图片 239                if (strHtml.Contains("charset="))
图片 240                    charset = Manager.Text.StringEx.GetStringMiddle(strHtml, "charset=", """);
图片 241            }
图片 242            if (charset.Length <= 0)
图片 243            {
图片 244                charset = Encoding.UTF8.BodyName;
图片 245            }
图片 246            try
图片 247            {
图片 248                return Encoding.GetEncoding(charset);
图片 249            }
图片 250            catch (Exception)
图片 251            {
图片 252
图片 253                return Encoding.Default;
图片 254            }
图片 255
图片 256
图片 257
图片 258        }
图片 259        #endregion
图片 260
图片 261        #region 取IE版本
图片 262        /// <summary>
图片 263        /// 取IE版本
图片 264        /// </summary>
图片 265        /// <returns></returns>
图片 266        public static string GetIEVersion()
图片 267        {
图片 268            using (Microsoft.Win32.RegistryKey versionKey = Microsoft.Win32.Registry.LocalMachine.OpenSubKey(@"SoftwareMicrosoftInternet Explorer"))
图片 269            {
图片 270                String version = versionKey.GetValue("Version").ToString();
图片 271                return version;
图片 272            }
图片 273        }
图片 274        #endregion
图片 275
图片 276    }
图片 277    #endregion
图片 278
图片 279    #region 模拟网页提交数据类
图片 280    /// <summary>
图片 281    /// 模拟网页提交数据
图片 282    /// </summary>
图片 283    public class PostWeb
图片 284    {
图片 285        属性
图片 286
图片 287        相关设置
图片 288
图片 289        #region 验证码
图片 290        /// <summary>
图片 291        /// 验证码,并保留文件
图片 292        /// </summary>
图片 293        /// <param name="strU奥迪Q5L">验证码地址</param>
图片 294        /// <param name="dir">目录</param>
图片 295        /// <param name="filename">文件</param>
图片 296        /// <param name="imageFormat">格式</param>
图片 297        public void GetCode(string strURL, string dir, string filename, System.Drawing.Imaging.ImageFormat imageFormat)
图片 298        {
图片 299            string path = "";
图片 300            if (!String.IsNullOrEmpty(dir))
图片 301            {
图片 302
图片 303                System.IO.Directory.CreateDirectory(dir);
图片 304                path = dir   "\";
图片 305
图片 306            }
图片 307            string FileNamePath = path   filename;
图片 308            System.Drawing.Image code = GetCode(strURL);
图片 309            code.Save(FileNamePath, imageFormat);
图片 310            code.Dispose();
图片 311        }
图片 312
图片 313        /// <summary>
图片 314        /// 验证码,返回Bitmap
图片 315        /// </summary>
图片 316        /// <param name="strUTiggoL">验证码地址</param>
图片 317        /// <returns></returns>
图片 318        public System.Drawing.Image GetCode(string strURL)
图片 319        {
图片 320            HttpWebRequest myHttpWebRequest = (HttpWebRequest)WebRequest.Create(strURL);
图片 321            ProxySetting(myHttpWebRequest);
图片 322            NetworkCredentialSetting(myHttpWebRequest);
图片 323            myHttpWebRequest.Method = "GET";
图片 324            myHttpWebRequest.KeepAlive = true;
图片 325            CookieCollection myCookies = null;
图片 326            CookieContainer myCookieContainer = new CookieContainer();
图片 327            myHttpWebRequest.CookieContainer = myCookieContainer;
图片 328            try
图片 329            {
图片 330
图片 331
图片 332                using (HttpWebResponse response = (HttpWebResponse)myHttpWebRequest.GetResponse())
图片 333                {
图片 334                    cookieHeader = myHttpWebRequest.CookieContainer.GetCookieHeader(new Uri(strURL));
图片 335                    myCookies = response.Cookies;
图片 336                    System.Drawing.Image code = System.Drawing.Image.FromStream(response.GetResponseStream(), false, false);
图片 337                    return code;
图片 338
图片 339                }
图片 340            }
图片 341            catch
图片 342            {
图片 343
图片 344                return null;
图片 345            }
图片 346        }
图片 347        #endregion
图片 348
图片 349        public string GetCookies(string strURL)
图片 350        {
图片 351            HttpWebRequest myHttpWebRequest = (HttpWebRequest)WebRequest.Create(strURL);
图片 352            myHttpWebRequest.Method = "Get";
图片 353            CookieCollection myCookies = null;
图片 354            CookieContainer myCookieContainer = new CookieContainer();
图片 355            myHttpWebRequest.CookieContainer = new CookieContainer();
图片 356            try
图片 357            {
图片 358                using (HttpWebResponse response = (HttpWebResponse)myHttpWebRequest.GetResponse())
图片 359                {
图片 360                
图片 361                    cookieHeader = myHttpWebRequest.CookieContainer.GetCookieHeader(myHttpWebRequest.RequestUri);
图片 362                    myCookies = myHttpWebRequest.CookieContainer.GetCookies(myHttpWebRequest.RequestUri);
图片 363                    SetEncod(response.CharacterSet);
图片 364
图片 365
图片 366                    return System.Web.HttpUtility.HtmlDecode(System.Web.HttpUtility.UrlDecode(CHtml.HtmlStr(response.GetResponseStream(), tmpEncod))).Replace("r", "").Replace("n", "").Replace("t", "").Replace("  ", "");
图片 367              
图片 368                }
图片 369                   
图片 370
图片 371
图片 372
图片 373             
图片 374            }
图片 375            catch
图片 376            {
图片 377                cookieHeader = "";
图片 378                return "";
图片 379            }
图片 380        
图片 381        }
图片 382
图片 383        #region 登陆
图片 384        /// <summary>
图片 385        /// 作用描述:模拟登陆页面,提交登入数据进行登六,并记录Header中的cookie
图片 386        /// </summary>
图片 387        /// <param name="strULX570L">登六数据交由的页面地址</param>
图片 388        /// <param name="strArgs">用户登陆数据</param>
图片 389        /// <param name="strReferer">引用地址</param>
图片 390        /// <returns>能够回去页面内容或不回去</returns>
图片 391        public string LoginGet(string strURL, string strReferer)
图片 392        {
图片 393
图片 394            HttpWebRequest myHttpWebRequest = (HttpWebRequest)WebRequest.Create(strURL);
图片 395            ProxySetting(myHttpWebRequest);
图片 396            NetworkCredentialSetting(myHttpWebRequest);
图片 397            WebConfig(myHttpWebRequest);
图片 398            myHttpWebRequest.Referer = strReferer;
图片 399            myHttpWebRequest.Method = "Get";
图片 400            CookieCollection myCookies = null;
图片 401            CookieContainer myCookieContainer = new CookieContainer();
图片 402            myHttpWebRequest.CookieContainer = new CookieContainer();
图片 403           
图片 404            if (cookieHeader.Length > 0)
图片 405            {
图片 406                myCookieContainer.SetCookies(new Uri(strURL), cookieHeader);
图片 407                myHttpWebRequest.CookieContainer = myCookieContainer;
图片 408            }
图片 409
图片 410
图片 411
图片 412
图片 413            try
图片 414            {
图片 415                using (HttpWebResponse response = (HttpWebResponse)myHttpWebRequest.GetResponse())
图片 416                {
图片 417
图片 418                    cookieHeader = myHttpWebRequest.CookieContainer.GetCookieHeader(myHttpWebRequest.RequestUri);
图片 419                    myCookies = myHttpWebRequest.CookieContainer.GetCookies(myHttpWebRequest.RequestUri);
图片 420                    SetEncod(response.CharacterSet);
图片 421
图片 422
图片 423                    return System.Web.HttpUtility.HtmlDecode(System.Web.HttpUtility.UrlDecode(CHtml.HtmlStr(response.GetResponseStream(), tmpEncod))).Replace("r", "").Replace("n", "").Replace("t", "").Replace("  ", "");
图片 424                }
图片 425            }
图片 426            catch
图片 427            {
图片 428                cookieHeader = "";
图片 429                return "";
图片 430            }
图片 431        }
图片 432
图片 433
图片 434
图片 435        /// <summary>
图片 436        /// 成效描述:模拟登入页面,提交登6数据开始展览登入,并记录Header中的cookie
图片 437        ///  LoginPost("");
图片 438        /// </summary>
图片 439        /// <param name="strU昂CoraL">登陆数据交由的页面地址</param>
图片 440        /// <param name="strArgs">用户登入数据</param>
图片 441        /// <param name="strReferer">引用地址</param>
图片 442        /// <returns>能够回来页面内容或不回去</returns>
图片 443        public string LoginPost(string strURL, string strArgs, string strReferer)
图片 444        {
图片 445
图片 446            HttpWebRequest myHttpWebRequest = (HttpWebRequest)WebRequest.Create(strURL);
图片 447            ProxySetting(myHttpWebRequest);
图片 448            NetworkCredentialSetting(myHttpWebRequest);
图片 449            WebConfig(myHttpWebRequest);
图片 450            myHttpWebRequest.Referer = strReferer;
图片 451            myHttpWebRequest.Method = "Post";
图片 452            myHttpWebRequest.ContentType = "application/x-www-form-urlencoded";
图片 453            byte[] bs = Encoding.ASCII.GetBytes(strArgs);
图片 454            myHttpWebRequest.ContentLength = bs.Length;
图片 455
图片 456            try
图片 457            {
图片 458                CookieCollection myCookies = null;
图片 459                CookieContainer myCookieContainer = new CookieContainer();
图片 460                myHttpWebRequest.CookieContainer = new CookieContainer();
图片 461                if (cookieHeader.Length > 0)
图片 462                {
图片 463                 
图片 464                    myCookieContainer.SetCookies(new Uri(strURL), cookieHeader);
图片 465                    myHttpWebRequest.CookieContainer = myCookieContainer;
图片 466                }
图片 467                using (Stream reqStream = myHttpWebRequest.GetRequestStream())
图片 468                {
图片 469                    reqStream.Write(bs, 0, bs.Length);
图片 470                }
图片 471
图片 472                using (HttpWebResponse response = (HttpWebResponse)myHttpWebRequest.GetResponse())
图片 473                {
图片 474
图片 475                    cookieHeader = myHttpWebRequest.CookieContainer.GetCookieHeader(myHttpWebRequest.RequestUri);
图片 476                    myCookies = myHttpWebRequest.CookieContainer.GetCookies(myHttpWebRequest.RequestUri);
图片 477                    SetEncod(response.CharacterSet);
图片 478                    return System.Web.HttpUtility.HtmlDecode(System.Web.HttpUtility.UrlDecode(CHtml.HtmlStr(response.GetResponseStream(), tmpEncod))).Replace("r", "").Replace("n", "").Replace("t", "").Replace("  ", "");
图片 479                }
图片 480            }
图片 481            catch(Exception ex){ cookieHeader = ""; return ""; }
图片 482        }
图片 483        #endregion
图片 484
图片 485        #region 取数据
图片 486        /// <summary>
图片 487        /// 成效描述:在PostLogin成功登入后记录下Headers中的cookie,然后拿走此网址上其余页面包车型地铁内容
图片 488        /// </summary>
图片 489        /// <param name="strU路虎极光L">获取网址的某页面包车型大巴地址</param>
图片 490        /// <param name="strReferer">引用的地点</param>
图片 491        /// <returns>再次回到页面内容</returns>
图片 492        public string GetPage(string strURL, string strReferer)
图片 493        {
图片 494
图片 495            HttpWebRequest myHttpWebRequest = (HttpWebRequest)WebRequest.Create(strURL);
图片 496            ProxySetting(myHttpWebRequest);
图片 497            NetworkCredentialSetting(myHttpWebRequest);
图片 498            WebConfig(myHttpWebRequest);
图片 499            myHttpWebRequest.Method = "Get";
图片 500            if (!string.IsNullOrEmpty(strReferer))
图片 501                myHttpWebRequest.Referer = strReferer;
图片 502            myHttpWebRequest.Headers.Add("cookie:"   cookieHeader);
图片 503            CookieContainer myCookieContainer = new CookieContainer();
图片 504
图片 505            try
图片 506            {
图片 507                using (HttpWebResponse response = (HttpWebResponse)myHttpWebRequest.GetResponse())
图片 508                {
图片 509                    SetEncod(response.CharacterSet);
图片 510
图片 511                    return System.Web.HttpUtility.HtmlDecode(System.Web.HttpUtility.UrlDecode(CHtml.HtmlStr(response.GetResponseStream(), tmpEncod))).Replace("r", "").Replace("n", "").Replace("t", "").Replace("  ", "");
图片 512                }
图片 513            }
图片 514            catch
图片 515            {
图片 516                return "";
图片 517
图片 518            }
图片 519        }
图片 520
图片 521        /// <summary>
图片 522        /// 效率描述:在PostLogin成功登入后记录下Headers中的cookie,然后拿走此网址上别样页面包车型地铁剧情
图片 523        /// </summary>
图片 524        /// <param name="strUQashqaiL">获取网址的某页面包车型地铁地址</param>
图片 525        /// <param name="strReferer">引用的地点</param>
图片 526        /// <returns>再次回到页面内容</returns>
图片 527        public string PostPage(string strURL, string strArgs, string strReferer)
图片 528        {
图片 529            HttpWebRequest myHttpWebRequest = (HttpWebRequest)WebRequest.Create(strURL);
图片 530            ProxySetting(myHttpWebRequest);
图片 531            NetworkCredentialSetting(myHttpWebRequest);
图片 532            WebConfig(myHttpWebRequest);
图片 533            myHttpWebRequest.Referer = strReferer;
图片 534            myHttpWebRequest.Method = "Post";
图片 535            myHttpWebRequest.ContentType = "application/x-www-form-urlencoded";
图片 536            byte[] bs = Encoding.ASCII.GetBytes(strArgs);
图片 537            myHttpWebRequest.ContentLength = bs.Length;
图片 538            if (cookieHeader.Length > 0)
图片 539                myHttpWebRequest.Headers.Add("cookie:"   cookieHeader);
图片 540            CookieContainer myCookieContainer = new CookieContainer();
图片 541
图片 542            try
图片 543            {
图片 544                using (Stream reqStream = myHttpWebRequest.GetRequestStream())
图片 545                {
图片 546                    reqStream.Write(bs, 0, bs.Length);
图片 547                }
图片 548                using (HttpWebResponse response = (HttpWebResponse)myHttpWebRequest.GetResponse())
图片 549                {
图片 550
图片 551                    SetEncod(response.CharacterSet);
图片 552
图片 553                    return System.Web.HttpUtility.HtmlDecode(System.Web.HttpUtility.UrlDecode(CHtml.HtmlStr(response.GetResponseStream(), tmpEncod))).Replace("r", "").Replace("n", "").Replace("t", "").Replace("  ", "");
图片 554                }
图片 555            }
图片 556            catch
图片 557            {
图片 558
图片 559                return "";
图片 560            }
图片 561        }
图片 562        #endregion
图片 563
图片 564       
图片 565    }
图片 566    #endregion
图片 567
图片 568    #region 表态取网页数据
图片 569    /// <summary>
图片 570    /// 表态取网页数据
图片 571    /// </summary>
图片 572    public class GetHtml
图片 573    {
图片 574
图片 575
图片 576        /// <summary>
图片 577        /// 模拟提交表单POST
图片 578        /// System.Collections.Specialized.NameValueCollection PostVars =new System.Collections.Specialized.NameValueCollection()
图片 579        /// PostVars.Add("uid","name");
图片 580        /// PostVars.Add("pwd","123456");
图片 581        /// GetStrHtmlPost(url,PostVars)
图片 582        /// </summary>
图片 583        /// <param name="url">地址</param>
图片 584        /// <param name="PostVars">PostValue</param>
图片 585        /// <returns></returns>
图片 586        public static string GetStrHtmlPost(String url, System.Collections.Specialized.NameValueCollection PostVars)
图片 587        {
图片 588            if (PostVars == null)
图片 589                return "";
图片 590            System.Net.WebClient WebClientObj = new System.Net.WebClient();
图片 591
图片 592            string html;
图片 593            try
图片 594            {
图片 595                byte[] buf = WebClientObj.UploadValues(url, "POST", PostVars);
图片 596                //上面都没用啦,就地方一句话就能够了
图片 597                html = System.Text.Encoding.Default.GetString(buf);
图片 598                Encoding encoding = CHtml.GetEncoding(html);
图片 599                if (encoding == Encoding.UTF8) return html;
图片 600                return encoding.GetString(buf);
图片 601
图片 602            }
图片 603            catch
图片 604            {
图片 605
图片 606            }
图片 607
图片 608            return "";
图片 609
图片 610        }
图片 611
图片 612        /// <summary>
图片 613        /// 获取网页的HTML内容
图片 614        /// </summary>
图片 615        /// <param name="url">url</param>
图片 616        /// <returns></returns>
图片 617        public static string GetStrHtml(string url)
图片 618        {
图片 619            return GetStrHtml(url, null);
图片 620        }
图片 621
图片 622        /// <summary>
图片 623        ///  获取网页的HTML内容
图片 624        /// </summary>
图片 625        /// <param name="url">URL</param>
图片 626        /// <param name="encoding">Encoding</param>
图片 627        /// <returns></returns>
图片 628        public static string GetStrHtml(string url, Encoding encoding)
图片 629        {
图片 630            byte[] buf = new WebClient().DownloadData(url);
图片 631            if (encoding != null) return encoding.GetString(buf);
图片 632            string html = Encoding.UTF8.GetString(buf);
图片 633            encoding = CHtml.GetEncoding(html);
图片 634            if (encoding == Encoding.UTF8) return html;
图片 635            return encoding.GetString(buf);
图片 636        }
图片 637
图片 638    }
图片 639    #endregion
图片 640    
图片 641}
图片 642

        导师招生首页

 

                        图片 643

       导师招生第二页,第3页。

                      图片 644

                   图片 645

        开掘首页网站是     第几页   .html 

        于是网站大家得以手动编辑。

        strURLs=""

        n=50

        strURLs <- c(strURLs,paste(rep("""))

        strU奥德赛Ls包涵了全数1到50页导师招生网页的网站。

    二.2获得每一页导师招生里面四个话题的链接

             

        在先生招生页面下,有广大话题,大家需求获得各种话题的链接。

        用getHTMLLinks函数查看导师招生里面全体U昂CoraL,再对照话题网址。

 

        图片 646

       

        发掘话题网站是构成元素是 html/201702/11075436.html 类似的URL

        那时俺使用先从事教育工作师招生网页提取全数U昂CoraL,再相配 html * .html格式的UPAJEROL,最终再后边加上 的策略。

        自定义greg函数用王斌则相称,并且赢得相配到的字符串。
            greg <- function(pattern,istring){
                gregout <- gregexpr(pattern,istring)   #pattern为合营方式,istring为待相配的字符串
                substr(istring,gregout[[1]],gregout[[1]] attr(gregout[[1]],'match.length')-1)
             }

         自定义extradress函数,用于提取strU福睿斯L网页的中的 U瑞鹰L ,最终管理回来各类话题网页的链接。

            extradress <- function(strURL){
                 prefix <- ""
                 pattern <- "html/[0-9/] .html"
                 links <- getHTMLLinks(strURL)
                 needlinks <- gregexpr(pattern,links)
                 needlinkslist <- list()
                for (i in which(unlist(needlinks)>0)){
                    preadress <- substr(links[i],needlinks[[i]],needlinks[[i]] attr(needlinks[[i]],'match.length')-1)
                    needlinkslist<- c(needlinkslist,list(preadress))
                   adresses <- lapply(needlinkslist,function(x)paste(prefix,x,sep=""))
                 }
                return (adresses)
                 }

     

叁、从HTML树中获取大家所要的多寡

    三.一 XML文档基本知识

    下边是小木虫的壹部分html:

本文由bg游戏资讯发布于网页游戏资讯,转载请注明出处:取远程网页数据,R语言从小木虫网页批量提取考

关键词: R语言统计 R语言 抓取网页

上一篇:才女一生,所以慈悲
下一篇:没有了