Python爬虫urllib库的使用

urllibhtml

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

request:最基本的HTTP请求模块,能够模拟发送请求。浏览器

error:异常处理模块服务器

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

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

 

 

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

实例:ide

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

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

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留空也能够

 

原文出处:https://www.cnblogs.com/qi_1998/p/10289510.html

相关文章
相关标签/搜索