1.urllib.parse.urlencode()方法:
一般HTTP请求提交数据,需要编码成 URL编码格式,然后做为url的一部分,或者作为参数传到Request对象中.
这时可以使用urllib.parse模块下的urlencode()函数,帮我们将key:value这样的键值对转换"key=value"这样的字符串,解码工作可以使用urllib.parse的unquote()函数。
例如获取百度美女贴吧的url
import urllib.parse
url = "http://tieba.baidu.com/f?"
key = urllib.parse.urlencode({"kw" : "美女"})
url = url + key
组合后的url示例:http://tieba.baidu.com/f?kw=%E7%BE%8E%E5%A5%B3
2.urllib.request()
快速爬取一个网页
import urllib.request
url = 'http://www.baidu.com/'
response = urllib.request.urlopen(url)
html = response.read()
with open('baidu/baidu.html','w') as f:
f.write(html.decode())
f.close()
3.urllib高级用法一,自定义opener
基本的urlopen()方法不支持代理、cookie等其他的HTTP/HTTPS高级功能
简单的自定义opener()
import urllib.request
url = 'http://www.baidu.com'
https_handler = urllib.request.HTTPHandler()
opener = urllib.request.build_opener(https_handler)
request = urllib.request.Request(url=url)
response = opener.open(request)
content = response.read().decode()
with open('baidu.html','w') as f:
f.write(content)
4.urllib高级用法二,设置代理
基本原理: 代理实际上指的就是代理服务器,英文叫作proxy server,它的功能是代理网络用户去取得网络信息。形象地说,它是网络信息的中转站。在我们正常请求一个网站时,其实是发送了请求给Web服务器,Web服务器把响应传回给我们。如果设置了代理服务器,实际上就是在本机和服务器之间搭建了一个桥,此时本机不是直接向Web服务器发起请求,而是向代理服务器发出请求,请求会发送给代理服务器,然后由代理服务器再发送给Web服务器,接着由代理服务器再把Web服务器返回的响应转发给本机。这样我们同样可以正常访问网页,但这个过程中Web服务器识别出的真实IP就不再是我们本机的IP了,就成功实现了IP伪装,这就是代理的基本原理
import urllib.request
import urllib.parse
西刺免费代理IP:http://www.xicidaili.com/
快代理免费代理:https://www.kuaidaili.com/free/inha/
proxy = {
'http':'61.176.223.7:58822',
'https':'180.121.135.91:3128'
}
url = 'http://www.baidu.com'
创建处理代理的handler
proxyhandler = urllib.request.ProxyHandler(
proxies=proxy
)
创建一个opener
opener = urllib.request.build_opener(proxyhandler)
构造一个请求
request = urllib.request.Request(url=url)
response = opener.open(request)
content = response.read().decode()
with open('daili.html','w') as f:
f.write(content)
网友评论