网站建设德尔普站长百科 wordpress
- 作者: 五速梦信息网
- 时间: 2026年04月20日 07:51
当前位置: 首页 > news >正文
网站建设德尔普,站长百科 wordpress,只做网站的人员工资,建设化工网站的目的目录
一. 前言
二. urllib.request
三. urllib.error
四. urllib.parse
五. urllib.robotparser 一. 前言
Python urllib 库用于操作网页 URL#xff0c;并对网页的内容进行抓取处理。
本文主要介绍 Python3 的 urllib。
urllib 包 包含以下几个模块#xff1a;
url…目录
一. 前言
二. urllib.request
三. urllib.error
四. urllib.parse
五. urllib.robotparser 一. 前言
Python urllib 库用于操作网页 URL并对网页的内容进行抓取处理。
本文主要介绍 Python3 的 urllib。
urllib 包 包含以下几个模块
urllib.request - 打开和读取 URL。urllib.error - 包含 urllib.request 抛出的异常。urllib.parse - 解析 URL。urllib.robotparser - 解析 robots.txt 文件。 二. urllib.request
urllib.request 定义了一些打开 URL 的函数和类包含授权验证、重定向、浏览器 cookies等。
urllib.request 可以模拟浏览器的一个请求发起过程。
我们可以使用 urllib.request 的 urlopen 方法来打开一个 URL语法格式如下
urllib.request.urlopen(url, dataNone, [timeout, ], cafileNone, capathNone, cadefaultFalse, contextNone)
urlurl 地址。data发送到服务器的其他数据对象默认为 None。timeout设置访问超时时间。cafile 和 capathcafile 为 CA 证书 capath 为 CA 证书的路径使用 HTTPS 需要用到。cadefault已经被弃用。contextssl.SSLContext类型用来指定 SSL 设置。
实例如下
from urllib.request import urlopenmyURL urlopen(https://www.baidu.com/)
print(myURL.read())
以上代码使用 urlopen 打开一个 URL然后使用 read() 函数获取网页的 HTML 实体代码。
read() 是读取整个网页内容我们可以指定读取的长度
from urllib.request import urlopenmyURL urlopen(https://www.baidu.com/)
print(myURL.read(300))
除了 read() 函数外还包含以下两个读取网页内容的函数 readline() - 读取文件的一行内容 from urllib.request import urlopenmyURL urlopen(https://www.baidu.com/)
print(myURL.readline()) #读取一行内容 readlines() - 读取文件的全部内容它会把读取的内容赋值给一个列表变量。 from urllib.request import urlopenmyURL urlopen(https://www.baidu.com/)
lines myURL.readlines()
for line in lines:print(line)
我们在对网页进行抓取时经常需要判断网页是否可以正常访问这里我们就可以使用 getcode() 函数获取网页状态码返回 200 说明网页正常返回 404 说明网页不存在
import urllib.requestmyURL1 urllib.request.urlopen(https://www.baidu.com/)
print(myURL1.getcode()) # 200try:myURL2 urllib.request.urlopen(https://www.baidu.com/no.html)
except urllib.error.HTTPError as e:if e.code 404:print(404) # 404
如果要将抓取的网页保存到本地可以使用 Python3 File write() 方法 函数
from urllib.request import urlopenmyURL urlopen(https://www.baidu.com/)
f open(baidu_urllib_test.html, wb)
content myURL.read() # 读取网页内容
f.write(content)
f.close()
执行以上代码在本地就会生成一个 baidu_urllib_test.html 文件里面包含了 https://www.baidu.com/ 网页的内容。
URL 的编码与解码可以使用 urllib.request.quote() 与 urllib.request.unquote() 方法
import urllib.requestencode_url urllib.request.quote(https://www.baidu.com/) # 编码
print(encode_url)unencode_url urllib.request.unquote(encode_url) # 解码
print(unencode_url)
输出结果为
https%3A//www.baidu.com/
https://www.baidu.com/
模拟头部信息
我们抓取网页一般需要对 headers网页头信息进行模拟这时候需要使用到 urllib.request.Request 类
class urllib.request.Request(url, dataNone, headers{}, origin_req_hostNone, unverifiableFalse, methodNone)urlurl 地址。data发送到服务器的其他数据对象默认为 None。headersHTTP 请求的头部信息字典格式。origin_req_host请求的主机地址IP 或域名。unverifiable很少用这个参数用于设置网页是否需要验证默认是 False。method请求方法 如 GET、POST、DELETE、PUT等。
import urllib.request
import urllib.parseurl https://www.baidu.com/?s # 百度搜索页面
keyword Python 教程
key_code urllib.request.quote(keyword) # 对请求进行编码
url_all urlkey_code
header {User-Agent:Mozilla/5.0 (X11; Fedora; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.36
} #头部信息
request urllib.request.Request(url_all,headersheader)
reponse urllib.request.urlopen(request).read()fh open(./urllib_test_baidu_search.html,wb) # 将文件写入到当前目录中
fh.write(reponse)
fh.close()
执行以上 Python 代码会在当前目录生成 urllib_test_baidu_search.html 文件打开 urllib_test_baidu_search.html 文件可以使用浏览器打开。
表单 POST 传递数据我们先创建一个表单代码如下我这里使用了 PHP 代码来获取表单的数据
!DOCTYPE html
html
head
meta charsetutf-8
title百度一下( baidu.com) urllib POST 测试/title
/head
body
form action methodpost namemyFormName: input typetext namenamebrTag: input typetext nametagbrinput typesubmit value提交
/form
hr
?php
// 使用 PHP 来获取表单提交的数据你可以换成其他的
if(isset(\(_POST[name]) \)_POST[tag] ) {echo \(_POST[name] . , . \)_POST[tag];
}
?
/body
/html
import urllib.request
import urllib.parseurl https://www.baidu.com/try/py3/py3_urllib_test.php # 提交到表单页面
data {name:baidu, tag : 百度一下} # 提交数据
header {User-Agent:Mozilla/5.0 (X11; Fedora; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.36
} #头部信息
data urllib.parse.urlencode(data).encode(utf8) # 对参数进行编码解码使用 urllib.parse.urldecode
requesturllib.request.Request(url, data, header) # 请求处理
reponseurllib.request.urlopen(request).read() # 读取结果fh open(./urllib_test_post_baidu.html,wb) # 将文件写入到当前目录中
fh.write(reponse)
fh.close()
执行以上代码会提交表单数据到 py3_urllib_test.php 文件输出结果写入到 urllib_test_post_baidu.html 文件。
打开 urllib_test_post_baidu.html 文件可以使用浏览器打开。
三. urllib.error
urllib.error 模块为 urllib.request 所引发的异常定义了异常类基础异常类是 URLError。
urllib.error 包含了两个方法URLError 和 HTTPError。
URLError 是 OSError 的一个子类用于处理程序在遇到问题时会引发此异常或其派生的异常包含的属性 reason 为引发异常的原因。
HTTPError 是 URLError 的一个子类用于处理特殊 HTTP 错误例如作为认证请求的时候包含的属性 code 为 HTTP 的状态码 reason 为引发异常的原因headers 为导致 HTTPError 的特定 HTTP 请求的 HTTP 响应头。
对不存在的网页抓取并处理异常
import urllib.request
import urllib.errormyURL1 urllib.request.urlopen(https://www.baidu.com/)
print(myURL1.getcode()) # 200try:myURL2 urllib.request.urlopen(https://www.baidu.com/no.html)
except urllib.error.HTTPError as e:if e.code 404:print(404) # 404
四. urllib.parse
urllib.parse 用于解析 URL格式如下
urllib.parse.urlparse(urlstring, scheme, allow_fragmentsTrue)
urlstring 为 字符串的 url 地址scheme 为协议类型
allow_fragments 参数为 false则无法识别片段标识符。相反它们被解析为路径参数或查询组件的一部分并 fragment 在返回值中设置为空字符串。
from urllib.parse import urlparseo urlparse(https://www.baidu.com/?spython%E6%95%99%E7%A8%8B)
print(o)
以上实例输出结果为
ParseResult(schemehttps, netlocwww.baidu.com, path/, params, queryspython%E6%95%99%E7%A8%8B, fragment)
从结果可以看出内容是一个元组包含 6 个字符串协议位置路径参数查询判断。
我们可以直接读取协议内容
from urllib.parse import urlparseo urlparse(https://www.baidu.com/?spython%E6%95%99%E7%A8%8B)
print(o.scheme)
以上实例输出结果为
https
完整内容如下 属性 索引 值 值如果不存在 scheme 0 URL协议 scheme 参数 netloc 1 网络位置部分 空字符串 path 2 分层路径 空字符串 params 3 最后路径元素的参数 空字符串 query 4 查询组件 空字符串 fragment 5 片段识别 空字符串 username 用户名 None password 密码 None hostname 主机名小写 None port 端口号为整数如果存在 None
五. urllib.robotparser
urllib.robotparser 用于解析 robots.txt 文件。
robots.txt统一小写是一种存放于网站根目录下的 robots 协议它通常用于告诉搜索引擎对网站的抓取规则。
urllib.robotparser 提供了 RobotFileParser 类语法如下
class urllib.robotparser.RobotFileParser(url)
这个类提供了一些可以读取、解析 robots.txt 文件的方法 set_url(url) - 设置 robots.txt 文件的 URL。 read() - 读取 robots.txt URL 并将其输入解析器。 parse(lines) - 解析行参数。 can_fetch(useragent, url) - 如果允许 useragent 按照被解析 robots.txt 文件中的规则来获取 url 则返回 True。 mtime() -返回最近一次获取 robots.txt 文件的时间。 这适用于需要定期检查 robots.txt 文件更新情况的长时间运行的网页爬虫。 modified() - 将最近一次获取 robots.txt 文件的时间设置为当前时间。 crawl_delay(useragent) -为指定的 useragent 从 robots.txt 返回 Crawl-delay 形参。 如果此形参不存在或不适用于指定的 useragent 或者此形参的 robots.txt 条目存在语法错误则返回 None。 request_rate(useragent) -以 named tuple RequestRate(requests, seconds) 的形式从 robots.txt 返回 Request-rate 形参的内容。 如果此形参不存在或不适用于指定的 useragent 或者此形参的 robots.txt 条目存在语法错误则返回 None。 site_maps() - 以 list() 的形式从 robots.txt 返回 Sitemap 形参的内容。 如果此形参不存在或者此形参的 robots.txt 条目存在语法错误则返回 None。 import urllib.robotparserrp urllib.robotparser.RobotFileParser()rp.set_url(http://www.musi-cal.com/robots.txt)rp.read()rrate rp.request_rate()rrate.requests
3rrate.seconds
20rp.crawl_delay()
6rp.can_fetch(, http://www.musi-cal.com/cgi-bin/search?citySanFrancisco)
Falserp.can_fetch(*, http://www.musi-cal.com/)
True
- 上一篇: 网站建设倒计时找不到网站后台怎么办
- 下一篇: 网站建设的500字小结中企动力企业邮箱登录首页
相关文章
-
网站建设倒计时找不到网站后台怎么办
网站建设倒计时找不到网站后台怎么办
- 技术栈
- 2026年04月20日
-
网站建设到发布2012sevser网站建设参考书
网站建设到发布2012sevser网站建设参考书
- 技术栈
- 2026年04月20日
-
网站建设导航栏怎么创建一个属于自己的平台
网站建设导航栏怎么创建一个属于自己的平台
- 技术栈
- 2026年04月20日
-
网站建设的500字小结中企动力企业邮箱登录首页
网站建设的500字小结中企动力企业邮箱登录首页
- 技术栈
- 2026年04月20日
-
网站建设的背景怎么做 代刷网站
网站建设的背景怎么做 代刷网站
- 技术栈
- 2026年04月20日
-
网站建设的必要性及意义个人主页搭建
网站建设的必要性及意义个人主页搭建
- 技术栈
- 2026年04月20日
