首页 > 其他分享 >小白学网络爬虫需要注意什么?

小白学网络爬虫需要注意什么?

时间:2022-11-02 11:37:54浏览次数:49  
标签:http req 网络 Accept 爬虫 html 小白学 HttpWebRequest

做数据抓取的,那第一步离不开的肯定是爬虫。那话又说回来了,网络爬虫术语好像好像很高大上,其实不外乎写一个http请求,然后到互联网去抓取感兴趣的数据。方式不外乎两种:一种是带有目的爬,然后抓取自己想要的数据,我写的蜘蛛基本上属于这种,这种蜘蛛也比较呆直萌。而另一种就高大尚一点,基于搜索索引分类的蜘蛛,这种爬行永无终点,对于互联网的一切数据都感兴趣。简直就是互联网的搬运工。不理有没有用,先采回来再说。基于我的道行和读者的接受程度,我们只能简单的举第一种的例子,基于目的的采集。下文可以看看我对爬虫的一些理解案例供大家一起参考学习。

如何用C#写一个爬虫

爬虫,必须得有自己的内核,内核是啥?一个强悍的http访问组件,所幸的是微软早已帮我们准备了一个强悍的Net访问组件HttpWebRequest。有朋友会说,那不是很简单么,随便百度一下就知道怎么去写了,呃...

那我们就百度一下

HttpWebRequest req = (HttpWebRequest)HttpWebRequest.Create("http://www.cnblogs.com");
using (WebResponse wr = req.GetResponse())
{
var stream = wr.GetResponseStream();
using (System.IO.StreamReader sr = new System.IO.StreamReader(stream, Encoding.UTF8))
{
var html = sr.ReadToEnd();
}
}

如无意外,通过以上代码我们可以获取到博客园首页的html源码,代码简单易懂,如果爬虫就只获取一段html代码,那好像也没什么可说的。但我们说过,我们的爬虫是基于一定目的去采集数据的。所以只能获取一段html代码并不能满足我们的需求。或者说,我们如果只有能获取某个网站的首页,估计用处不大。那我们应该怎么去获取我们想要的页面呢?这只是一个简单的http GET方法,如果遇到POST怎么办?如果遇到windows身份认证?如果要记录Cookie怎么办?假如目标网站防采集...问题会源源不断的产生。当然只要花上一定时间,所有的问题都能在谷哥度娘找到答案,但是如何能省去一些碰壁的时间呢?这就是我这篇文章重点介绍的地方。

你必须知道的http头

如果我们要讲http协议,估计讲个几小时也讲不完,当然他也很简单,但记住几个重点,我们便可以应付80%以上的可能。工欲善其事,必先利其器。我们得找一个工具获取http头,不然讲这个有点抽象。这个市面上所有的浏览器几乎都有这样工具,一般打开浏览器按F12就可以看到,如果按F12没反应!呃...百度一下“Firebug”

那我们看看上面代码实际产生的http头,我用的是Chrome浏览器,如果你用其他浏览器产生的结果不一样属正常现象

Accept:text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8

Accept-Encoding:gzip, deflate, sdch

Accept-Language:zh-CN,zh;q=0.8

Connection:keep-alive

Host:www.cnblogs.com

User-Agent:Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/53.0.2785.113 Safari/537.36

Accept 表明要接受的类型,一般默认为text/html

Accept-Encoding 表示接收解码格式,如果对方开启了gzip则便使用gzip格式进行解码

Accept-Language 接收语言,这对于多语言网站才有用

Connection:keep-alive 长连接,基本上从Http 1.1开始就默认开启

Host 这没什么可说的,域名

如果想知道HttpWebRequest的Http头,只需要

req.Headers.ToString()

那如何跟Chrome浏览器的http头一样呢?

只需修改上面的代码

HttpWebRequest req = (HttpWebRequest)HttpWebRequest.Create("http://www.baidu.com");
req.Accept = "text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8";
req.Headers.Add("Accept-Encoding", "gzip, deflate, sdch");
req.Headers.Add("Accept-Language", "zh-CN,zh;q=0.8");
req.UserAgent = "Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/53.0.2785.113 Safari/537.36";
using (WebResponse wr = req.GetResponse())
{
var stream = wr.GetResponseStream();
using (System.IO.StreamReader sr = new System.IO.StreamReader(stream, Encoding.UTF8))
{
var html = sr.ReadToEnd();
}
}

