爬虫基本知识之C/S交互
概念
爬虫就是对网页的获取。
一般获取的网页中又有通向其他网页的通路,我们叫做超链接,那么就可以通过这样的通路获取更多其他的网页,就像一只在网路上爬行的蜘蛛,所以俗称爬虫。
爬虫的工作原理和浏览器浏览网页的原理类似,是请求/返回模式,就是说客户端向服务器提出访问某个页面的请求(request),服务器返回客户端请求的内容(response)。URL是表示互联网上每个文件的唯一标志,也就是我们所说的网址,客户端正是通过URL向某个具体网页发出请求的。最简单的过程可以用如下代码表示:
import urllib2
request = urllib2.Request("http://www.baidu.com")# 构造一个request请求
response = urllib2.urlopen(request)#发送请求并获得一个response
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方式
import urllib2
values ={"username":"985575418@qq.com","password":"XXXX"}
data = urllib.urlencode(values)
url ="https://passport.csdn.net/account/login?from=http://my.csdn.net/my/mycsdn"
request = urllib2.Request(url,data)
response = urllib2.urlopen(request)
print response.read()
可以看到,这种方式先把需要提交的信息构造成一个data,然后和URL一同再去构造request对象。
GET方式
import urllib2
import urllib
values ={"username":"985575418@qq.com","password":"XXXX"}
data = urllib.urlencode(values)
url ="http://passport.csdn.net/account/login"
geturl = url +"?"+ data
request = urllib2.Request(geturl)
response = urllib2.urlopen(request)
print response.read()
可以看到GET方式是直接把参数添加到了URL后面
设置Headers
即便如此,有的网站还是不允许访问的,会出现识别问题。这种时候我们为了真正的伪装成浏览器,还需要在构造request的时候设置一些Headers属性。打开浏览器查看网页的headers可以看到如下内容:
我们可以根据需要选择某些属性去构建request,比如下面用到了user-agent和referer。
headers ={'User-Agent':'Mozilla/4.0 (compatible; MSIE 5.5; Windows NT)',
'Referer':'http://www.zhihu.com/articles'}
request = urllib2.Request(url, headers = headers)
其中User-agent叫用户代理,是一种向网站提供所使用浏览器类型及版本、操作系统、浏览器内核等信息的标志,是伪装成浏览器的重要组成。真正的浏览器提供了这个属性也可以方便网站为用户提供更好的显示和体验。Referer显示的是是从哪个页面来到的当前页面,它可以用于防止反盗链,服务器会识别headers中的referer是不是它自己,如果不是,有的服务器不会响应。
有了上面的基础知识,就可以开始理解和实现真正的爬虫了。
爬虫基本知识之C/S交互的更多相关文章
- Python静态网页爬虫相关知识
想要开发一个简单的Python爬虫案例,并在Python3以上的环境下运行,那么需要掌握哪些知识才能完成一个简单的Python爬虫呢? 爬虫的架构实现 爬虫包括调度器,管理器,解析器,下载器和输出器. ...
- python网络爬虫,知识储备,简单爬虫的必知必会,【核心】
知识储备,简单爬虫的必知必会,[核心] 一.实验说明 1. 环境登录 无需密码自动登录,系统用户名shiyanlou 2. 环境介绍 本实验环境采用带桌面的Ubuntu Linux环境,实验中会用到桌 ...
- python 爬虫基础知识一
网络爬虫(又被称为网页蜘蛛,网络机器人,在FOAF社区中间,更经常的称为网页追逐者),是一种按照一定的规则,自动的抓取万维网信息的程序或者脚本. 网络爬虫必备知识点 1. Python基础知识2. P ...
- python 爬虫基础知识(继续补充)
学了这么久爬虫,今天整理一下相关知识点,还会继续更新 HTTP和HTTPS HTTP协议(HyperText Transfer Protocol,超文本传输协议):是一种发布和接收 HTML页面的方法 ...
- 网络爬虫必备知识之urllib库
就库的范围,个人认为网络爬虫必备库知识包括urllib.requests.re.BeautifulSoup.concurrent.futures,接下来将结合爬虫示例分别对urllib库的使用方法进行 ...
- 网络爬虫必备知识之requests库
就库的范围,个人认为网络爬虫必备库知识包括urllib.requests.re.BeautifulSoup.concurrent.futures,接下来将结对requests库的使用方法进行总结 1. ...
- 网络爬虫必备知识之concurrent.futures库
就库的范围,个人认为网络爬虫必备库知识包括urllib.requests.re.BeautifulSoup.concurrent.futures,接下来将结对concurrent.futures库的使 ...
- 自学Python四 爬虫基础知识储备
首先,推荐两个关于python爬虫不错的博客:Python爬虫入门教程专栏 和 Python爬虫学习系列教程 .写的都非常不错,我学习到了很多东西!在此,我就我看到的学到的进行总结一下! 爬虫就是 ...
- 【VB6】使用VB6创建和访问Dom树【爬虫基础知识 】
使用VB6创建和访问Dom树 关键字:VB,DOM,HTML,爬虫,IHTMLDocument 我们知道,在VB中一般大家会用WebBrowser来获取和操作dom对象. 但是,有这样一种情形,却让我 ...
随机推荐
- Django配置MySQL数据库
一.在settings.py中配置 DATABASES = { 'default': { 'ENGINE': 'django.db.backends.mysql', # 数据库引擎 'NAME': ' ...
- Python - 自学django,上线一套资产管理系统
一.概述 终于把公司的资产管理网站写完,并通过测试,然后上线.期间包括看视频学习.自己写前后端代码,用时两个多月.现将一些体会记录下来,希望能帮到想学django做web开发的人.大牛可以不用看了,小 ...
- UEM“探针”技术及用户体验管理
随着互联网产品越来越多,用户群体越来越庞大以及用户品位的多样性增加,我们会发现这样的一个规律,就是相同类型的产品,比如播放器中的QQ影音和暴风影音,再比如小游戏平台中的腾讯游戏和联众等等,他们的功能是 ...
- Spring Cloud下基于OAUTH2+ZUUL认证授权的实现
Spring Cloud下基于OAUTH2认证授权的实现 在Spring Cloud需要使用OAUTH2来实现多个微服务的统一认证授权,通过向OAUTH服务发送某个类型的grant type进行集中认 ...
- Selenium+Java - 结合sikuliX操作Flash网页
前言 前天被一个Flash的轮播图,给玩坏了,无法操作,后来请教了下crazy总拿到思路,今天实践了下,果然可以了,非常感谢! 模拟场景 打开百度地图 切换城市到北京 使用测距工具 测量 奥林匹克森林 ...
- 阿里云短信服务(JAVA)
一,前言 短信验证码想必大家都不陌生,在很多网站,APP中都有使用到.比如登录,注册,身份校验等场景.不过通常情况下,短信服务都是外包给第三方公司的,接下来向大家分享如何使用阿里的短信服务. 二, ...
- js作用域链和预编译
js引擎运行分为两步,预解析 代码执行 (1)预解析: js引擎会拿js里面所有的var还有 function 提升到当前作用域的最前面 (2)代码执行:按照代码书写的顺序从上往下执行 预解析分为:变 ...
- Springboot源码分析之jar探秘
摘要: 利用IDEA等工具打包会出现springboot-0.0.1-SNAPSHOT.jar,springboot-0.0.1-SNAPSHOT.jar.original,前面说过它们之间的关系了, ...
- 常用高效 Java 工具类总结
一.前言 在Java中,工具类定义了一组公共方法,这篇文章将介绍Java中使用最频繁及最通用的Java工具类.以下工具类.方法按使用流行度排名,参考数据来源于Github上随机选取的5万个开源项目源码 ...
- JavaScrip数据类型
数据类型: 基础数据类型: Number String Boolean Undefined Null 引用数据类型: Object Symbol