网络爬虫之必备知识

  摘要:本文主要理清网络爬虫的概念,简要讲解爬虫的必备知识,分为python基础、字符编码、http头信息、http状态码、html基础、爬虫职业道德。内容浅显,主要理一理相关知识。


一、网络爬虫的概念
  网络爬虫,又被称为网页蜘蛛,网络机器人,是一种按照一定的规则,自动地抓取万维网信息的程序或者脚本。 通俗的说,我们写爬虫的目的就是自动从不同的网页上提取海量的数据。以下是我之前爬取的部分数据:
这里写图片描述
二、网络爬虫的必备知识
  1. python基础
  网络爬虫并不是只有python才能编写,但python在编写网络爬虫有巨大的优势,因此把python的知识也列为必备知识。。
  1.1. Anaconda安装
  python比较头疼的是模块管理和Python不同版本的问题,因此不得不推荐Anaconda,Anaconda打破了包管理与环境管理的约束,能非常方便地安装各种版本python、各种package,并方便地切换。官网地址
  python比较头疼的是模块管理和Python不同版本的问题,因此必须推荐Anaconda,Anaconda安装时请勾选将Anaconda加入到环境变量。
这里写图片描述
  1.2. python开发工具
  python开发工具是用来编写python代码的,常见的vim、atom、sublime text、pycharm、wingide,个人使用的是wing ide pro6
  1.3. python基础要点
  关于python的教程网上有很多,也不是一篇文章能写完的,因此这里仅推荐一些教程和书籍,并提一些要点以便学习时多加关注。
  python菜鸟教程廖雪峰python教程
  入门书籍:《Python简明教程》《笨办法学Python》《Python编程:入门到实践》
  基础要点1:模块的导入和使用、变量作用域、类型转换、变量内存地址、对象的概念、形参/实参、tuple/list/dict/set的操作、字符串操作、for/while/break/continue。
  基础要点2:类的定义和使用、类方法/对象方法/静态方法、、Lambda函数、测试/调试、多线程/多进程/锁。
这里写图片描述
  2. 字符编码:详解UnicodeDecodeError/UnicodeEncodeError
  计算机里所有数据的存储、处理、传输都是二进制形式的,而我们在屏幕上看到的英文、汉字等字符是二进制数转换之后的结果,字符编码可以理解为字符和二进制数字转换的规则。
  最早定义的ASCII码是显示现代英语的,之后各个国家纷纷定义自己语言的编码,为解决各国交流出现的乱码,推出通用的字符编码,即Unicode。
  国内常见的字符编码有ASCII,GB2312(简体),Big5(繁体),GBK(简繁体,21003个汉字),GB18030(简繁体,70244个汉字),utf-8(Unicode其中的一个版本)。
  将字符转换成二进制形式,叫”编码”,即encode;将二进制数转换成字符,叫”解码”,即decode。
  不同编码的字符之间的转换,需要先进行二进制编码,再解码,以下是示例代码,转换编码前是乱码,转换后正常显示。

  建议在py文件头部加上”# -*- coding: utf-8 -*-“;建议使用GB18030代替GB2312、Big5、GBK。。
  3. http头信息:请参阅《http权威指南》,这里简单讲讲几个常见的头信息。
    3.1. User-Agent:标识客户端应用程序的类型。爬虫通常都需要不停变换User-Agent以躲避反爬虫,之后教程的代码实例中可以看到。
    3.2. Accept-Encoding:告诉服务器可以接受的压缩方式。主要有如下几种。
      3.2.1. “gzip”,表明接受GNU zip压缩的数据。
      3.2.2. “compress”,表明接受Unix的文件压缩程序压缩的数据。
      3.2.3. “deflate”,表明zlib格式压缩的数据。
      3.2.4. “identity”,表明不接受任何压缩数据。没有设置Accept-Encoding时的默认值。
      3.2.5. “*”,表明由服务器决定。
      另外,还有一个参数Q表明数据压缩的优先级,值从0.0-1.0,其中0.0不接受相应的压缩数据,1.0表明最希望使用的压缩方式。
      压缩数据的好处可以减轻网络传输的压力,坏处是服务器和客户端分别需要压缩和解压缩。因此编写爬虫时,请注意如果数据是经过压缩的,必须先解压,再进行编码解码。
    3.3. Accept:告诉服务器可以接受的数据类型。比如”*/*”代表所有类型,”text/*”代表所有文本类型,’image/*’代表所有的图片类型。
    3.4. Authorization:向服务器回应客户端自己的的身份验证信息。用谷歌浏览器按F12打开开发人员工具,再登陆知乎网,就可以发现Authorization。
    3.5. refer:告诉服务器从哪个网页获得其请求的url。反爬虫往往也会检测refer来帮助判断。
    3.6. Cookie:主要供服务器识别和跟踪客户端。是非常重要的http头,一旦服务器发现客户端的cookie数据不对,就不会提供正常的服务。cookie也是黑客最关心的http头。
  http头需要根据爬取网站的要求来设置,请尽可能和浏览器一致,以通过服务器的验证,才能正常爬取数据。
  4. http状态码:详见《http权威指南》或搜索引擎,这里介绍几个常见的状态码。
    4.1. 200:表明请求已成功。但请注意,返回200不代表就能得到爬虫想要的数据,比如服务器可能会返回状态码200,然后在返回数据里说明出现的问题。
    4.2. 400:请求有误。请检查url是否合法,参数是否正确。
    4.3. 401:Authorization验证没有通过,出现这种情况请在http头中设置正确的Authorization。
    4.4. 403:服务器已经理解请求,但是拒绝执行它。通常是被服务器反爬虫了。
    4.5. 404:请求的资源不存在。服务器有时候会故意在网页设置不存在的链接,普通用户很少会点击,而爬虫往往就会去请求这些链接。

  5. html基础
  网页源码由标签、CSS、 JavaScript组成。打开http://www.goubanjia.com/free/index1.shtml,右键查看网页源码如下:

  标签是由尖括号包围的关键词,通常是成对出现的,比如分别是开始标签和结束标签。
  每一个标签代表一个元素,比如上诉网页中,就表示meta元素的属性charset,值为”UTF-8”,即网页所用的字符编码。
  爬虫一般需要通过正则表达式/lxml/BeautifulSoup提取标签里面的内容。
  CSS用来控制整个站点的样式和布局,对于爬虫来说,一般不需要关心。
   JavaScript则是用来对网页元素进行一些特定的处理,比如上诉网页浏览器中看到”154.73.155.146:8080”,网页源码中却找不到,就是JavaScrip的缘故。
  另外需要提的是AJAX,即异步加载的JavaScript和XML,我们以头条为例。
  在谷歌浏览器中按F12打开开发人员工具,打开头条首页,然后滚动一下鼠标,就会发现浏览器向服务器发送了新的请求,新的数据就在服务器的回复里。


  6. 爬虫的职业道德
  爬虫容易给服务器带来巨大的负担,因此请尽可能遵守机器人协议,一般在对方网站的根目录下有robots.txt。
  请不要编写僵尸爬虫;在爬取数据时,请务必加上一定的延迟;请不要使用爬取的数据损坏对方的利益,否则可能会遭遇官司。
  最后,爬虫入门容易精通难,在爬取海量数据的时候,不得不考虑去重的效率,内存的优化,数据库的优化,以及令人头疼的反反爬虫。

  • 7
    点赞
  • 36
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值