小言_互联网的博客

爬虫库Urllib

322人阅读  评论(0)

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
查看评论
* 以上用户言论只代表其个人观点,不代表本网站的观点或立场