urllib

在Python2中,有urllib和urllib2两个库实现请求发送,在Python3中,统一为urllib,是Python内置的HTTP请求库

request:最基本的HTTP请求模块,可以模拟发送请求。

error:异常处理模块

parse:一个工具模块,提供了许多URL处理方法,拆分、解析、合并等

rebotparser:主要用来识别网站的robots.txt文件,判断哪些文件可以爬,哪些文件不可以爬

urlopen() :urlopen.request模块提供了最基本的构成HTTP请求的方法,可以模拟浏览器请求的发起过程

实例:

import urllib.request   #调用 urllib的request方法

response = urllib.request.urlopen(‘http://www.baidu.com’)    #请求百度网站

print(response.read().decode('utf-8'))              #输出网站内容,设置编码utf-8

print(response.status)         #网页响应状态码

print(response.getheaders())       #获取请求头信息

print(response.getheaders('Server'))     #获取响应头中的 Server值,获取服务器

参数:

data():data参数是可选的,如果添加该参数,需要使用bytes()方法将参数转化为字节流编码格式的内容,即betyes类型,如果传递了这个参数,请求方式不再是get,二是post

实例:

import urllib.parse

import urllib.request

data = bytes(urllib.parse.urllencode({'word':'hello'}),encoding='utf8')    #传递一个参数word,值是hello,转码成bytes类 型,该方法第一个参数是要str类型,用urllib.parse模块里的urlencode()方法转化为字符串

response = urllib.request.urlopen('http://httpbin.org/post',data=data)            #请求站点是httpbin.org,可以提供http测试,这个链接可以测试post请求,可以输出请求信息,包含我们传递的data参数

print('response.read()')             #传递的参数在form字段中说明模拟了表单提交方式,以post方式传输

timeout():timeout 参数用于设置超时时间,单位为秒,意思是如果请求超出了设置时间,还没有得到响应,就会抛出异常,如果不指定,就会使用全局默认时间,支持 HTTP  HTTPS FTP请求

实例:

import urllib.request

import socket

import urllib.error

try:

  response = urllib.request.urlopen('http://httpbin.org/get',timeout=1)     #请求httpbin.org测试链接,设置超时时间1秒,.

except urllib.error.URLError as e:        #捕获异常

  if isinstance(e.reason,socket.timeou)         #socket.timeout  判断异常是超市异常

    pritn(‘TIME OUT’)

Request:利用urllib.urlopen()方法可以完成简单的请求,但是不足以构建一个完整的请求,如果需要加headers等信息,就需要利用更强大request方法来构建

实例:

import urllib.request

request = urllib.urlopen('https://python.org')    

response = urllib.request.get(request)

print(response.read()).deaode('utf-8')

#可以发现,我们依然用urlopen()方法来发送请求,只不过这次该方法的参数不再试url,而是request类型的对象,通过构造这个数据结构,一方面可以将请求独立成一个对象,另一方面可以灵活的配置参数

网站身份验证:

实例:

form urllib.request import HTTPPasswordMgrWithDefaultRealm, HTTPBasicAuthHandler,build_opener

from urllib.error import URLError

username = 'username'

password = 'password'

url = 'http://localhost:5000'

p = HTTPPasswordMgrWithDefaultRealm()   #实例化HTTPBasicAuthHandler对象,其参数是HTTPPasswordMgrWithDefaultRealm对象

p.add_password(None,url,username,pasword)  #通过 add_password()添加进去用户名和密码,这样就建立了一个处理验证的handler

auth_handler =HTTPBasicAuthHandler(p)

opener = buid_oppener(auth_handler)        #利用handler使用build_opener()方法构建了一个Opener,这个Opener在发送请求时就相当于验证成功

try:

  result = opener.open(url)

  html = result.read().decode('utf-8')

  pritn(html)

except URLErrot as e:

  print(e.reason)

代理IP:

from urllib.error import URLError

from urllib,request import ProxyHandler,biuld_opener

porxy_handler = Proxyhandler({

  'http':'http://127.0.0.1:9743',

  'https':'https://127.0.0.1:9743'

})

opener = build_opener(proxy_handler)

try:

  response = eopner.open('https://www.baidu.com')

  print(response.read().decode('utf-8'))

except URLError as e:

  pritn(e.reason)

#在本地搭建一个代理,运行在9743端口,使用了Proxyhandler,参数是一个字典,健名是协议类型,值是代理链接,可以添加多个代理,然后使用handler以及build_opener()方法构造一个 opener,之后发送请求即可

urlparse():该方法可以实现入了的识别和分段

分析robots协议:

robots协议也叫爬虫协议,机器人协议,它的全貌叫忘了爬虫排除标准,用来告诉爬虫和搜索引擎哪些页面可以抓取,哪些不可以抓取,它通常是一个叫做robots.txt的文本文件,一般放在网站的根目录下

当搜索爬虫访问一个站点时,它首先检查这个站点根目录下是否存在robots.txt文件,如果存在,搜索爬虫会根据其中定义的爬取范围来爬取,如果没有找到这个文件,搜索爬虫会返耐高温所有可以直接访问的页面

robots.txt 样例:

User-agent:*

Disallow:/

Allow:/public/

这实现了对所有搜索爬虫只允许爬取public目录的功能,将上述内容保存成robots.txt文件,放在网站的根目录下,和网站的入口文件比如(index.pho  index.html  index.jsp等等)放在一起

上面的User-agent描述了搜索爬虫的名称,这里将其设置为*则代表该协议对任何爬取爬虫有效,比如,我们可以设置 :user-agent:baiduspider

这就代表我们设置的规则对百度爬虫是有效果,如果有多条user-agent的记录,则就会有多个爬虫会受到爬取限制,但是至少指定一条

disallow指定了不允许爬取的目录。比如上个例子设置为/,则代表不允许抓取所有页面

allow一般和disallow一起使用,一般不会单独使用,用来排除某些限制,限制我们设置为/public/,则表示所有页面不允许抓取,但是可以抓取public目录

下面再看几个例子:

user-agent:*

Disallow:/                #禁止所有爬虫访问任何目录

----------------------------------------------------------------

user-agent:*

Disallow:/  private/

Disallow:/tmp/           #允许所有爬虫访问网站某些目录

-------------------------------------------------------------------------

user-agent:WebCrawler

Disallow:/

user-agent:*

Disallow:/        #只允许一个爬虫访问

---------------------------

user-agent:*

Disallow:     #允许所有爬虫访问,robots.txt留空也可以

Python爬虫urllib库的使用的更多相关文章

  1. Python爬虫Urllib库的高级用法

    Python爬虫Urllib库的高级用法 设置Headers 有些网站不会同意程序直接用上面的方式进行访问,如果识别有问题,那么站点根本不会响应,所以为了完全模拟浏览器的工作,我们需要设置一些Head ...

  2. Python爬虫Urllib库的基本使用

    Python爬虫Urllib库的基本使用 深入理解urllib.urllib2及requests  请访问: http://www.mamicode.com/info-detail-1224080.h ...

  3. python爬虫 - Urllib库及cookie的使用

    http://blog.csdn.net/pipisorry/article/details/47905781 lz提示一点,python3中urllib包括了py2中的urllib+urllib2. ...

  4. 对于python爬虫urllib库的一些理解(抽空更新)

    urllib库是Python中一个最基本的网络请求库.可以模拟浏览器的行为,向指定的服务器发送一个请求,并可以保存服务器返回的数据. urlopen函数: 在Python3的urllib库中,所有和网 ...

  5. Python爬虫--Urllib库

    Urllib库 Urllib是python内置的HTTP请求库,包括以下模块:urllib.request (请求模块).urllib.error( 异常处理模块).urllib.parse (url ...

  6. python爬虫---urllib库的基本用法

    urllib是python自带的请求库,各种功能相比较之下也是比较完备的,urllib库包含了一下四个模块: urllib.request   请求模块 urllib.error   异常处理模块 u ...

  7. python爬虫 urllib库基本使用

    以下内容均为python3.6.*代码 学习爬虫,首先有学会使用urllib库,这个库可以方便的使我们解析网页的内容,本篇讲一下它的基本用法 解析网页 #导入urllib from urllib im ...

  8. Python爬虫 Urllib库的高级用法

    1.设置Headers 有些网站不会同意程序直接用上面的方式进行访问,如果识别有问题,那么站点根本不会响应,所以为了完全模拟浏览器的工作,我们需要设置一些Headers 的属性. 首先,打开我们的浏览 ...

  9. python爬虫urllib库使用

    urllib包括以下四个模块: 1.request:基本的HTTP请求模块,可以用来模拟发送请求.就像在浏览器里输入网址然后回车一样,只需要给库方法传入URL以及额外的参数,就可以模拟实现这个过程. ...

随机推荐

  1. 高效简单的.Net数据库“访问+操作”技术

    本文技术源自外企,并已在多个世界500强大型项目开发中运用. 本文适合有初步C#.Linq.Sql知识的同学阅读. 相关技术在IDataAccess接口中提供. IDataAccess所在的命名空间是 ...

  2. JavaScript基础回顾知识点记录3

    js 中 垃圾回收 //将不在使用的对象设置为null , js就会自动进行垃圾回收机制 var obj = {}; obj = null; js 中 数组基本介绍 数组也是一个对象 与普通对象功能类 ...

  3. P4767 [IOI2000]邮局 - 平行四边形不等式优化DP

    There is a straight highway with villages alongside the highway. The highway is represented as an in ...

  4. VM虚拟机安装

    VM虚拟机安装 1.安装vm虚拟机软件 1.1 双击打开虚拟机文件 1.2 根据向导安装 下一步 安装好了 不要着急点完成在 安装目录中有许可证. 1.3激活操作 2.虚拟机原理简介 3. 新建虚拟机 ...

  5. KingbaseES V8R6备份恢复案例之--删除test数据库后sys_backup.sh备份

    案例说明: KingbaseES V8R6通过sys_backup.sh执行物理备份,默认sys_backup.sh执行备份初始化时,需要连接test数据库进行身份的认证:在一些生产环境为了安全需求, ...

  6. Springboot pageHelper总结

    Springboot上使用pageHelper总结 1. 在pom.xml 中引入依赖 <!--pagehelper--> <dependency> <groupId&g ...

  7. 让Python更优雅更易读(第二集)

    友情链接 让Python更优雅更易读(第一集) 1.装饰器 1.1装饰器特别适合用来实现以下功能 运行时校验:在执行阶段进行特定校验,当校验通不过时终止执行. 适合原因:装饰器可以方便地在函数执行前介 ...

  8. 内存溢出(OOM)分析

    当JVM内存不足时,会抛出java.lang.OutOfMemoryError.   主要的OOM类型右: Java heap space:堆空间不足 GC overhead limit exceed ...

  9. 大根堆的pop&remove&initialize

    1. 定义 [max(min) tree] 一棵树, 其中每个节点的值都大于 (小于) 或等于其 children (如果有) 的值. [max(min) heap] max(min) tree + ...

  10. K8S概念理解

    Master 负责管理集群 负责协调集群中的所有活动,例如调度应用程序,维护应用程序的状态,扩展和更新应用程序. Worker节点是VM(虚拟机)或物理计算机,充当k8s集群中的工作计算机. 每个Wo ...