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. git使用的一些坑和新得(一)

    这是一个坑 你要知道作为一个新手对git的使用还处于摸索状态 今天就将这样的坑分享给大家 昨天,接到任务将代码发到远程仓库里.于是,我就天真的按步骤提交了! 然后就: To https: ! [rej ...

  2. 手把手教你分析MySQL查询性能瓶颈,包教包会

    当一条SQL执行较慢,需要分析性能瓶颈,到底慢在哪? 我们一般会使用Explain查看其执行计划,从执行计划中得知这条SQL有没有使用索引?使用了哪个索引? 但是执行计划显示内容不够详细,如果显示用到 ...

  3. CF1167F Scalar Queries (线段树/树状数组)

    题意 题解 对于[l,r]中的一个数,不论[l,r]有多大,只有比它小的数可以影响到它的排名,那么就可以把ai从小到大排序,一个一个加入线段树中,线段树中下表为 i 的是ai(原来的位置,不是排序后的 ...

  4. 使用puppeteer生成pdf与截图

    之前写过一篇 vue cli2 使用 wkhtmltopdf 踩坑指南,由于wkhtmltopdf对vue的支持并不友好,而且不支持css3,经过调研最终选择puppeteer,坑少,比较靠谱. 一. ...

  5. python进阶__struct数据处理详解

    一.此模块可以执行 Python 值和以 Python bytes 对象表示的 C 结构之间的转换 二.打包解包时,需要按照特定的方式来打包或者解包.该方式就是格式化字符串,它指定了数据类型,除此之外 ...

  6. 如何在 Windows 和 Linux 上确定系统使用的是 MBR 分区还是 GPT 分区详细步骤!!!

    在 Windows 上检查系统使用的是 MBR 分区还是 GPT 分区 点击放大镜搜索输入disk 点击打开 进入之后,右键点击你想要检查分区方案的磁盘,在右键菜单里选择属性! 在属性窗口,切换到卷, ...

  7. Springboot mybatis总结

    mybatis 总结 属性配置 1. mybatis.configuration.mapUnderscoreToCamelCase=true mapUnderscoreToCamelCase用于映射表 ...

  8. day05-线程的应用04

    7.线程的应用03 7.4坦克大战5.0版 增加功能: 我方坦克在发射的子弹消亡之后,才能发射新的子弹==>拓展:发射多颗子弹怎么办,控制一次最多只能发射5颗子弹 让敌人坦克发射的子弹消亡之后, ...

  9. 当 SQL DELETE 邂逅 Table aliases,会擦出怎样的火花

    开心一刻 晚上,女儿眼噙泪水躺在床上 女儿:你口口声声说爱我,说陪我,却天天想着骗我零花钱,你是我亲爹吗? 我:你想知道真相 女儿:想! 我:那你先给爸爸两百块钱! 环境准备 MySQL 不同版本 利 ...

  10. 《Markdown常用语法及快捷键》

    Markdown常用语法及快捷键       [```]+空格--代码格式 [---]+空格--水平分割线 [&emsp]+[;]--空格 [shift]+[tab]--清除当前行的格式