引用
using System.Net;using System.IO;
初始化请求
通过工厂机制初始化一个HttpWebRequest请求,参数就是要请求的地址
HttpWebRequest request = WebRequest.CreateHttp("https://search.douban.com/movie/subject_search?search_text=钢铁");
对request进行请求头的设置
只列举了少数几个常用的请求头,更多的请求头设置,直接查看HttpWebRequest对象的属性
查看需要设置的请求头
Method
获取或设置请求方法,默认为GET
request.Method = "POST";
POST方法写入数据
//把多组数据键值对用&隔开,写入一个字符串中string data = string.Format("id={0}&pwd={1}", "123", "dfg5");//用流的方式写入数据到请求中using (StreamWriter myWriter = new StreamWriter(request.GetRequestStream())){myWriter.Write(data);}
Headers
获取或设置请求头
request.Headers.Add("Accept-Language: en-us;q=0.5,en;q=0.3");request.Headers.Add("Accept-Language", "en-us;q=0.5,en;q=0.3");
有一些header为限制级的,对于这些header,你不能直接来通过headers.Add方法来添加 如: Host、Connection、User-Agent、Referer、Range、Content-Type、Content-Length、Expect、Proxy-Connection、If-Modified-Since
UserAgent
获取或设置user-agent
request.UserAgent = "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:81.0) Gecko/20100101 Firefox/81.0";
Referer
从哪里来的,从哪个url进入到要爬取的url页面的
request.Referer = "https://wwww.baidu.com";
设置Cookie
1.//先设置好cookieCookie ck1 = new Cookie("key","value");Cookie ck2 = new Cookie("key", "value");//添加cookierequest.CookieContainer.Add(ck1);request.CookieContainer.Add(ck2);2.CookieCollection ccl = new CookieCollection();ccl.Add(ck1);request.CookieContainer.Add(ccl);3.request.Headers.Add("Cookie", "整个cookie写入这个字符串");
设置代理
//ip,端口WebProxy wp = new WebProxy("192.168.0.2",3303);WebProxy wp2 = new WebProxy("192.168.0.2:3303");//设置代理request.Proxy = wp;
获取响应
GetResponse()才是发送请求的函数,response最后需要Close()方法关闭,所以最好写在using里面
HttpWebResponse response = (HttpWebResponse)request.GetResponse();response.Close();//或者using(HttpWebResponse response = (HttpWebResponse)request.GetResponse()){//...}
HttpWebResponse对象有很多属性,可以通过这些属性查看响应头
可能造成乱码的编码问题
//目标网页header里面没有设置charset,就会返回这种编码的字符if (response.CharacterSet == "ISO-8859-1"){//注册安装更多的编码,在 .net core中,编码很少,需要这个安装Encoding.RegisterProvider(CodePagesEncodingProvider.Instance);}
获取响应流
获取响应之后,通过响应,获取响应流
using(Stream streamResponse = response.GetResponseStream()){//...}
读取响应流
string html="";//读取响应流,设置编码using (StreamReader streamResponseReader = new StreamReader(streamResponse,Encoding.GetEncoding("utf-8"))){html = streamResponseReader.ReadToEnd();}
到这里就获取了想要抓取的页面的html的内容了。然后解析这个html代码,提取想要的数据
