概念

爬虫就是对网页的获取。

一般获取的网页中又有通向其他网页的通路,我们叫做超链接,那么就可以通过这样的通路获取更多其他的网页,就像一只在网路上爬行的蜘蛛,所以俗称爬虫。

爬虫的工作原理和浏览器浏览网页的原理类似,是请求/返回模式,就是说客户端向服务器提出访问某个页面的请求(request),服务器返回客户端请求的内容(response)。URL是表示互联网上每个文件的唯一标志,也就是我们所说的网址,客户端正是通过URL向某个具体网页发出请求的。最简单的过程可以用如下代码表示:

  1. import urllib2
  2. request = urllib2.Request("http://www.baidu.com")# 构造一个request请求
  3. response = urllib2.urlopen(request)#发送请求并获得一个response
  4. print response.read()#用read()获取返回的内容并打印出来

Http协议之POST和GET

对于简单的静态网页,这样就已经足够了,能够很顺利的获取到html文本。
但是对于这个千变万化的互联网来说,这点东西是根本不够用的。第一个需要考虑就是动态网页,它需要我们动态的传参数给他,比如在登录的时候就需要提交用户名和密码等表单信息才允许我们进一步的获取信息。这就需要我们在构造request的同时传递更多的信息给服务器了。

说到传递参数,就要谈到HTTP协议与服务器的交互方式了。HTTP协议有六种请求的方法,分别是get,head,put,delete,post,options,其中基本的是GET、POST和PUT、DELET四种。我们知道,一个URL地址用于描述一个网络上的资源,HTTP中的GET, POST, PUT, DELETE就对应着对这个资源的查,改,增,删4个操作。对于爬虫中传递数据而言,用到的就是POST和GET了。下面来看看GET和POST的区别:
1.GET提交的数据会放在URL之后,以?分割URL和传输数据,参数之间以&相连
2.GET提交的数据大小有限制(因为浏览器对URL的长度有限制),而POST方法提交的数据没有限制。
3.GET方式需要使用Request.QueryString来取得变量的值,而POST方式通过Request.Form来获取变量的值。
4.GET方式提交数据,会带来安全问题,比如通过GET方式提交数据时,用户名和密码将出现在URL上,如果页面可以被缓存或者其他人可以访问这台机器,就可以从历史记录获得该用户的账号和密码。下面呈现了两种方式的提交方式。

POST方式

  1. import urllib2
  2. values ={"username":"985575418@qq.com","password":"XXXX"}
  3. data = urllib.urlencode(values)
  4. url ="https://passport.csdn.net/account/login?from=http://my.csdn.net/my/mycsdn"
  5. request = urllib2.Request(url,data)
  6. response = urllib2.urlopen(request)
  7. print response.read()

可以看到,这种方式先把需要提交的信息构造成一个data,然后和URL一同再去构造request对象。

GET方式

  1. import urllib2
  2. import urllib
  3. values ={"username":"985575418@qq.com","password":"XXXX"}
  4. data = urllib.urlencode(values)
  5. url ="http://passport.csdn.net/account/login"
  6. geturl = url +"?"+ data
  7. request = urllib2.Request(geturl)
  8. response = urllib2.urlopen(request)
  9. print response.read()

可以看到GET方式是直接把参数添加到了URL后面

设置Headers

即便如此,有的网站还是不允许访问的,会出现识别问题。这种时候我们为了真正的伪装成浏览器,还需要在构造request的时候设置一些Headers属性。打开浏览器查看网页的headers可以看到如下内容:

我们可以根据需要选择某些属性去构建request,比如下面用到了user-agent和referer。

  1. headers ={'User-Agent':'Mozilla/4.0 (compatible; MSIE 5.5; Windows NT)',
  2. 'Referer':'http://www.zhihu.com/articles'}
  3. request = urllib2.Request(url, headers = headers)

其中User-agent叫用户代理,是一种向网站提供所使用浏览器类型及版本、操作系统、浏览器内核等信息的标志,是伪装成浏览器的重要组成。真正的浏览器提供了这个属性也可以方便网站为用户提供更好的显示和体验。Referer显示的是是从哪个页面来到的当前页面,它可以用于防止反盗链,服务器会识别headers中的referer是不是它自己,如果不是,有的服务器不会响应。

有了上面的基础知识,就可以开始理解和实现真正的爬虫了。

