1. urllib.request.urlopen
response = urllib.request.urlopen("https://movie.douban.com/",None,2)
html = response.read().decode("utf-8") # decode:从byte到str。 encode:从str到byte
# print(html)
with open("html.txt","w",encoding="utf-8") as file:
file.write(html)
urllib.request.urlopen(url, data=None, [timeout, ]*, cafile=None, capath=None, cadefault=False, context=None)
当传递参数时,使用data构造字典,此参数必须是dict形式,并将参数data由字典类型转换成字节类型,此时用到urllib.parse。
https://www.jianshu.com/p/4c3e228940c8
这个文章讲的很好,大家可以查阅。
2. urllib.request.Request
url ="https://movie.douban.com/"
hearders = {"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64)"
" AppleWebKit/537.36 (KHTML, like Gecko) "
"Chrome/75.0.3770.90 "
"Safari/537.36",
"Referer": "https://movie.douban.com/",
"Connection": "keep-alive"}
req = urllib.request.Request(url,headers=hearders)
print(req)
html = urllib.request.urlopen(req).read().decode("utf-8")
with open("htmlhtml.txt","w",encoding="utf-8") as file:
file.write(html)
如果我们在获取请求对象时,不需要过多的参数传递,我么可以直接选择urllib.request.urlopen();如果需要进一步的包装请求,则需要用urllib.request里。
3. 使用Cookies
Cookies主要用于获取用户登录信息,比如,通过提交数据实现用户登录之后,会生成带有登录状态的Cookies,这时可以将Cookies保存在本地文件中,下次程序运行的时候,可以直接读取Cookies文件来实现用户登录。特别对于一些复杂的登录,如 验 证 码 、手 机 短信验证登录这类网站,使用Cookies能简单解决重复登录的问题。
Urllib提供HTTPCookieProcessor()对Cookies操作,但Cookies的读写是由MozillaCookieJar()完成的。下面的例子实现Cookies写入文件,代码如下:
import urllib.request
from http import cookiejar
filename = 'cookie.txt'
# MozillaCookieJar保存cookie
cookie = cookiejar.MozillaCookieJar(filename)
# HTTPCookieProcessor创建cookie处理器
handler = urllib.request.HTTPCookieProcessor(cookie) # 创建自定义opener
opener = urllib.request.build_opener(handler) # open方法打开网页
response = opener.open('https://movie.douban.com/') # 保存cookie文件
cookie.save()
代码中的cookiejar是自动处理HTTP Cookie的类,MozillaCookieJar()用于将Cookies内容写入文件。程序运行时先创建MozillaCookieJar()对象,然后将对象直接传入函数HTTPCookieProcessor(),生成opener对象;最后使用opener对象访问URL,访问过程所生成的Cookies就直接写入已创建的文本文档中。
读取cookies
import urllib.request
from http import cookiejar
filename = 'cookie.txt'
# MozillaCookieJar保存cookie
cookie = cookiejar.MozillaCookieJar(filename)
# 读取cookie内容到变量
cookie.load(filename)
# HTTPCookieProcessor创建cookie处理器
handler = urllib.request.HTTPCookieProcessor(cookie)
opener = urllib.request.build_opener(handler)
# open方法打开网页
response = opener.open('https://movie.douban.com/')
# 保存cookie文件
print(cookie)
4. urllib.parse
Urllib在请求访问服务器的时候,如果发生数据传递,就需要对内容进行编码处理,将包含str或bytes对象的两个元素元组序列转换为百分比编码的ASCII文本字符串。如果字符串要用作POST,那么它应该被编码为字节,否则会导致TypeError错误。Urllib发送POST请求的方法如下:
import urllib.request
import urllib.parse
url = 'https://movie.douban.com/'
data = { 'value': 'true', }
#数据处理
data = urllib.parse.urlencode(data).encode('utf-8')
req = urllib.request.urlopen(url, data=data)
代码中urllib.parse.urlencode(data)将数据转换成字节的数据类型,而encode(‘utf-8’)设置字节的编码格式。这里需要注意的是,编码格式主要根据网站的编码格式来决定。urlencode()的作用只是对请求参数做数据格式转换处理。
转载:https://blog.csdn.net/weixin_42233120/article/details/101376389