【零基础入门Python爬虫】第一节 Urllib

Urllib 是 Python 内置的 HTTP 请求库,它可以让我们以编程的方式发送 HTTP 请求并处理服务器响应。使用 urllib,我们可以轻松地获取 Web 页面、下载文件和与 Web API 进行交互等操作。

在本文中,我们将介绍如何使用 Urllib 进行常见的 HTTP 请求,并对其各个组件进行详细解释。希望通过本篇文章,你可以掌握 Urllib 的基本用法和一些高级技巧,从而更好地进行 Web 开发和数据获取等工作。


一、安装 Urllib

import urllib.request

Urllib 是 Python 自带的标准库,无需另行安装,只需要在代码中导入即可开始使用。

二、发送HTTP请求

Urllib提供了4个方法用于发送HTTP请求:

  • urllib.request.urlopen(url, data=None[, timeout, ]*, cafile=None, capath=None, cadefault=False, context=None):打开一个URL地址,并返回一个类似文件的对象。
  • urllib.request.urlretrieve(url, filename=None, reporthook=None, data=None):下载远程文件到本地。
  • urllib.request.urlcleanup():清除缓存中的过期 URL。
  • urllib.request.urlopen(url, data=None[, timeout, ]*, cafile=None, capath=None, cadefault=False, context=None):向指定的URL地址发送POST请求,并返回一个类似文件的对象。

其中最常用的方法是第一个方法urllib.request.urlopen()。该方法接收一个URL地址作为参数,返回一个类似文件的对象。我们可以通过读取这个文件的内容获取HTTP响应。

1.发送 GET 请求

发送 GET 请求是最常见的 HTTP 请求之一,它可以用于获取网页内容、查询 API 接口等场景。在 Urllib 中,我们可以使用 urllib.request 模块下的 urlopen() 方法来发送 GET 请求:

import urllib.request

response = urllib.request.urlopen('http://www.example.com/')
html = response.read()
print(html)

以上代码将向 http://www.example.com/ 发送一个 GET 请求,并将响应内容保存到变量 html 中。我们可以使用 read() 方法来读取响应内容,也可以使用 decode() 方法将字节码转换为字符串。

如果你需要添加请求头或其他参数,可以使用如下方法:

import urllib.request

url = 'http://www.example.com/'
headers = {
    'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64)',
}
req = urllib.request.Request(url=url, headers=headers)
response = urllib.request.urlopen(req)
html = response.read().decode('utf-8')
print(html)

以上代码中,我们使用 urllib.request.Request() 方法来创建一个请求对象,并传入请求的 URL 和请求头。然后,我们将请求对象传给 urllib.request.urlopen() 方法来发送请求并获取响应。

2.发送 POST 请求

发送 POST 请求是另一种常见的 HTTP 请求方式,它可以用于提交表单、上传文件等场景。在 Urllib 中,我们可以使用 urllib.request 模块下的 urlopen() 方法来发送 POST 请求:

import urllib.parse
import urllib.request

url = 'http://www.example.com/login'
data = {
    'username': 'admin',
    'password': '123456',
}
headers = {
    'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64)',
}
data = urllib.parse.urlencode(data).encode('utf-8')
req = urllib.request.Request(url=url, data=data, headers=headers)
response = urllib.request.urlopen(req)
html = response.read().decode('utf-8')
print(html)

以上代码中,我们使用 urllib.parse.urlencode() 方法将参数编码为 URL 编码格式,并使用 encode() 方法将其转换为字节码。然后,我们创建一个请求对象,并将请求的 URL、请求头和请求参数传入。最后,我们将请求对象传给 urlopen() 方法来发送请求并获取响应。

3.处理响应

Urllib中的响应对象包含了HTTP请求返回的结果,可以通过如下属性和方法来获取响应信息:

  • read([size]):读取指定大小的响应数据;
  • readline():读取一行响应数据;
  • readlines(hint=-1):读取所有响应数据并以列表形式返回;
  • getcode():返回HTTP状态码;
  • geturl():返回真实的URL地址。
import urllib.request

response = urllib.request.urlopen('http://www.example.com')
print(response.getcode())
print(response.geturl())
print(response.info())

# 读取响应数据
html = response.read().decode('utf-8')
print(html)

4.处理异常

在进行 HTTP 请求时,可能会遇到一些异常情况,例如网络连接超时、服务器返回错误等。为了防止程序崩溃,我们需要使用 try-except 语句来捕获这些异常情况:

import urllib.request

try:
    response = urllib.request.urlopen('http://www.example.com/')
