爬虫基础笔记—urllib库的使用

Maren ·
更新时间:2024-11-13
· 582 次阅读

一、urllib库

  urllib是一个用来处理网络请求的python数据库,它包含四个模块
  urllib.requests 请求模块,用于发起网络请求
  urllib.parse 解析模块,用于解析URL
  urllib.error 异常处理模块,用于处理request引起的异常
  urllib.robotparse 用于解析robots.txt文件

1.urllib.requests 模块

  request模块主要负责构造和发起网络请求,并在其中添加Headers,Proxy等。
利用它可以模拟浏览器的请求发起过程。
  a.发起网络请求
  b.添加Headers
  c.操作cookie
  d.使用代理

1.1urlopen方法

  urlopen是一个简单发送网络请求的方法。它接收一个字符串格式的url,它会向传入的url发送网络请求,然后返回结果。

from urllib import request response = request.urlopen(url='http://httpbin.org/get')

  urlopen 默认会发送get请求,当传入data数据时,则会发生POST请求。data参数是字节类型、这类文件对象或可迭代对象。

response = request.urlopen(url='http://httpbin.org/post'), data=b'uesrname=jay&password=123456'

  还可以设置超时,如果请求超过设置时间,则抛出异常。timeout没有指定则用系统默认设置,
timeout只对,http,https以及ftp连接起作用。以秒为单位,比如可以设置timeout=0.1 超时时间为0.1秒。

response = request.urlopen(url='http://www.baidu.com', timeout=0.1) 2.Request对象

  利用openurl可以发起最基本的请求,但这几个简单的参数不足以构建一个完整的请求,可以利用更强大的Request对象来构建更加完整的请求。

req == resquest.Request('http://www.baidu.com') response = request.urlopen(req) 2.1请求头添加

  通过urllib发送的请求会有一个默认的Headers: “User-Agent”:“Python-urllib/3.6”,指明请求是由urllib发送的。所以遇到一些验证User-Agent的网站时,需要我们自定义Headers把自己伪装起来。

headers = { 'user-Agent':'Mozilla/5.0(Window NT 10.0; Win64;) AppleWebkit/537.36(KHTML, like Gecko)' } print(heaeders) url = 'http://www.baidu.com' req = request.Request('http://www.baidu.com', headers) 2.2操作cookie

  在开发得过程中,对cookie得处理非常重要,urllib得cookie处理如下:

from urllib import request from http import cookiejar # 创建一个cookie 对象 cookie = cookiejar.CookieJar() # 创建一个cookie处理器 coolie = request.HTTPCookieProcessor(cookie) # 以它为参数,创建Openner对象 opener = request.build_opener(cookies) # 使用这个openner来发请求 res = opener.opeen('http://www.baidu.com') print(coolie.cookiejar) 2.3设置代理

  运行爬虫的时候,经常出现被封的情况,这时候我们就需要用ip代理来处理,
urllib的IP处理如下:

from urllib import request url = 'http://httpbiin.org/ip' # 代理地址 proxy = {'http':'180.76.111.69:3128'} # 代理处理器 proxies = request.baidu_opener(proxies) res = oprner.open(url) print(res.read().decode()) 3.Response对象

  urllib库中的类或或者方法,在发送网络请求后,都会返回一个urllib.response的对象。它包含了请求回来的数据结果。它包含了一些属性和方法,供我们处理返回的结果。
a.read() 获取响应的数据,只能用一次

print(response.read())

b.readline 读取一行

while True: data = response.readlin() if data: print(data)

c.info() 获取响应头信息

print(response.info())

d.geturl() 获取访问的url

print(response.geturl())

e,getcode() 返回状态码

print(response.getcode()) 4.parse 模块

  parse模块是一个工具模块,提供了需要对url处理的方法,用于解析url。

a.parse.quote()

  url中只能包含ascii字符,在实际操作过程中,get请求通过url传递的参数中会有大量的特殊字符,例如汉字,那么就需要进行url编码。
例如https://baike.baidu.com/item/URL编码/3703727?fr=aladdin
我们需要将编码进行url编码

from urllib import parse url = 'http://httpbin.org/get?aaa={}' safe_url = url.format(parse.quote('人生苦短,我用Python')) print(safe_url)

运行结果   ✳也可以用parse.unquote()反编码回来

http://httpbin.org/get?aaa=%E4%BA%BA%E7%94%9F%E8%8B%A6%E7%9F%AD%EF%BC%8C%E6%88%91%E7%94%A8Python b.parse.urlencode()

  在发送请求的时候,往往会需要传递很多的参数,如果用字符串方法去拼接会比较麻烦,parse.urlencode()方法就是用来拼接url参数的。

params = {'wd':'测试','code':1,'height':'100'} res = parse.urlencode(params) print(res) ''' 运行结果 wd=%E6%B5%8B%E8%AF%95&code=1&height=100 '''

  也可以通过parse.parse_qs()方法将它转回字典

print(parse.parse_qs('wd=%E6%B5%8B%E8%AF%95&code=1&height=100')) ''' 运行结果 {'wd': ['测试'], 'code': ['1'], 'height': ['100']} ''' 5.urllib.error模块

  error模块主要负责处理异常,如果请求出现错误,我们可以用error模块进行处理
主要包含URLError和HTTPError。
  a.URLError:是error异常模块的基类,由request模块产生的异常都可以用这个类来处理
  b.HTTPError:是URLError的子类,主要包含三个属性:
    (1) code:请求的状态码
    (2) reason:错误原因
    (3) headers:响应的报头

6.urllib.robotparse模块

  robotparse模块主要负责处理爬虫协议文件,robots.txt.的解析。
  Robots协议(也称为爬虫协议、机器人协议等)的全称是“网络爬虫排除标准”(Robots Exclusion Protocol),网站通过Robots协议告诉搜索引擎哪些页面可以抓取,哪些页面不能抓取。
  robots.txt文件是一个文本文件,使用任何一个常见的文本编辑器,比如Windows系统自带的Notepad,就可以创建和编辑它 [1] 。robots.txt是一个协议,而不是一个命令。robots.txt是搜索引擎中访问网站的时候要查看的第一个文件。robots.txt文件告诉蜘蛛程序在服务器上什么文件是可以被查看的。


作者:卢子宁



爬虫 urllib

需要 登录 后方可回复, 如果你还没有账号请 注册新账号