如何利用urllib实现Python爬虫的基础操作?

2026-04-20 07:054阅读0评论SEO基础
  • 内容介绍
  • 文章标签
  • 相关推荐

本文共计1622个文字,预计阅读时间需要7分钟。

如何利用urllib实现Python爬虫的基础操作?

Python 2 中,`urllib` 和 `urllib2` 是两个常用的库,用于处理网络请求。在 Python 2 中,主要使用这两个库。而 Python 3 对这些库进行了重构,将它们成了多个子模块,如 `urllib.request`, `urllib.parse`, `urllib.error` 和 `urllib.robotparser` 等。

如何利用urllib实现Python爬虫的基础操作?

一、urllib 和 urllib2的关系

在python2中,主要使用urllib和urllib2,而python3对urllib和urllib2进行了重构,拆分成了urllib.request, urllib.parse, urllib.error,urllib.robotparser等几个子模块,这样的架构从逻辑和结构上说更加合理。urllib库无需安装,python3自带。python 3.x中将urllib库和urilib2库合并成了urllib库。

urllib2.urlopen() 变成了 urllib.request.urlopen()
urllib2.Request() 变成了 urllib.request.Request()
python2中的 cookielib 改为 www.baidu.com/)

post方法请求,需要添加data参数(字典格式),它要是字节流编码格式的内容,即 bytes 类型,通过 bytes() 方法可以进行转化,另外如果传递了这个 data 参数,不添加data参数就默认为 GET 方式请求。

from urllib import request,parse url = "www.baidu.com/" wd = {'wd':'哇哈哈哈'} data = bytes(parse.urlencode(wd),'utf-8') respones = request.urlopen(url,data=data)

(二)request.Request

由于单独使用urlopen() 方法的不能添加User-Agent、Cookie等headers信息,需要构建一个 Request 类型的对象,通过构造这个这个数据结构,一方面我们可以将请求独立成一个对象,另一方面可配置参数更加丰富和灵活。主要参数有:

  • url 参数是请求 URL,这个是必传参数,其他的都是可选参数。
  • data 参数如果要传必须传 bytes(字节流)类型的,如果是一个字典,可以先用 urllib.parse 模块里的 urlencode() 编码。
  • headers 参数是一个字典,这个就是 Request Headers 了,你可以在构造 Request 时通过 headers 参数直接构造,也可以通过调用 Request 实例的 add_header() 方法来添加, Request Headers 最常用的用法就是通过修改 User-Agent 来伪装浏览器,默认的 User-Agent 是 Python-urllib,我们可以通过修改它来伪装浏览器。
  • origin_req_host 参数指的是请求方的 host 名称或者 IP 地址。
  • unverifiable 参数指的是这个请求是否是无法验证的,默认是False。意思就是说用户没有足够权限来选择接收这个请求的结果。例如我们请求一个 HTML 文档中的图片,但是我们没有自动抓取图像的权限,这时 unverifiable 的值就是 True。
  • method 参数是一个字符串,它用来指示请求使用的方法,比如GET,POST,PUT等等。

通过随机的方法,选择user-agent:

import randomUA_LIST = [ 'Mozilla/5.0 (compatible; U; ABrowse 0.6; Syllable) AppleWebKit/420+ (KHTML, like Gecko)', 'Mozilla/5.0 (compatible; MSIE 8.0; Windows NT 6.0; Trident/4.0; Acoo Browser 1.98.744; .NET CLR 3.5.30729)', 'Mozilla/5.0 (compatible; MSIE 8.0; Windows NT 6.0; Trident/4.0; Acoo Browser 1.98.744; .NET CLR 3.5.30729)', 'Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.0; Trident/4.0; Acoo Browser; GTB5; Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1) ; InfoPath.1; .NET CLR 3.5.30729; .NET CLR 3.0.30618)', 'Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 5.1; Trident/4.0; SV1; Acoo Browser; .NET CLR 2.0.50727; .NET CLR 3.0.4506.2152; .NET CLR 3.5.30729; Avant Browser)', 'Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.0; Acoo Browser; SLCC1; .NET CLR 2.0.50727; Media Center PC 5.0; .NET CLR 3.0.04506)', 'Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.0; Acoo Browser; GTB5; Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1) ; Maxthon; InfoPath.1; .NET CLR 3.5.30729; .NET CLR 3.0.30618)', 'Mozilla/4.0 (compatible; Mozilla/5.0 (compatible; MSIE 8.0; Windows NT 6.0; Trident/4.0; Acoo Browser 1.98.744; .NET CLR 3.5.30729); Windows NT 5.1; Trident/4.0)', 'Mozilla/4.0 (compatible; Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 5.1; Trident/4.0; GTB6; Acoo Browser; .NET CLR 1.1.4322; .NET CLR 2.0.50727); Windows NT 5.1; Trident/4.0; Maxthon; .NET CLR 2.0.50727; .NET CLR 1.1.4322; InfoPath.2)', 'Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.0; Trident/4.0; Acoo Browser; GTB6; Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1) ; InfoPath.1; .NET CLR 3.5.30729; .NET CLR 3.0.30618)' ] #随机获取一个user-agent user_agent = random.choice(UA_LIST)

