urlib库实际上不是很常用,因为其api调用复杂,已被requests模块取代。

1.request发送请求

from urllib import request
#默认指定的是get请求
#urlopen可以指定data,设置了这个值,那么将变成post请求
response=request.urlopen('http://www.baidu.com')
# print(response)
#返回值:返回值是一个http.client.HTTPResponse对象,有read,readline,readlines以及getcode等方法
# print(response.read())
#读取前10个字节
# print(response.read(10))
#readline读取一行
# print(response.readline())
#readlines(),读取整个文件所有行,保存在一个列表变量中,每行作为一个元素,但读取大文件比较占内存
print(response.readlines())
#获取响应的状态码
# print(response.getcode())

2.request进行下载

from urllib import request
#下载网页内容,第一个参数指定url,第二个参数指定要写入哪个文件的文件名
# request.urlretrieve('http://www.baidu.com','baidu.html')
request.urlretrieve('https://ss2.bdstatic.com/70cFvnSh_Q1YnxGkpoWK1HF6hhy/it/u=3478835771,1633744087&fm=26&gp=0.jpg','luban.jpg')

3.request的编码与解码

这个主要是针对url的

from urllib import parse
from urllib import request #urlencode函数的用法
# params={'name':'张三','age':18,'great':'hello world'}
#传一个字典
# result=parse.urlencode(params)
# print(result) # url='http://www.baidu.com/s'
# params={'wd':'蔡徐坤'}
# params=parse.urlencode(params)
# print(params)
# url=url+'?'+params
# response=request.urlopen(url)
# print(response.read()) #parse_qs函数的用法 解码
params={'name':'张三','age':18,'great':'hello world'}
qs=parse.urlencode(params)
print(qs)
result=parse.parse_qs(qs)
print(result)

4.将url进行分割的功能

from urllib import request
from urllib import parse url='http://www.baidu.com/s?wd=python&username=lqz#1'
# result=parse.urlparse(url)
# print(result)
#有时候拿到一个url,想要对这个url中的各个组成部分进行分割,那么这时候就可以使用urlparse或urlsplit来进行分割
# print('scheme:',result.scheme)
# print('netloc:',result.netloc)
# print('path:',result.path)
# print('params:',result.params)
# print('query:',result.query)
# print('fragment:',result.fragment) #fragment锚点
#urlsplit和urlparse的区别是urlsplit不会分割出params,以后使用的时候随便用哪个
#params用到的很少
#urlparse可以获取分号后的hello
url2='http://www.baidu.com/s;hello?wd=python&username=lqz#1'
print(parse.urlparse(url2)) result=parse.urlsplit(url)
print(result)
print(result.scheme)
print(result.netloc)

5.使用代理

from urllib import request

#7-ProxyHandler处理器
#通过ProxyHandler来设置使用代理服务器,防止同一ip访问网站次数过多被封禁
#常用的代理有:西刺,快代理,代理云
#httpbin.org专门测试http请求的,http://httpbin.org/ip 显示当前ip #没有使用代理的本机IP
url='http://httpbin.org/ip'
# resp=request.urlopen(url)
# print(resp.read()) #使用代理的
#1.使用ProxyHandler传入代理构建一个handler
#2.使用上面创建的handler构建一个opener
#3.使用opener去发送一个请求 #使用代理
#传入一个字典
handler=request.ProxyHandler({'http':'60.2.44.182:46534'})
opener=request.build_opener(handler)
resp=opener.open(url)
print(resp.read())

6.携带cookie登录

from urllib import request

