在Python 3中,urllib2被合并到了urllib中,叫做urllib.request 和 urllib.error 。
urllib整个模块分为urllib.request, urllib.parse, urllib.error。 HTTP 请求方法:
根据 HTTP 标准,HTTP 请求可以使用多种请求方法。
HTTP1.0 定义了三种请求方法: GET, POST 和 HEAD方法。
HTTP1.1 新增了六种请求方法:OPTIONS、PUT、PATCH、DELETE、TRACE 和 CONNECT 方法。 1 GET 请求指定的页面信息,并返回实体主体。(从服务器获取请求)
2 HEAD 类似于 GET 请求,只不过返回的响应中没有具体的内容,用于获取报头
3 POST 向指定资源提交数据进行处理请求(例如提交表单或者上传文件)。数据被包含在请求体中。POST请求可能会导致新的资源的建立和/或已有资源的修改。(向服务器发送数据)
4 PUT 从客户端向服务器传送的数据取代指定的文档的内容。
5 DELETE 请求服务器删除指定的页面。
6 CONNECT HTTP/1.1 协议中预留给能够将连接改为管道方式的代理服务器。
7 OPTIONS 允许客户端查看服务器的性能。
8 TRACE 回显服务器收到的请求,主要用于测试或诊断。
9 PATCH 是对 PUT 方法的补充,用来对已知资源进行局部更新 。 url详解:
URI:统一资源标识符(Uniform Resource Identifiers),用来传输数据和建立连接。
URL:统一资源定位符(Uniform Resource Locator).
URL的一般格式为(带方括号[]的为可选项):protocol :// hostname[:port] / path / [;parameters][?query]#fragment
1、scheme(协议):指定使用的传输协议, 最常用的是HTTP协议,它也是目前WWW中应用最广的协议。
file 资源是本地计算机上的文件。格式file://
ftp 通过 FTP访问资源。格式 FTP://
gopher 通过 Gopher 协议访问该资源。
http 通过 HTTP 访问该资源。 格式 HTTP://
https 通过安全的 HTTPS 访问该资源。 格式 target=_blank>HTTPS:// 2、host(主机名,域名):是指存放资源的服务器的域名系统 (DNS) 主机名或 IP 地址。
3、port(端口号):整数,可选,浏览器默认使用80端口
4、path(路径):由零或多个“/”符号隔开的字符串,一般用来表示主机上的一个目录或文件地址
5、parameters(参数):这是用于指定特殊参数的可选项。
6、query-string(查询字符串):可选,用于给动态网页(如使用CGI、ISAPI、PHP/JSP/ASP/ASP.NET等技术制作的网页)传递参数,可有多个参数,用“&”符号隔开,每个参数的名和值用“=”符号隔开。
7、anchor(锚点):后台一般不用管,前端用来做页面定位的 请求头常见参数: 在http协议中,向服务器发送一个请求,数据分为三部分,第一个是把数据放在url中,第二个是把数据放在body中(在post请求中),第三个教是把数据放在head中,这里介绍在网络爬虫中经常会用到的一些请求头梦数:
1. User-Agent:浏览器名称。
这个在网爬虫中经常会被使用到。请求一个网页的时候,服务器通过这个参数就可以知道这个请求是由哪种刘览器发送的。如果我们是通过是虫发送请求,那么我们的User-Agent就是pyton,这对于那些有反建虫机制的网站来说,可以轻易的产断你这个请求是爬虫。因此我们要经常设置这个值为一些浏览器的值,来伪装我们的爬虫。
2. Referer: 表明当前这个请求是从哪个url过来的。这个一般也可以用来做反爬虫技术。如果不是从指定页面过来的,那么就不做相关的响应。
3.Cookie: http协议是无状态的。 也就是同一个人发送了两次请求,服务器没有能力知道这两个请宋是否来自同个人。因此这时候款用cookie来做标识。一般如果想要做登录后才能访问的阿站,那么教需要发送cookie信息了。 HTTP状态码(HTTP Status Code)是用以表示网页服务器HTTP响应状态的3位数字代码。
它由 RFC 2616 规范定义的,并得到RFC 2518、RFC 2817、RFC 2295、RFC 2774、RFC 4918等规范扩展。
1xx 消息
2xx 成功
3xx 重定向
4xx 请求错误
5xx 6xx 服务器出错
(常见状态码:200,301,302,400,403,500)
1开头的http状态码
表示临时响应并需要请求者继续执行操作的状态代码。 100 (继续) 请求者应当继续提出请求。 服务器返回此代码表示已收到请求的第一部分,正在等待其余部分。
101 (切换协议) 请求者已要求服务器切换协议,服务器已确认并准备切换。 2开头的http状态码
表示请求成功 200 成功处理了请求,一般情况下都是返回此状态码;
201 请求成功并且服务器创建了新的资源。
202 接受请求但没创建资源;
203 返回另一资源的请求;
204 服务器成功处理了请求,但没有返回任何内容;
205 服务器成功处理了请求,但没有返回任何内容;
206 处理部分请求; 3xx (重定向)
重定向代码,也是常见的代码 300 (多种选择) 针对请求,服务器可执行多种操作。 服务器可根据请求者 (user agent) 选择一项操作,或提供操作列表供请求者选择。
301 (永久重定向) 请求的网页已永久移动到新位置。 服务器返回此响应(对 GET 或 HEAD 请求的响应)时,会自动将请求者转到新位置。
302 (临时移动) 服务器目前从不同位置的网页响应请求,但请求者应继续使用原有位置来进行以后的请求。
303 (查看其他位置) 请求者应当对不同的位置使用单独的 GET 请求来检索响应时,服务器返回此代码。
304 (未修改) 自从上次请求后,请求的网页未修改过。 服务器返回此响应时,不会返回网页内容。
305 (使用代理) 请求者只能使用代理访问请求的网页。 如果服务器返回此响应,还表示请求者应使用代理。
307 (临时重定向) 服务器目前从不同位置的网页响应请求,但请求者应继续使用原有位置来进行以后的请求。 4开头的http状态码表示请求出错 400 服务器不理解请求的语法。
401 请求要求身份验证。 对于需要登录的网页,服务器可能返回此响应。
403 服务器拒绝请求。
404 服务器找不到请求的网页。
405 禁用请求中指定的方法。
406 无法使用请求的内容特性响应请求的网页。
407 此状态代码与 401类似,但指定请求者应当授权使用代理。
408 服务器等候请求时发生超时。
409 服务器在完成请求时发生冲突。 服务器必须在响应中包含有关冲突的信息。
410 如果请求的资源已永久删除,服务器就会返回此响应。
411 服务器不接受不含有效内容长度标头字段的请求。
412 服务器未满足请求者在请求中设置的其中一个前提条件。
413 服务器无法处理请求,因为请求实体过大,超出服务器的处理能力。
414 请求的 URI(通常为网址)过长,服务器无法处理。
415 请求的格式不受请求页面的支持。
416 如果页面无法提供请求的范围,则服务器会返回此状态代码。
417 服务器未满足”期望”请求标头字段的要求。 5开头状态码并不常见,但是我们应该知道 500 (服务器内部错误) 服务器遇到错误,无法完成请求。
501 (尚未实施) 服务器不具备完成请求的功能。 例如,服务器无法识别请求方法时可能会返回此代码。
502 (错误网关) 服务器作为网关或代理,从上游服务器收到无效响应。
503 (服务不可用) 服务器目前无法使用(由于超载或停机维护)。 通常,这只是暂时状态。
504 (网关超时) 服务器作为网关或代理,但是没有及时从上游服务器收到请求。
505 (HTTP 版本不受支持) 服务器不支持请求中所用的 HTTP 协议版本。 抓包工具:
Elements: 当前网页有哪些源代码构成的
Console: JS代码输出端
Sources: 网页由那些文件组成的
Network: 查看网页发送的请求(查看请求是那种方式,请求内容) 请求库:
(进入到内置函数:Ctrl+B或者Ctrl+鼠标左键)
urllib库:(python3中集合到内置urllib。request模块内,导入库函数:from urllib import request)
urlopen函数:
urlopen(url, data=None, timeout=socket._GLOBAL_DEFAULT_TIMEOUT,*, cafile=None, capath=None, cadefault=False, context=None):
url:请求的网址
data:请求的data,如果设置了这个值那么支持post请求
timeout:延时
返回值:返回值是一个http.client.HTTPResponse 对象,这个对象是一个句柄对象。
read(size)未指定读取所有文件内容
readline:读取一行数据
readlines:读取多行数据
getcode:状态码
urlretrieve函数:
这个方法可以方便的将网页上的一个文件保存到本地,保存图片等
from urllib import request
request.urlretrieve('http://www.baidu.com','baidu.html')('url','保存文件名')
urlencode函数:
使用代码发送请求,如果url中包含非英文字母字符时需要进行编码,这时候使用urlencode实现,urlencode可以将字典数据转换为URL编码数据
例:from urllib import parse
data = {'name':'zhao','ming':'xiujie','age':'24'}
qs = parse.urlencode(data)
print(qs)
parse_qs函数:解码还原
from urllib import parse
data = {'name':'赵','ming':'秀杰','age':24}
qs = parse.urlencode(data)
result = parse.parse_qs(qs)
print(result) urlparse 和 urlsplit,基本一样,urlparse多了一个params。
from urllib import parse
url = 'http://www.imailtone.com/WebApplication1/WebForm1.aspx;hello?name=tom&;age=20#resume'
resault = parse.urlparse(url)
print('scheme:',resault.scheme)
print('netloc:',resault.netloc)
print('path:',resault.path)
print('params:',resault.params)
print('query:',resault.query)
print('fragment:',resault.fragment) request.Request类:
如果想要在请求时增加请求头,就需要使用request.Request类来实现,比如增加一个User-Agent,
from urllib import request,parse
url = 'https://www.lagou.com/jobs/list_python/p-city_0?&cl=false&fromSearch=true&labelWords=&suginput='
# resp = request.urlopen(url)
# print(resp.read())
headers = {
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/73.0.3683.86 Safari/537.36',
'Referer':'https://www.lagou.com/jobs/list_python/p-city_0?&cl=false&fromSearch=true&labelWords=&suginput=',}
data = {
'first':'true',
'pn':'1',
'kd':'python'}
req = request.Request(url,headers=headers,data=parse.urlencode(data).encode('utf-8'),method='POST')#添加User-Agent,Referer,data参数并对data进行编码
resp = request.urlopen(req)
print(resp.read().decode('utf-8'))#解码 ProxyHandler处理器(IP代理设置)
使用‘http://www.httpbin.org/’这个网站查看Http请求的一些参数
在代码中是用代理,‘urllib.request.Proxyhandeler’,这一代理,这一代理是字典,,字典的key是代理服务器能够接受的类型,一般是http/https,值是'ip:port'
'''
from urllib import request
url = 'http://www.httpbin.org/ip'#url
handler = request.ProxyHandler({'http':'118.113.246.127:9999'})#使用request.ProxyHandler构建一个handler
opener = request.build_opener(handler)使用上面的handler构建一个opener()
resp = opener.open(url) #使用构建的opener发送一个url请求,
print(resp.read())
'''
什么是cookie:
Cookie,有时也用其复数形式Cookies,指某些网站为了辨别用户身份、进行session跟踪而储存在用户本地终端上的数据(通常经过加密)。定义于RFC2109和2965都已废弃,最新取代的规范是RFC6265。
Name:该Cookie的名称。
Value:该Cookie的值。
Domain:可以访问该Cookie的域名。
Expires:该Cookie失效的时间,单位为秒,
Path:该Cookie的使用路径。
Secure:该Cookie是否仅被使用安全协议传输。安全协议有HTTPS和SSL等,在网络上传输数据之前先将数据加密。默认为false。 例1:
from urllib import request
url = 'http://www.renren.com/880151247/profile'
headers = {
'User-agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:73.0) Gecko/20100101 Firefox/73.0',
'Cookie':'wp_fold=0; _r01_=1; anonymid=k6q3nelcabojoo; depovince=LN; taihe_bi_sdk_uid=09ecf7537e2a34b628e281831b84b42d; jebe_key=2c043046-81f7-4d1f-967b-311f5ced93f4%7Cd39a42f8e30da355ea6608fb51f73574%7C1581922246738%7C1%7C1581922246672; jebe_key=2c043046-81f7-4d1f-967b-311f5ced93f4%7Cd39a42f8e30da355ea6608fb51f73574%7C1581922246738%7C1%7C1581922246674; jebecookies=c773ae43-1e0b-49e7-968f-09395211d019|||||; JSESSIONID=abcfYtpckGeCT5Oaw-rbx; taihe_bi_sdk_session=a92b80af092a72dea469264ef24c32a1; ick_login=42131da7-55ae-47c7-a142-740f0df95f89; t=abc15a448e816609aad40fdb911941d27; societyguester=abc15a448e816609aad40fdb911941d27; id=973744147; xnsid=adfefda2; ver=7.0; loginfrom=null',
}
req = request.Request(url,headers=headers)
resp = request.urlopen(req)
# print(resp.read().decode('utf-8'))
with open('dapeng.html','w',encoding='utf-8') as fp:
#write写入的必须为str类型数据
#resp.read()读取出来的是一个bytes数据类型
#str -> encode -> bytes
#bytws -> decode -> str
fp.write(resp.read().decode('utf-8'))
例2:使用账号密码登录 http.cookjar 模块:
CookieJar(存储在内存中)、FileCookieJar,MozillaCookieJar,LWPCookieJar(存储在文件中)。
CookieJar:管理HTTP cookie值、存储HTTP请求生成的cookie、向传出的HTTP请求添加cookie的对象。整个cookie都存储在内存中,对CookieJar实例进行垃圾回收后cookie也将丢失。
FileCookieJar (filename,delayload=None,policy=None):从CookieJar派生而来,用来创建FileCookieJar实例,检索cookie信息并将cookie存储到文件中。filename是存储cookie的文件名。delayload为True时支持延迟访问访问文件,即只有在需要时才读取文件或在文件中存储数据。
MozillaCookieJar (filename,delayload=None,policy=None):从FileCookieJar派生而来,创建与Mozilla浏览器 cookies.txt兼容的FileCookieJar实例。
LWPCookieJar (filename,delayload=None,policy=None):从FileCookieJar派生而来,创建与libwww-perl标准的 Set-Cookie3 文件格式兼容的FileCookieJar实例。
其实大多数情况下,我们只用CookieJar(),如果需要和本地文件交互,就用 MozillaCookjar() 或 LWPCookieJar()。当然,如果我们对cookie有定制的需要,那么我们也要借助HTTPCookieProcess处理器来处理。具体看下面代码。 将cookie保存到本地:
from urllib import request
from http.cookiejar import MozillaCookieJar cookiejar = MozillaCookieJar('cookie1.txt')
cookiejar.load(ignore_discard=True)#将cookie信息加载调用
handler = request.HTTPCookieProcessor(cookiejar)
opener = request.build_opener(handler)
# resp = opener.open("http://www.baidu.com")
resp = opener.open("http://www.httpbin.org/cookies/set?count=spider")
# cookiejar.save()#如果cookijar未设置名称需要再次填写文件保存名
# cookiejar.save(ignore_discard=True)#保存即将过期的cookie信息
for cookie in cookiejar:
print(cookie)