爬虫基本知识之C/S交互的更多相关文章

  1. Python静态网页爬虫相关知识

    想要开发一个简单的Python爬虫案例,并在Python3以上的环境下运行,那么需要掌握哪些知识才能完成一个简单的Python爬虫呢? 爬虫的架构实现 爬虫包括调度器,管理器,解析器,下载器和输出器. ...

  2. python网络爬虫,知识储备,简单爬虫的必知必会,【核心】

    知识储备,简单爬虫的必知必会,[核心] 一.实验说明 1. 环境登录 无需密码自动登录,系统用户名shiyanlou 2. 环境介绍 本实验环境采用带桌面的Ubuntu Linux环境,实验中会用到桌 ...

  3. python 爬虫基础知识一

    网络爬虫(又被称为网页蜘蛛,网络机器人,在FOAF社区中间,更经常的称为网页追逐者),是一种按照一定的规则,自动的抓取万维网信息的程序或者脚本. 网络爬虫必备知识点 1. Python基础知识2. P ...

  4. python 爬虫基础知识(继续补充)

    学了这么久爬虫,今天整理一下相关知识点,还会继续更新 HTTP和HTTPS HTTP协议(HyperText Transfer Protocol,超文本传输协议):是一种发布和接收 HTML页面的方法 ...

  5. 网络爬虫必备知识之urllib库

    就库的范围,个人认为网络爬虫必备库知识包括urllib.requests.re.BeautifulSoup.concurrent.futures,接下来将结合爬虫示例分别对urllib库的使用方法进行 ...

  6. 网络爬虫必备知识之requests库

    就库的范围,个人认为网络爬虫必备库知识包括urllib.requests.re.BeautifulSoup.concurrent.futures,接下来将结对requests库的使用方法进行总结 1. ...

  7. 网络爬虫必备知识之concurrent.futures库

    就库的范围,个人认为网络爬虫必备库知识包括urllib.requests.re.BeautifulSoup.concurrent.futures,接下来将结对concurrent.futures库的使 ...

  8. 自学Python四 爬虫基础知识储备

    首先,推荐两个关于python爬虫不错的博客:Python爬虫入门教程专栏   和 Python爬虫学习系列教程 .写的都非常不错,我学习到了很多东西!在此,我就我看到的学到的进行总结一下! 爬虫就是 ...

  9. 【VB6】使用VB6创建和访问Dom树【爬虫基础知识 】

    使用VB6创建和访问Dom树 关键字:VB,DOM,HTML,爬虫,IHTMLDocument 我们知道,在VB中一般大家会用WebBrowser来获取和操作dom对象. 但是,有这样一种情形,却让我 ...

随机推荐

  1. JSON合并,并按时间排序

    mergeJson: function (json1, json2) { var json = Object.assign([], json1, json2); return json.sort(fu ...

  2. 对vue中nextTick()的理解及使用场景说明

    异步更新队列: 首先我们要对vue的数据更新有一定理解: vue是依靠数据驱动视图更新的,该更新的过程是异步的. 即:当侦听到你的数据发生变化时, Vue将开启一个队列(该队列被Vue官方称为异步更新 ...

  3. CSS3:pointer-events | a标签禁用

    用纯css就能实现取消事件响应的方法,pointer-events,使用起来更加简单,它可以: pointer-events: auto | none | visiblePainted | visib ...

  4. charles(version4.2.1)抓包手机数据

    点击菜单栏的Proxy项,选择Proxy Settings. 设置HTTP Proxy的Port. 勾选透明代理Enable transparent HTTP proxying,也可不勾选. 设置代理 ...

  5. 算法与数据结构基础 - 二叉查找树(Binary Search Tree)

    二叉查找树基础 二叉查找树(BST)满足这样的性质,或是一颗空树:或左子树节点值小于根节点值.右子树节点值大于根节点值,左右子树也分别满足这个性质. 利用这个性质,可以迭代(iterative)或递归 ...

  6. 正则表达式之Matcher类中group方法

    前言 同事把一个excel表给我,里面的数据大概有几千的样子吧.自己需要把里面的数据一个一个拿出来做一个http请求,对得到的结果进行过滤,然后再写到上面去.这是就涉及到用脚本来进行操作了,于是自己搞 ...

  7. C# 发送邮件 并自定义邮件格式

    话不多说,直接上代码 //邮件提醒 string Body = @"Dear " + list.Rows[i]["people"] + ":<b ...

  8. GoAccess 分析 Nginx 日志

    0x00 事件 帮助朋友搭建了博客,运行过了一段时间,准备发个网站分析报告给他. 有效的数据只有 Nginx 的访问日志,于是使用决定 GoAccess 工具对这个日志进行分析, 0x01 安装 吾使 ...

  9. 管理Windows Server 2008本地用户和组

    下面介绍Windows Server 2008本地用户和组的管理包括创建用户.删除用户.重设密码.将用户添加到组.普通用户跟管理员的区别 .用户配置文件包括桌面上文件,桌面背景,桌面上图标,IE设置, ...

  10. Xcodebuild命令使用

    Xcodebuild简介 Xcodebuild是命令行工具包的其中一项. 命令行工具包(Command Line Tools)是一个轻量的.可以与XCode分开的.在Mac上单独下载的命令行工具包. ...