except urllib.error.URLError as e:
    print(e.reason)
else:
    html = response.read()

以上代码中,我们使用 try-except 语句来捕获 urlopen() 方法可能抛出的异常。如果发生异常,我们将打印异常信息;否则,我们将读取响应内容。

5.使用代理

有时候,我们需要使用代理服务器来访问互联网上的资源,例如绕过 IP 封锁、访问被限制的网站等。在 Urllib中,我们可以使用 urllib.request.ProxyHandlerurllib.request.build_opener 来设置代理:

import urllib.request

proxy_handler = urllib.request.ProxyHandler({'http': 'http://127.0.0.1:8080'})
opener = urllib.request.build_opener(proxy_handler)
response = opener.open('http://www.example.com/')
html = response.read()
print(html)

以上代码中,我们首先创建了一个代理处理器 proxy_handler,并将其传给 build_opener() 方法来创建一个自定义的 URL 处理程序。然后,我们使用 open() 方法来发送请求并获取响应。

6.使用Cookie

Urllib也支持使用Cookie来进行网络请求,可以通过如下方法来设置和获取Cookie。

import urllib.request
import http.cookiejar

# 保存Cookie到文件
filename = 'cookie.txt'
cookie_jar = http.cookiejar.MozillaCookieJar(filename)
handler = urllib.request.HTTPCookieProcessor(cookie_jar)
opener = urllib.request.build_opener(handler)
response = opener.open('http://www.example.com')
cookie_jar.save()

# 读取Cookie文件
cookie_jar = http.cookiejar.MozillaCookieJar()
cookie_jar.load('cookie.txt', ignore_discard=True, ignore_expires=True)
handler = urllib.request.HTTPCookieProcessor(cookie_jar)
opener = urllib.request.build_opener(handler)
response = opener.open('http://www.example.com')
print(response.read().decode('utf-8'))

7.下载文件

在 Urllib 中,我们可以使用 urlretrieve() 方法来下载文件,该方法将从指定的 URL 下载文件并保存到本地路径:

import urllib.request

url = 'http://www.example.com/file.txt'
urllib.request.urlretrieve(url, 'file.txt')

以上代码中,我们使用 urllib.request.urlretrieve() 方法来下载 file.txt 文件,并将其保存到当前工作目录下。如果你需要将文件保存到其他目录,可以指定另一个路径。


总结

本文介绍了Urllib的基本用法,包括发送HTTP请求、处理响应、处理异常、使用代理、使用Cookie等常见操作。Urllib是Python内置的HTTP客户端库,功能强大,易于使用,对于一些小型的网络请求,可以直接使用该库,非常方便。

除了Urllib,Python还有许多其他的HTTP客户端库,例如Requests、httplib2等,它们在某些方面可能比Urllib更加强大和便捷。但是对于一些小型的网络请求场景来说,Urllib已经足够满足需求,并且它能够轻松地与Python标准库中的其他模块集成,使得开发更加高效。

希望通过本文的介绍,能够帮助读者更好地掌握Urllib的用法,以及深入理解Python中的HTTP客户端库。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
Python爬虫教程urllib主要是介绍了Python爬虫技术中的urllib库的基础用法。该教程详细讲解了urllib库的各种功能和方法,包括发送请求、处理响应、设置请求头、处理异常等。这个教程对于想要学习和使用Python进行网络爬虫的人来说具有很大的参考价值。 同时,该教程也提到了一些常见的问题和解决方法,例如模拟超时的处理方法。在网络爬虫中,有时候我们长时间无法访问一个页面,可能是因为网速有限或者被发现我们是一个爬虫。针对这种情况,可以使用timeout参数来设置超时时间,如果超过了设定的时间仍无法获取响应,则会抛出URLError异常,我们可以在异常处理中对超时进行相应的处理。 总的来说,Python爬虫教程urllib是一个很好的学习资源,适合想要入门或深入学习Python爬虫技术的人使用。它提供了详细的教程和实例,可以让你快速上手和掌握使用urllib库进行网络爬虫的基本知识和技巧。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* [Python爬虫urllib基础用法教程](https://download.csdn.net/download/weixin_38656741/12858843)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 33.333333333333336%"] - *2* [Python爬虫 —— urllib库的使用(get/post请求+模拟超时/浏览器)](https://blog.csdn.net/qq_50587771/article/details/123840479)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 33.333333333333336%"] - *3* [python爬虫urllib3的使用示例](https://download.csdn.net/download/weixin_38681147/12867742)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 33.333333333333336%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

宝爷~

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值