添加headers头部信息的方法1:

url='www.baidu.com/'user_agent = random.choice(UA_LIST) headers = { 'User-Agent': user_agent } req = request.Request(url=url,headers=headers) respones = request.urlopen(req)

添加headers头部信息的方法2:

url='www.baidu.com' headers = { 'User-Agent': user_agent } #添加user-agent的方法2 req = request.Request(url) #请求添加user-agent req.add_header("User-Agent",user_agent) #获取请求的user-agent agent的a要小写 print(req.get_header("User-agent")) response = request.urlopen(req)print(respones.read().decode('utf-8'))

三、request的高级类

在urllib.request模块里的BaseHandler类,他是所有其他Handler的父类,他是一个处理器,比如用它来处理登录验证,处理cookies,代理设置,重定向等。它提供了直接使用和派生类使用的方法:

  • add_parent(director):添加director作为父类
  • close():关闭它的父类
  • parent():打开使用不同的协议或处理错误
  • defautl_open(req):捕获所有的URL及子类,在协议打开之前调用

Handler的子类包括:

HTTPDefaultErrorHandler:用来处理www.baidu.com/") response = opener.open(req) print(response.read().decode("utf-8"))

(二)ProxyBasicAuthHandler

通过密码管理器的方法实现代理服务器功能

from urllib import request #代理密码管理,也可以管理服务器账户密码 #账户密码 user = "username" passwd = "passwd" #代理服务器 proxyserver = "1.1.1.1:9999" #构建密码管理对象,保存需要处理的用户名和密码 passmgr = request.HTTPPasswordMgrWithDefaultRealm() #添加账户信息,第一个参数realm是与远程服务器相关的域信息 passmgr.add_password(None,proxyserver,user,passwd) #构建基础ProxyBasicAuthHandler处理器对象 proxyauth_handler = request.ProxyBasicAuthHandler(passmgr) opener = request.build_opener(proxyauth_handler) req = request.Request("www.baidu.com/") response = opener.open(req)

(三)ProxyBasicAuthHandler

通过密码管理器的方法实现web认证登陆功能

#web验证 from urllib import request test = "test" passwd = "123456" webserver = "1.1.1.1" #构建密码管理器handler passwdmgr = request.HTTPPasswordMgrWithDefaultRealm() #添加密码信息 passwdmgr.add_password(None,webserver,test,passwd) #HTTP基础验证处理器类 "+webserver) response = opener.open(req)

四、Cookie处理

通过www.renren.com/PLogin.do' #需要登陆的账户密码 data = { "email":"renren账号", "password":"密码" } #数据处理 data = bytes(parse.urlencode(data),'utf-8') #第一次是POST请求,通过登陆账户密码,得到cookie req = request.Request(url,data=data) #发送第一次POST请求,生成登陆后的cookie response = opener.open(req) print(response.read().decode("utf-8")) #此时的opener已经包含了该链接下的cookie,此时使用该opener就可以直接访问该站点下其他的网页而不需要再登陆了 opener.open(www.renren.com/PLogin.doxxxxxxxxxxxxx)