然后toString()看看http头

Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8
Accept-Encoding: gzip, deflate, sdch
Accept-Language: zh-CN,zh;q=0.8
User-Agent: Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/53.0.2785.113 Safari/537.36
Host: www.baidu.com
Connection: Keep-Alive

顺序可能不一致,但不影响使用。

那为啥要跟Chrome一致?其实很多情况下,我们不需要动http头,但世界总是没有这么便宜的事,人家辛辛苦苦维护的网站就被你几行代码爬走了,所以作为站长,怎么也得预防一些居心不良的爬虫采集自己的数据,所以有矛就有盾。至于怎么防采集就不属于这篇文章的范畴了,我们要讲的是如何写好一个爬虫,一个让所有站长惊悚,厌恶的爬虫。

到此为止,我们只讲了简单的get,那如果要实现登录了?我要采集登录后是数据了?还有获取到html源码,我怎么抽离想要的数据等等,这些可能都是写爬虫的核心问题。因为基于篇幅考虑,我不想大范围的解答以上问题,很多百度都可以找到。

标签:http,req,网络,Accept,爬虫,html,小白学,HttpWebRequest
From: https://blog.51cto.com/u_13488918/5816087

相关文章

  • 计算机网络:数据报与虚电路
    分组交换根据其通信子网向端点系统提供的服务,还可进一步分为面向连接的虚电路方式和无连接的数据报方式。这两种服务方式都由网络层提供。要注意数据报方式和虚电路方式是分......
  • 图数据挖掘(一):网络的基本概念和表示方法
    最近《复杂网络建模》这门课要考试了,正好也在跟Stanford的《CS224W:MachineLearningWithGraphs》这门课,这里就一边整理笔记一边复习了。1.网络的定义网络(network)是......
  • 网络编程
    网络编程三次握手和四次挥手三次握手:A;你瞅啥?B:瞅你咋地?A:干一架!四次挥手:A:我要走了!B:你真的要走了吗?B:你真的真的要走了吗?A:......
  • 网络安全学习
      C++借助指针突破访问权限的限制,访问private、protected属性的成员变量(花拳绣腿)C++借助指针突破访问权限的限制,访问private、protected属性的成员变量(花拳绣腿)-......
  • Linux学习笔记(第十二篇)网络基础
    ​​Linux学习笔记(第零篇)计算机基础​​Linux学习笔记(第零篇)Linux文件系统及ShellLinux学习笔记(第一篇)零散命令Linux学习笔记(第二篇)目录操作命令Linux学习笔记(第三篇)文件操......
  • Linux学习笔记(第十四篇)管理常用网络服务
    ​​Linux学习笔记(第零篇)计算机基础​​Linux学习笔记(第零篇)Linux文件系统及ShellLinux学习笔记(第一篇)零散命令Linux学习笔记(第二篇)目录操作命令Linux学习笔记(第三篇)文件操......
  • Linux学习笔记(第十六篇)访问网络文件共享服务
    ​​Linux学习笔记(第零篇)计算机基础​​Linux学习笔记(第零篇)Linux文件系统及ShellLinux学习笔记(第一篇)零散命令Linux学习笔记(第二篇)目录操作命令Linux学习笔记(第三篇)文件操......
  • 计算网络掩码,与网络前后缀介绍与计算方法
     要了解网络掩码(子网掩码)得先了解什么是IP地址IP地址是IP协议提供的一种统一的地址格式,它为互联网上的每一个网络和每一台主机分配一个逻辑地址,以此来屏蔽物理地址的差......
  • 深度学习——卷积神经网络压缩方法总结(等待补充)
    卷积网络压缩方法总结卷积网络的压缩方法​​一,低秩近似​​​​二,剪枝与稀疏约束​​​​三,参数量化​​​​四,二值化网络​​​​五,知识蒸馏​​​​六,浅层网络​​我们知......
  • 深度学习从入门到实战——前馈神经网络
    这里写目录标题​​前馈神经网络​​​​连接主义​​​​感知器、多层感知器​​​​BP算法​​​​前馈神经网​​​​梯度下降法​​​​多层感知机​​​​BP算法​​......