python 爬虫入门(2) 爬虫基础知识 ; urllib 模块 ;urllib2 模块
2017-08-06 19:43
1061 查看
一、爬虫基础知识
这里转自1.什么是爬虫
爬虫,即网络爬虫,大家可以理解为在网络上爬行的一直蜘蛛,互联网就比作一张大网,而爬虫便是在这张网上爬来爬去的蜘蛛咯,如果它遇到资源,那么它就会抓取下来。想抓取什么?这个由你来控制它咯。比如它在抓取一个网页,在这个网中他发现了一条道路,其实就是指向网页的超链接,那么它就可以爬到另一张网上来获取数据。这样,整个连在一起的大网对这之蜘蛛来说触手可及,分分钟爬下来不是事儿。2.浏览网页的过程
在用户浏览网页的过程中,我们可能会看到许多好看的图片,比如3.URL的含义
URL,即统一资源定位符,也就是我们说的网址,统一资源定位符是对可以从互联网上得到的资源的位置和访问方法的一种简洁的表示,是互联网上标准资源的地址。互联网上的每个文件都有一个唯一的URL,它包含的信息指出文件的位置以及浏览器应该怎么处理它。URL的格式由三部分组成:①第一部分是协议(或称为服务方式)。②第二部分是存有该资源的主机IP地址(有时也包括端口号)。③第三部分是主机资源的具体地址,如目录和文件名等。爬虫爬取数据时必须要有一个目标的URL才可以获取数据,因此,它是爬虫获取数据的基本依据,准确理解它的含义对爬虫学习有很大帮助。4. 环境的配置
学习Python,当然少不了环境的配置,最初我用的是Notepad++,不过发现它的提示功能实在是太弱了,于是,在Windows下我用了PyCharm,在Linux下我用了Eclipse for Python,另外还有几款比较优秀的IDE,大家可以参考这篇文章二、urllib详解 我会看一些官方的函数,例子与内容,也会参考一些博文
High-level interface
[code]urllib.
urlopen方法Open anetwork object denoted by aURL for reading.[通过一个url打开一个网页 => 为了我们读取 ]urllib.urlopen(url[, data[, proxies[, context]]])#第一个是必要参数,后面两个作为小白应该还暂时用不到吧,用到了会提的[/code]
包含方法[code]read(),
readline(),
readlines(),
fileno(),
close(),
info(),
getcode()和
geturl()
》》》import urllib2 response=urllib2.urlopen("http://www.baidu.com") print response.read() >>> 全网页代码 print response.readline() >>> <!DOCTYPE html> print response.geturl() >>>
[code]urllib.
urlretrieve方法将由URL表示的网络对象复制到本地文件urllib.urlretrieve(url[,filename [,reporthook [,data] ] ] )注意点1:第三个参数(如果存在)是一个钩子函数,在建立网络连接后将被调用一次,并且在每个块读取之后一次。钩子将被传递三个参数; 到目前为止传输的块数,块大小(以字节为单位)以及文件的总大小。第三个参数可能是
-1在旧的FTP服务器上,不响应检索请求返回文件大小;注意点2:默认的请求方式是get,可以指定可选数据参数来制定post请求[/code]
》》》import urllib
url='http://www.baidu.com'
local='E://url.html'
urllib.urlretrieve()>>> 在E盘出现文件
[code]urllib.
urlcleanup
方法清除以前调用可能已经构建的缓存 [/code]urlretrieve()
Utility functions
[code]
urllib.
quote方法
quote(string[, safe])使用转义替换字符串中的特殊字符%xx。使用:特殊字符是指tap,space,/,:等等。safe参数代表你写的这个参数是安全的,也就意味着这些特殊字符不会被替换。默认的safe特殊字符是“/”注意:默认情况下,此功能用于引用URL的路径部分用途:将url数据获取之后,并将其编码,从而适用与URL字符串中,使其能被打印和被web服务器接受,或者一些api中。使用这是一个好习惯。[/code]
》》》import urllib
url='http://www.baidu.com'
print quote(url)
http%3A//www.baidu.com[/code]
[code]urllib.
quote_plus
方法官方解释【翻译之后会改变原意就直接贴出来了】:Like quote(), but also replaces spaces by plus signs, as required for quoting HTML form values when building up aquery string to go into aURL. Plus signs in the original string are es caped unless they are included in safe. It also does not have safe default to
'/'. 这个功能比quote多一些,具体使用看情况。 PS:具体使用和quote类似,不过默认的safe字符是space,他会将space转换为“+”[/code]
[code]
urllib.
unquote
方法unquote(string)与unquote相反!) PS:如果你编码之后,接受的时候要解码才能看的懂,就是这个意思![/code]
》》》 url='http://www.baidu.com'
eurl=quote(url)
durl=unquote(eurl)
print eurl,durl
http%3A//www.baidu.com
http://www.baidu.com[/code]
[code]urllib.
unquote_plus
方法unquote_plus(string)PS:与quote_plus相反[/code]
[code]
urllib.
urlencode
方法urlencode(query [,doseq ] )用法:把键值对转化成能识别的形式,python中有这样的数据类型[/code]
[code]urllib.
urldecode
方法清除以前调用可能已经构建[/code]urlretriev e()的缓存
Example
GET
>>> import urllib>>> params = urllib.urlencode({'spam':1, 'eggs':2, 'bacon':0})>>> f = urllib.urlopen("http://www.musi-cal.com/cgi-bin/query?%s" % params)>>> print f.read()
POST
>>> import urllib>>> params = urllib.urlencode({'spam':1, 'eggs':2, 'bacon':0})>>> f = urllib.urlopen("http://www.musi-cal.com/cgi-bin/query", params)>>> print f.read()
HTTP代理
>>> import urllib>>> proxies = {'http':'http://proxy.example.com:8080/'}>>> opener = urllib.FancyURLopener(proxies)>>> f = opener.open("http://www.python.org")>>> f.read()
None代理
>>> import urllib>>> opener = urllib.FancyURLopener({})>>> f = opener.open("http://www.python.org/")>>> f.read()当然这里的代理是稍微高级的一些用法了
三、urllib2 详解 urllib和urllib2不可以相互代替,有人说urllib2更加易读,也许吧
urllib提供urlencode方法用来 encode 然后才能 发送data;但是urllib2可以接受request类的实例,但是urllib只可以接受url的对象,这也是为什么二者经常在一起使用!!!!所以我们得了解response能相比与之前能多做哪些事情1、可以向服务器发送数据data;urllib2不发送数据时,使用的时GET,在发送数据的时候使用的时POST,此时需要的data以标准的encode方式,然后作为一个数据参数传给request对象。为什么需要传送数据?因为假如你要扒某注册网站,你不传数据进去,难道他把所有人的姓名,密码打印出来?那还不如不爬。。import urllibimport urllib2url= 'http://www.someserver.com/cgi-bin/register.cgi'values = {}values['name'] = 'Michael Foord'values['location'] = 'Northampton'values['language'] = 'Python'data= urllib.urlencode(values) #数据进行编码req = urllib2.Request(url,data) #作为data参数传递到Request对象中response = urllib2.urlopen(req)the_page = response.read()print the_page2、可以向服务器发送额外的信息(metadata),这些信息被当作HTTP头发送:Header可以通过Request提供的 . add_header() 方法进行添加
要加入 header,需要使用 Request 对象:import urllib2[/code]
request = urllib2.Request(uri)
request.add_header('User-Agent', 'fake-client')
response = urllib2.urlopen(request)
User-Agent :有些服务器或 Proxy 会通过该值来判断是否是浏览器发出的请求 Content-Type :在使用 REST 接口时,服务器会检查该值,用来确定 HTTP Body 中的内容该怎样解析。常见的取值有: application/xml : 在 XML RPC,如 RESTful/SOAP 调用时使用 application/json : 在 JSON RPC 调用时使用application/x-www-form-urlencoded : 浏览器提交 Web表单时使用
方法[code]urllib2.urlopen
urlopen(url[,data[,timeout [,cafile [,capath [,cadefault [,context]]]]] )参数:可选的data;数据可以是指定要发送到服务器的附加数据的字符串,或者
None不需要这样的数据。目前HTTP请求是唯一使用数据的请求; 当提供数据参数时,HTTP请求将是POST而不是GET 。数据应该是标准应用程序的缓冲区 / x-www-form-urlencoded 格式可选的timeout参数指定阻塞操作(如连接尝试)的超时(如果未指定,将使用全局默认超时设置)用法:打开URL url,它可以是一个字符串或一个
Request对象,具体使用和urllib差不多附加方法:
geturl()- 返回检索的资源的URL,通常用于确定是否遵循重定向
info()- 以
mimetools.Message实例的形式返回页面的元信息(如标题)(请参阅
getcode()- 返回响应的HTTP状态代码。[/code]
(url[,data] [,headers] [,origin_req_host] [,unverifiable] )参数:可选的data;数据可以是指定要发送到服务器的附加数据的字符串,或者[code]urllib2.Requst类
None不需要这样的数据。目前HTTP请求是唯一使用数据的请求; 当提供数据参数时,HTTP请求将是POST而不是GET 。数据应该是标准应用程序的缓冲区 / x-www-form-urlencoded 格式可选的headers参数 应该是字典,并且将被视为
add_header()被调用的每个键和值作为参数,
User-Agent浏览器用于标识自身的标头值 - 一些HTTP服务器只允许来自常见浏览器的请求而不是脚本。这也是为了防止,网站被爬虫扒爆了。用法:打开URL url,它可以是一个字符串或一个
Request对象,具体使用和urllib差不多最后两个参数仅用于正确处理第三方HTTP Cookie下面我将列出所有的request类中的方法:
相关文章推荐
- Python基础知识——urllib模块在爬虫中的应用
- python爬虫入门(1) 基础知识 ; 正则表达式 Re 模块
- Python零基础入门十九之爬虫基础知识
- 运维学python之爬虫基础篇(三)urllib模块高级用法
- python 入门爬虫 -基础知识(数据怎么来的【二】)
- # Python 学习从入门到放弃(四)--类和模块的基础知识
- Python基础学习-爬虫入门知识
- python 入门爬虫 -基础知识(数据如何呈现【一】)
- python爬虫基础知识(一)--Urllib.request
- Python 爬虫基础 - Urllib 模块(1)
- python爬虫主要就是五个模块:爬虫启动入口模块,URL管理器存放已经爬虫的URL和待爬虫URL列表,html下载器,html解析器,html输出器 同时可以掌握到urllib2的使用、bs4(BeautifulSoup)页面解析器、re正则表达式、urlparse、python基础知识回顾(set集合操作)等相关内容。
- Python基础知识——爬虫入门
- 运维学python之爬虫基础篇(二)urllib模块使用
- 零基础入门学习Python(27):模块和包
- 第01阶段-基础入门-02-Python 爬虫基础-21节=====12.认识正则表达式
- python爬虫基础知识(二)--正则表达式
- Python爬虫之CSS基础知识
- python3 [入门基础实战] 爬虫入门之xpath的学习
- 基础入门_Python-模块和包.运维开发中inspect自省模块的最佳实践?
- Python 正则表达式 Re模块的一些简单入门知识