以上就是python爬虫基础之urllib的使用的详细内容,更多关于python 爬虫urllib的资料请关注易盾网络其它相关文章!

标签:使用

本文共计1622个文字,预计阅读时间需要7分钟。

如何利用urllib实现Python爬虫的基础操作?

Python 2 中,`urllib` 和 `urllib2` 是两个常用的库,用于处理网络请求。在 Python 2 中,主要使用这两个库。而 Python 3 对这些库进行了重构,将它们成了多个子模块,如 `urllib.request`, `urllib.parse`, `urllib.error` 和 `urllib.robotparser` 等。

如何利用urllib实现Python爬虫的基础操作?

一、urllib 和 urllib2的关系

在python2中,主要使用urllib和urllib2,而python3对urllib和urllib2进行了重构,拆分成了urllib.request, urllib.parse, urllib.error,urllib.robotparser等几个子模块,这样的架构从逻辑和结构上说更加合理。urllib库无需安装,python3自带。python 3.x中将urllib库和urilib2库合并成了urllib库。

urllib2.urlopen() 变成了 urllib.request.urlopen()
urllib2.Request() 变成了 urllib.request.Request()
python2中的 cookielib 改为 www.baidu.com/)

post方法请求,需要添加data参数(字典格式),它要是字节流编码格式的内容,即 bytes 类型,通过 bytes() 方法可以进行转化,另外如果传递了这个 data 参数,不添加data参数就默认为 GET 方式请求。

from urllib import request,parse url = "www.baidu.com/" wd = {'wd':'哇哈哈哈'} data = bytes(parse.urlencode(wd),'utf-8') respones = request.urlopen(url,data=data)

(二)request.Request

由于单独使用urlopen() 方法的不能添加User-Agent、Cookie等headers信息,需要构建一个 Request 类型的对象,通过构造这个这个数据结构,一方面我们可以将请求独立成一个对象,另一方面可配置参数更加丰富和灵活。主要参数有:

  • url 参数是请求 URL,这个是必传参数,其他的都是可选参数。
  • data 参数如果要传必须传 bytes(字节流)类型的,如果是一个字典,可以先用 urllib.parse 模块里的 urlencode() 编码。
  • headers 参数是一个字典,这个就是 Request Headers 了,你可以在构造 Request 时通过 headers 参数直接构造,也可以通过调用 Request 实例的 add_header() 方法来添加, Request Headers 最常用的用法就是通过修改 User-Agent 来伪装浏览器,默认的 User-Agent 是 Python-urllib,我们可以通过修改它来伪装浏览器。
  • origin_req_host 参数指的是请求方的 host 名称或者 IP 地址。
  • unverifiable 参数指的是这个请求是否是无法验证的,默认是False。意思就是说用户没有足够权限来选择接收这个请求的结果。例如我们请求一个 HTML 文档中的图片,但是我们没有自动抓取图像的权限,这时 unverifiable 的值就是 True。
  • method 参数是一个字符串,它用来指示请求使用的方法,比如GET,POST,PUT等等。

通过随机的方法,选择user-agent:

import randomUA_LIST = [ 'Mozilla/5.0 (compatible; U; ABrowse 0.6; Syllable) AppleWebKit/420+ (KHTML, like Gecko)', 'Mozilla/5.0 (compatible; MSIE 8.0; Windows NT 6.0; Trident/4.0; Acoo Browser 1.98.744; .NET CLR 3.5.30729)', 'Mozilla/5.0 (compatible; MSIE 8.0; Windows NT 6.0; Trident/4.0; Acoo Browser 1.98.744; .NET CLR 3.5.30729)', 'Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.0; Trident/4.0; Acoo Browser; GTB5; Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1) ; InfoPath.1; .NET CLR 3.5.30729; .NET CLR 3.0.30618)', 'Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 5.1; Trident/4.0; SV1; Acoo Browser; .NET CLR 2.0.50727; .NET CLR 3.0.4506.2152; .NET CLR 3.5.30729; Avant Browser)', 'Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.0; Acoo Browser; SLCC1; .NET CLR 2.0.50727; Media Center PC 5.0; .NET CLR 3.0.04506)', 'Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.0; Acoo Browser; GTB5; Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1) ; Maxthon; InfoPath.1; .NET CLR 3.5.30729; .NET CLR 3.0.30618)', 'Mozilla/4.0 (compatible; Mozilla/5.0 (compatible; MSIE 8.0; Windows NT 6.0; Trident/4.0; Acoo Browser 1.98.744; .NET CLR 3.5.30729); Windows NT 5.1; Trident/4.0)', 'Mozilla/4.0 (compatible; Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 5.1; Trident/4.0; GTB6; Acoo Browser; .NET CLR 1.1.4322; .NET CLR 2.0.50727); Windows NT 5.1; Trident/4.0; Maxthon; .NET CLR 2.0.50727; .NET CLR 1.1.4322; InfoPath.2)', 'Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.0; Trident/4.0; Acoo Browser; GTB6; Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1) ; InfoPath.1; .NET CLR 3.5.30729; .NET CLR 3.0.30618)' ] #随机获取一个user-agent user_agent = random.choice(UA_LIST)