#HTTP无状态协议,是指协议对于交互性场景没有记忆能力。
#参数含义
#NAME:cookie的名字
#VALUE:cookie的值
#Expires:cookie的过期时间
#Path:cookie作用的路径
#Domain:cookie作用的域名。设置的cookie默认只在主域名起作用,要设置子域名也起作用,要加这个。
#SECURE:是否只在https协议下起作用 #使用cookie模拟登陆
from urllib import request
#老师人人网账户
email='970138074@qq.com'
password='pythonspider' url='http://www.renren.com/880151247/profile'
#不使用cookie
# headers={
# 'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/72.0.3626.119 Safari/537.36',
#
# }
# req=request.Request(url=url,headers=headers)
# resp=request.urlopen(url)
# with open('renren.html','w',encoding='utf-8') as f:
# f.write(resp.read().decode('utf-8')) #使用cookie,这样做太麻烦了,还有其他办法
# headers={
# "User-Agent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/72.0.3626.119 Safari/537.36",
# "Cookie":"anonymid=ju1t9qsph90pys; depovince=GW; _r01_=1; JSESSIONID=abcXfLxdWqMHi6Pe3ALNw; ick_login=e10e1e18-39d2-4e5c-a8b8-b90e4675fe8d; t=0ee4fa42a5f337b7e6368ed4f71ab8189; societyguester=0ee4fa42a5f337b7e6368ed4f71ab8189; id=970296329; xnsid=1a888270; jebecookies=f850bf5b-ecb9-40f2-b99e-541671612347|||||; ver=7.0; loginfrom=null; jebe_key=d6dba89f-a272-4afe-9157-347b5d152e41%7C49aae11d2fe745dc68a15c417d170403%7C1554333011073%7C1%7C1554333010402; wp_fold=0"
# }
# req=request.Request(url=url,headers=headers)
# resp=request.urlopen(url)
# with open('renren.html','w',encoding='utf-8') as f:
# f.write(resp.read().decode('utf-8')) from http.cookiejar import CookieJar '''
CookieJar:管理HTTP cookie值,存储HTTP请求生成的cookie、向传出的HTTP请求添加cookie对象。
整个cookie都存储在内存中,对CookieJar实例进行垃圾回收后cookie也将丢失
''' headers = {
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/72.0.3626.119 Safari/537.36',
}
#模拟登陆
def get_opener():
#创建一个cookiejar对象
cookiejar=CookieJar()
#使用cookiejar创建一个HTTPCookieJar对象
handler=request.HTTPCookieProcessor(cookiejar)
#使用上一步创建的handler创建一个opener
opener=request.build_opener(handler)
#使用opener发送登陆的请求(人人网的邮箱和密码)
return opener def login_renren(opener): data={
'email':'970138074@qq.com',
'password':'pythonspider'
}
from urllib import parse
login_url='http://www.renren.com/ajaxLogin/login'
req=request.Request(login_url,data=parse.urlencode(data).encode('utf-8'),headers=headers)
opener.open(req) def visit_profile(opener):
#访问个人主页
dapeng_url='http://www.renren.com/880151247/profile' req=request.Request(dapeng_url,headers=headers)
resp=opener.open(req)
with open('renren.html','w',encoding='utf-8') as f:
f.write(resp.read().decode('utf-8')) if __name__ == '__main__':
opener=get_opener()
login_renren(opener)
visit_profile(opener)

7.cookie信息的加载与保存

from urllib import request

#保存cookie到本地
from http.cookiejar import MozillaCookieJar
#指定保存到哪个文件
cookiejar=MozillaCookieJar('cookie.txt')
handler=request.HTTPCookieProcessor(cookiejar)
opener=request.build_opener(handler)
# resp=opener.open('http://www.baidu.com') #前面已经传了文件名,现在save不用传文件名。前面如果没传,则save要传文件名。每次写都会重新覆盖文件
# cookiejar.save() #浏览器关闭,cookie过期的这种cookie是无法写入文件的。
resp=opener.open('http://httpbin.org/cookies/set?course=python')
# print(resp.read())
#ignore_discard即使cookie将被丢弃也保存,ignore_expires即使cookie将过期也进行保存
cookiejar.save(ignore_discard=True,ignore_expires=True) #load 重用cookie信息,从本地loadcookie信息。要指定文件名,前面创建cookiejar的时候指定了文件名,则不用传 for cookie in cookiejar:
print(cookie)

urlib库的使用的更多相关文章

  1. Python爬虫与数据分析之爬虫技能:urlib库、xpath选择器、正则表达式

    专栏目录: Python爬虫与数据分析之python教学视频.python源码分享,python Python爬虫与数据分析之基础教程:Python的语法.字典.元组.列表 Python爬虫与数据分析 ...

  2. 3.爬虫 urlib库讲解 总结

    urllib库的总结: 用ProcessOn(安利这个软件,够用了)根据前面的几节内容做了个思维导图. urllib库一共有四个模块: request:它是最基本的模块,可以用来模拟发送请求 erro ...

  3. 2.爬虫 urlib库讲解 异常处理、URL解析、分析Robots协议

    1.异常处理 URLError类来自urllib库的error模块,它继承自OSError类,是error异常模块的基类,由request模块产生的异常都可以通过这个类来处理. from urllib ...

  4. 1.爬虫 urlib库讲解 Handler高级用法

    在前面我们总结了urllib库的 urlopen()和Request()方法的使用,在这一小节我们要使用相关的Handler来实现代理.cookies等功能. 写在前面: urlopen()方法不支持 ...

  5. 0.爬虫 urlib库讲解 urlopen()与Request()

    # 注意一下 是import urllib.request 还是 form urllib import request 0. urlopen() 语法:urllib.request.urlopen(u ...

  6. urlib库

    urllib库是python中最基本的网络请求库,可以模拟浏览器的行为,向指定的服务器发送请求,并可以保存服务器返回的数据. urlopen() urllib.request模块提供了最基本的构造ht ...

  7. 基本urllib库

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

  8. requests库的基本使用

    1.发送get请求 import requests # response=requests.get('http://www.baidu.com') # 查看响应内容,返回的是已经解码的内容 # res ...

  9. Python爬虫与数据分析之模块:内置模块、开源模块、自定义模块

    专栏目录: Python爬虫与数据分析之python教学视频.python源码分享,python Python爬虫与数据分析之基础教程:Python的语法.字典.元组.列表 Python爬虫与数据分析 ...

随机推荐

  1. hasOne、hasMany、belongsTo

    这里将hasOne.hasMany.belongsTo进行一个详细举例说明. 首先,这3个的大致中文意思: hasOne:有一个,加上主谓语应该是 ,A 有一个 B hasMany:有很多,A 有很多 ...

  2. 在node中使用MongoDB

    1.下载安装包,进行安装: https://www.mongodb.com/download-center/community 参考网址:https://www.cnblogs.com/ymwange ...

  3. java----JDOM解析XML

    JDOM: 与DOM类似,基于树形结构 效率比DOM快 下载: http://www.jdom.org/dist/binary/jdom-2.0.6.zip 导包导java中的工程目录 jdom-2. ...

  4. 配置php5.6.4 + Apache2.4.10

    一.下载并安装apache 下载地址:www.apachelounge.com 解压后:执行以下命令: #httpd.exe –k install #httpd.exe -k start 在执行过程中 ...

  5. CentOS7部署Django,nginx,uwsgi,redis

    前期准备 把所有的软件都传到这个tools文件夹 cd - mkdir tools cd tools/ mkdir /application 安装nginx yum install pcre pcre ...

  6. IDEA安装ini4idea插件

    参见https://blog.csdn.net/lintianlin/article/details/80050309

  7. 动态sql与静态sql的区别

    首先,所谓SQL的动态和静态,是指SQL语句在何时被编译和执行,二者都是用在SQL嵌入式编程中的,这里所说的嵌入式是指将SQL语句嵌入在高级语言中,而不是针对于单片机的那种嵌入式编程. 静态SQL,在 ...

  8. base和this的用法

    [意义] this:指当前类,this调用当前类的属性,方法,包括构造函数的方法,继承本类的构造函数 base:指当前类的父类,可调用父类的非私有属性,方法,继承父类的构造函数括号里的参数 [用处] ...

  9. 《SpringMVC从入门到放肆》六、SpringMVC开发Controller的方法总结

    到目前为止我们已经大概学习了StringMVC的执行流程,以及详细的处理器映射器和处理器适配器的执行流程,并可以自己写一个配置方式开发的小Demo了.今天我们来总结一下实现一个Controller的几 ...

  10. PC_官网设计

    1. 头部 header 固定 的两种方式 固定定位 内容区 包裹,使用 overflow: hidden; 2. 动画第二次起效 缺少动画初始参数 3. 隐藏元素 display: none; vi ...