概念

爬虫就是对网页的获取。

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

爬虫的工作原理和浏览器浏览网页的原理类似,是请求/返回模式,就是说客户端向服务器提出访问某个页面的请求(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. iOS基础面试题汇总

    目录 1. #import 跟#include.@class有什么区别?#import<> 跟 #import""又什么区别? 都可以完整包含某个文件的内容,但是#im ...

  2. 封装 Gson 解析Json到对象是否失败

    在使用Google的 Gson 类库解析 Json 数据时,难免会出现解析失败的情况. 在这种情况下,使用 if(obj == null) 是不可行的,fromJson 方法会自动生成对象的实例,所以 ...

  3. 学习TensorFlow的第一天

    https://www.cnblogs.com/wangxiaocvpr/p/5902086.html

  4. Chrome 开发工具之 Memory

    开发过程中难免会遇到内存问题,emmm... 本文主要记录一下Chrome排查内存问题的面板,官网也有,但有些说明和例子跟不上新的版本了,也不够详细...   !!! 多图预警!!!    简单的内存 ...

  5. 【0728 | 预习】第三篇 Python基础

    第三篇 Python基础预习 Part 1 变量 一.什么是变量? 二.为什么要有变量? 三.定义变量 四.变量的组成 五.变量名的命名规范 六.变量名的两种风格 Part 2 常量 Part 3 P ...

  6. Linux--shell重定向与文件处理命令--02

    一.IO重定向 1.数据输入:键盘---标准输入,但并不是唯一输入方式 ” | passwd –stdin username #同时添加用户和密码 while line;do 循环体...$line ...

  7. netty源码解解析(4.0)-17 ChannelHandler: IdleStateHandler实现

    io.netty.handler.timeout.IdleStateHandler功能是监测Channel上read, write或者这两者的空闲状态.当Channel超过了指定的空闲时间时,这个Ha ...

  8. c#引用本地dll发布后运行exe错误

    在config 文件夹 configuration 配置节点下面 添加 <runtime> <gcConcurrent enabled="true" /> ...

  9. Git原理入门简析

    为了获得更好的阅读体验,建议访问原地址:传送门 前言: 之前听过公司大佬分享过 Git 原理之后就想来自己总结一下,最近一忙起来就拖得久了,本来想塞更多的干货,但是不喜欢拖太久,所以先出一版足够入门的 ...

  10. trec 2019 fair ranking track

    trec 2019 fair ranking track     最近实验室要求参加trec 2019新出的track:fair ranking track.这里整理一下该任务的思想和要求.这次tra ...