添加headers头部信息的方法1:

url='www.baidu.com/'user_agent = random.choice(UA_LIST) headers = { 'User-Agent': user_agent } req = request.Request(url=url,headers=headers) respones = request.urlopen(req)

添加headers头部信息的方法2:

url='www.baidu.com' headers = { 'User-Agent': user_agent } #添加user-agent的方法2 req = request.Request(url) #请求添加user-agent req.add_header("User-Agent",user_agent) #获取请求的user-agent agent的a要小写 print(req.get_header("User-agent")) response = request.urlopen(req)print(respones.read().decode('utf-8'))

三、request的高级类

在urllib.request模块里的BaseHandler类,他是所有其他Handler的父类,他是一个处理器,比如用它来处理登录验证,处理cookies,代理设置,重定向等。它提供了直接使用和派生类使用的方法:

  • add_parent(director):添加director作为父类
  • close():关闭它的父类
  • parent():打开使用不同的协议或处理错误
  • defautl_open(req):捕获所有的URL及子类,在协议打开之前调用

Handler的子类包括:

HTTPDefaultErrorHandler:用来处理www.baidu.com/") response = opener.open(req) print(response.read().decode("utf-8"))

(二)ProxyBasicAuthHandler

通过密码管理器的方法实现代理服务器功能

from urllib import request #代理密码管理,也可以管理服务器账户密码 #账户密码 user = "username" passwd = "passwd" #代理服务器 proxyserver = "1.1.1.1:9999" #构建密码管理对象,保存需要处理的用户名和密码 passmgr = request.HTTPPasswordMgrWithDefaultRealm() #添加账户信息,第一个参数realm是与远程服务器相关的域信息 passmgr.add_password(None,proxyserver,user,passwd) #构建基础ProxyBasicAuthHandler处理器对象 proxyauth_handler = request.ProxyBasicAuthHandler(passmgr) opener = request.build_opener(proxyauth_handler) req = request.Request("www.baidu.com/") response = opener.open(req)

(三)ProxyBasicAuthHandler

通过密码管理器的方法实现web认证登陆功能

#web验证 from urllib import request test = "test" passwd = "123456" webserver = "1.1.1.1" #构建密码管理器handler passwdmgr = request.HTTPPasswordMgrWithDefaultRealm() #添加密码信息 passwdmgr.add_password(None,webserver,test,passwd) #HTTP基础验证处理器类 "+webserver) response = opener.open(req)

四、Cookie处理

通过www.renren.com/PLogin.do' #需要登陆的账户密码 data = { "email":"renren账号", "password":"密码" } #数据处理 data = bytes(parse.urlencode(data),'utf-8') #第一次是POST请求,通过登陆账户密码,得到cookie req = request.Request(url,data=data) #发送第一次POST请求,生成登陆后的cookie response = opener.open(req) print(response.read().decode("utf-8")) #此时的opener已经包含了该链接下的cookie,此时使用该opener就可以直接访问该站点下其他的网页而不需要再登陆了 opener.open(www.renren.com/PLogin.doxxxxxxxxxxxxx)

以上就是python爬虫基础之urllib的使用的详细内容,更多关于python 爬虫urllib的资料请关注易盾网络其它相关文章!

标签:使用