首页 / 爬虫 / Python爬虫入门之 urllib库
Python爬虫入门之 urllib库
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了Python爬虫入门之 urllib库,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含5056字,纯文字阅读大概需要8分钟。
内容图文
![Python爬虫入门之 urllib库](/upload/InfoBanner/zyjiaocheng/654/e6f899fba7db4ac48ec09fabf7c465af.jpg)
一、urllib库:模拟浏览器发送请求的库,python自带,无需安装;
二、Python2和Python3的urllib库的区别:
1. urllib是python提供的一个用于操作url的模块。
2. 在python2中,有urllib库和urllib2库,在python3中,urllib2合并到urllib库中,我们爬取网页的时候,经常用到这个库,升级合并后,模块中包的位置变化的地方较多。
3. 区别:
在python2中使用import urllib2————对应的,在python3中会使用import urllib.request,urllib.error;
在python2中使用import urllib————对应的,在python3中会使用import urllib.request,urllib.error,urllib.parse;
在python2中使用import urlparse————对应的,在python3中会使用import urllib.parse;
在python2中使用urllib2.urlopen————对应的,在python3中会使用urllib.request.urlopen;
在python2中使用urllib.urlencode————对应的,在python3中会使用urllib.parse.urlencode;
在python2中使用urllib.quote————对应的,在python3中会使用urllib.request.quote;
在python2中使用cookielib.CookieJar————对应的,在python3中会使用http.CookieJar;
在python2中使用urllib2.Request————对应的,在python3中会使用urllib.request.Request
以上就是urllib相关模块从python2到python3的常见一些变化
三、urllib两个常用模块:urllib.request,urllib.parse
1. urllib.request.urlopen(url, data=None, proxies=None):它可以创建一个表示远程url的类文件对象,然后我们可以像对本地文件一样,用同样的方法去操作这个类文件对象以此获取远程数据。
import urllib.request
url = "https://www.baidu.com/"
# response:是一个文件
response = urllib.request.urlopen(url=url)
print(response.read().decode())
返回结果===》
url:远程数据的路径,一般是网址;
data:以post方式提交到url的数据,如果要传必须传 bytes(字节流)类型的,如果是一个字典,可以先用 urllib.parse 模块里的 urlencode() 编码;
proxies用于设置代理;
1. urlopen返回 一个类文件对象(fd),它提供了如下方法:
(I)read():读取相应内容,内容是字节类型;
(II)geturl():获取请求的url
示例:
print(response.geturl())
结果:
https://www.baidu.com/
(III)getheaders():获取头部信息,列表里面有元组
示例:
print(response.getheaders())
结果:
[('Accept-Ranges', 'bytes'), ('Cache-Control', 'no-cache'), ('Content-Length', '227'), ('Content-Type', 'text/html'), ('Date', 'Sat, 30 Nov 2019 15:32:47 GMT'), ('P3p', 'CP=" OTI DSP COR IVA OUR IND COM "'), ('P3p', 'CP=" OTI DSP COR IVA OUR IND COM "'), ('Pragma', 'no-cache'), ('Server', 'BWS/1.1'), ('Set-Cookie', 'BD_NOT_HTTPS=1; path=/; Max-Age=300'), ('Set-Cookie', 'BIDUPSID=52DFB72BEBE10DAD15531561E0516914; expires=Thu, 31-Dec-37 23:55:55 GMT; max-age=2147483647; path=/; domain=.baidu.com'), ('Set-Cookie', 'PSTM=1575127967; expires=Thu, 31-Dec-37 23:55:55 GMT; max-age=2147483647; path=/; domain=.baidu.com'), ('Set-Cookie', 'BAIDUID=52DFB72BEBE10DADB9398376B7470E3A:FG=1; max-age=31536000; expires=Sun, 29-Nov-20 15:32:47 GMT; domain=.baidu.com; path=/; version=1; comment=bd'), ('Strict-Transport-Security', 'max-age=0'), ('Traceid', '1575127967028891188210707054848444292954'), ('X-Ua-Compatible', 'IE=Edge,chrome=1'), ('Connection', 'close')]
(IV)getcode():获取状态码
示例:
print(response.getcode())
结果:
200
(V)readlines():按行读取,返回列表,都是字节类型
示例:
print(response.readlines())
结果:
[b'\r\n', b'\r\n', b'\t\r\n', b'\r\n', b'\r\n', b'\t\r\n', b'\r\n', b'']
注释:“\b”在Python中表示二进制
【注意】像1和5这种返回是“字节类型(二进制)”都要进行解码才能显示出来
2. urllib.request.Request(url, headers, data):参数和urllib.request.urlopen()函数一样,一个请求不仅仅只有url,还要有Headers等信息,这时我们把Request()用于包装请求头,返回一个请求头,可以作为urllib.request.urlopen()的参数。
示例:郑州人流医院 http://mobile.zzzzyy120.com/
import urllib.request
headers = {
'User-Agent': 'Mozilla/5.0 (X11; Linux x86_64) '
'AppleWebKit/537.36 (KHTML, like Ge'
'cko) Chrome/71.0.3578.98 Safari/537.36'
}
url = "https://www.baidu.com/"
request = urllib.request.Request(url=url, headers=headers)
response = urllib.request.urlopen(request)
print(response.getcode())
结果:
200
3. urllib.parse.quote():url编码函数,将中文进行转化为%xxx
示例:
import urllib.parse
url = "小编是大帅哥!"
result = urllib.parse.quote(url)
print(result)
结果:
%E5%B0%8F%E7%BC%96%E6%98%AF%E5%A4%A7%E5%B8%85%E5%93%A5%EF%BC%81
4. urllib.parse.unquote():url解码函数,将%xxx进行转化为中文
示例:
import urllib.parse
string = "%E5%B0%8F%E7%BC%96%E6%98%AF%E5%A4%A7%E5%B8%85%E5%93%A5%EF%BC%81"
result = urllib.parse.unquote(string)
print(result)
结果:
小编是大帅哥!
5. urllib.parse.urlencode():给一个字典,将字典拼接为query_string,并且实现了编码的功能
示例:
import urllib.parse
data = {
'name': 'Alien',
'age': '20',
'address': 'Chinese'
}
result = urllib.parse.urlencode(data)
print(result)
结果:
name=Alien&age=20&address=Chinese
四、字符串与二进制之间的转换:
encode(encoding=None):字符串 ===》二进制,参数encoding默认是“utf-8”;
decode(encoding=Node):二进制 ===》字符串,参数encoding默认是“utf-8”;
要是传encoding的值大多数也是“gbk”
Python打开文件时也有编码设置
open("文件名", "w", encoding='utf8')
内容总结
以上是互联网集市为您收集整理的Python爬虫入门之 urllib库全部内容,希望文章能够帮你解决Python爬虫入门之 urllib库所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。