urllib笔记的更多相关文章

  1. python2 urllib 笔记

    python2 urllib 笔记 import urllib base='http://httpbin.org/' ip=base+'ip' r=urllib.urlopen(ip) print r ...

  2. Python3学习笔记(urllib模块的使用)转http://www.cnblogs.com/Lands-ljk/p/5447127.html

    Python3学习笔记(urllib模块的使用)   1.基本方法 urllib.request.urlopen(url, data=None, [timeout, ]*, cafile=None,  ...

  3. Python3学习笔记(urllib模块的使用)

    转载地址:https://www.cnblogs.com/Lands-ljk/p/5447127.html 1.基本方法 urllib.request.urlopen(url, data=None,  ...

  4. 学习笔记 urllib

    第一步: get # -*- coding:utf-8 -*- # 日期:2018/5/15 19:39 # Author:小鼠标 from urllib import request url = ' ...

  5. 爬虫学习笔记-urllib库

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

  6. 潭州课堂25班:Ph201805201 爬虫基础 第三课 urllib (课堂笔记)

    Python网络请求urllib和urllib3详解   urllib是Python中请求url连接的官方标准库,在Python2中主要为urllib和urllib2,在Python3中整合成了url ...

  7. Python笔记(十三):urllib模块

    (一)      URL地址 URL地址组件 URL组件 说明 scheme 网络协议或下载方案 net_loc 服务器所在地(也许含有用户信息) path 使用(/)分割的文件或CGI应用的路径 p ...

  8. python学习笔记——urllib库中的parse

    1 urllib.parse urllib 库中包含有如下内容 Package contents error parse request response robotparser 其中urllib.p ...

  9. python学习笔记——爬虫学习中的重要库urllib

    1 urllib概述 1.1 urllib库中的模块类型 urllib是python内置的http请求库 其提供了如下功能: (1)error 异常处理模块 (2)parse url解析模块 (3)r ...

随机推荐

  1. h5 移动端适配方案思考

    基础概念 CSS像素(CSS pixels) 这个是浏览器使用的抽象单位,用来精确度量网页上的内容.平时经常写的width:100px;height:100px;都是与设备无关的. 设备独立像素(de ...

  2. R自带数据集

    向量 euro    #欧元汇率,长度为11,每个元素都有命名landmasses    #48个陆地的面积,每个都有命名precip   #长度为70的命名向量rivers   #北美141条河流长 ...

  3. AndroidStudio提高编译速度的几种方法

    第一种: 减少依赖库的使用,让代码更加精简.对于一些必须依赖的库要尽量使用jar包或者依赖库,这样他每次就会在本地直接加载,而不是每次翻墙检查更新 第二种: 打开Android Studio,选择菜单 ...

  4. ant-design-pro 如何打包成 本地html,双击即可查看

    由于 ant-design-pro 的 mock 是一个单独的服务,所以没有办法整合到一起打包.暂时我是没有找到. 所以解决方案就是不用 mock . 由于 系统有异步调取,所以一旦有异步调取就会失败 ...

  5. 通过xshell远程部署

    Xshell 和 Xftp5 操作linux系统的机器 ------------------------------------------------------------------------ ...

  6. 多线程的CAS

    CAS Compare And Swap (Compare And Exchange) / 自旋 / 自旋锁 / 无锁 独占锁:独占锁是一种悲观锁,synchronized就是一种独占锁,会导致其它所 ...

  7. ChaosTool,iOS添加垃圾代码工具,代码混淆工具,代码生成器,史上最好用的垃圾代码添加工具,自己开发的小工具

    最近在H5游戏项目中需要添加垃圾代码作混淆,提高过审机率.手动添加太费时费力,在网上并没有找到合适的比较好的工具,就自己动手写了一个垃圾代码添加工具,命名为ChaosTool. 扣扣交流群:81171 ...

  8. 理解Golang组件protobuf

    什么是protobuf protocol buffers 是一种语言无关.平台无关.可扩展的序列化结构数据的方法,它可用于(数据)通信协议.数据存储等.是一种灵活,高效,自动化机制的结构数据序列化方法 ...

  9. shodan常用语法

    shodan常用命令: asn         区域自治编号 port        端口 org         ip所属组织机构 os          操作系统类型 http.html   网页 ...

  10. 2020kali浏览器汉化等配置

    0.修改搜索引擎 1. 2. 3.点击左侧搜索,输入language因为我已经修改为中文所以没有查询到结果 4点击搜索更多语言(未汉化未英文)找到chinese后添加 5.要将chinese上移到第一 ...