[Python]爬虫基础——urllib库

这篇具有很好参考价值的文章主要介绍了[Python]爬虫基础——urllib库。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

一、简介

urllib库是Python内置的标准库。包含以下四个模块:
1、request:模拟发送HTTP请求;
2、error:处理HTTP请求错误时的异常;
3、parse:解析、拆分、合并URL;
4、robotparser:解析网站的robots.txt文件

案例:
爬取知乎网站的数据
首先要构造HTTP请求,然后将HTTP响应的各部分进行输出

第一步:准备工作,创建zhuhu.py文件
[Python]爬虫基础——urllib库
[Python]爬虫基础——urllib库
[Python]爬虫基础——urllib库
第二步:爬取菜鸟教程代码,敲入以下代码

#第一步:导入request模块
import urllib.request
#第二步:定义url字符串(菜鸟教程网站)
url = 'https://www.runoob.com/'
#第三步:构造HTTP请求,并把返回回值赋值给response
response = urllib.request.urlopen(url)
print('响应类型',type(response))
print('响应状态码',response.getcode())
print('编码方式',response.getheader('Content-Type'))
print('请求的URL',response.geturl())
#第四步:urlopen()函数获取网页,返回的网页内容数据格式为bytes类型,需要使用decode()函数解码,装换成str类型。
resp = response.read().decode('utf-8')
print('网页内容',resp)

运行结果如下:

[Python]爬虫基础——urllib库
结果:爬取的内容与网页内容一致,爬取网页成功
[Python]爬虫基础——urllib库

二、发送请求

request模块提供了基本的构造HTTP请求方法,同时可以处理授权验证(authentication)、重定向(redirection)、Cookie会话等。
使用urlopen()函数和Request()函数构造HTTP请求。
[Python]爬虫基础——urllib库

1、urlopen()函数

[Python]爬虫基础——urllib库

原型:
urlopen(url,data=None,[timeout,]*,cafile=None,capath=None,cadefault=False,context=None)
url:请求的URL,必传。
data:请求信息,以get方式发送请求为None,以post方式发送请求时给出data参数(必须是bytes(字节流)类型)。
timeout:网络访问的超时时间。
cafile、captath、cadefault:用于实现可信任CA证书的HTTP请求很少使用。
context:实现SSL加密传输,很少使用。
注意:urlopen()函数的data参数必须是bytes(字节流)类型,如果是字典类型,可以先用urllib.parse模块的urlencode()函数编码。

调用urlopen()函数后,返回一个HTTPResponse类型的对象,以下是

HTTPResponse类型对象提供的属性和方法。

getcode():status:获取响应状态码;
get_url():获取请求的url;
getheaders():获取响应头的信息,返回二元组列表;
getheader(name):获取特定响应头信息;
info():获取响应头信息,返回字符串;
read()/readline():读取响应体。

[Python]爬虫基础——urllib库urlopen()函数既可以实现GET请求,也可以通过设置data参数实现POST请求。

2、Request()函数

函数原型:
Request(url,data=None,headers={},origin_req_host=None,unverifiable=False,method=None)
(1) url:请求的URL。
(2) data:请求信息,以get方式发送请求为None,以post方式发送请求时给出data参数(必须是bytes(字节流)类型)。
(3) headers:请求头信息(user_agent,cookie,host…)
(4) origin_req_host:客户端的host名称或者IP地址。
(5) unverifiable:表示请求无法验证,默认为False.
(6) method:请求方法(get/post)

当服务器有反爬虫机制时,可以通过设置headers参数伪装成浏览器去访问网站。

案例:爬取https://www.iconfont.cn/首页内容

#第一步:导入request模块
import urllib.request
#第二步:定义url字符串
url ='https://www.iconfont.cn/'
#第三步:设置headersvalue参数,伪装成浏览器
headersvalue = {
    'user-agent':' Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/107.0.0.0 Safari/537.36'
}

#第四步:创建Request对象,并将返回的结果赋值给request
request =urllib.request.Request(url,headers=headersvalue)
#第五步:构造Http请求,并将返回结果赋值给response
response =urllib.request.urlopen(url)
#第六步:读取网页内容并解码
resp = response.read().decode('utf-8')
#第七步:输出网页内容
print("网页内容:",resp)

三、异常处理

error模块提供了request模块产生的异常处理,主要是URLError和HTTPError两个类。
1、URLError类:是error异常模块的基类,可以捕获request模块产生的异常,它具有一个reason属性(返回异常原因)。
2、HTTPError类是URLError类的子类,专门处理HTTP请求的异常,它具由3个属性,分别为reason(返回异常原因)、code(返回HTTP状态码)和headers(返回请求头)。

由于HTTPError是URLError的子类,并不能处理父类支持的异常处理,所以一般对两种异常分开捕获,可先捕获子类的异常,再捕获父类的异常。

#第一步:导入request模块
import urllib.request
#导入error模块
import urllib.error
#处理异常
try:
    # 构造HTTP请求,并将返回的结果赋值给response
    response = urllib.request.urlopen('https://www.gaoding.com/introduction')
    # 捕获HTTP请求的异常
except urllib.error.HTTPError as e:
    #输出HTTP请求的异常原因、状态码和请求头
    print('异常原因:',e.reason)
    print('状态码:',e.code)
    print('请求头:',e.headers)
except urllib.error.URLError as e:
    #捕获异常
    print(e.reason)
else:
    #如果没有异常则输出“Request Successfully”
    print('Request Successfully')




[Python]爬虫基础——urllib库

四、解析URL

parse模块提供解析URL方法,如下:
拆分:
urlparse(urlstring):将URL拆分为六个部分:scheme、netloc、path、params、query、fragment。
urlsplit(urlstring):将URL拆分为五部分:scheme、netloc、path、query、fragment。
合并:
urljoin(url1,url2):将基础链接uel1和新链接url2合并,分析url1的scheme、netloc、path内容,并补充url2缺失的部分。
urlunparse(parts):将可迭代对象parts合并为URL,parts长度为7。
urlunsplit(parts):将可迭代对象parts合并为URL,parts长度为6.
装换:
urlencode(query):将字典形式的数据装换为URL后面的查询字符串。
parse_qs(qs):将URL后面的查询字符串转换为字典。
parse_qsl(qs):将URL后面的查询字符串转换为列表。
quote(str):将URL中的中文字符装换为URL编码。
unquote(str):将URL编码转换为中文字符,进行编码。

案例:
解析 https://www.zhihu.com/search?type=content&q=%E7%88%AC%E8%99%AB

#导入parse模块
import urllib.parse
#定义url字符串
url = 'https://www.zhihu.com/search?type=content&q=%E7%88%AC%E8%99%AB '
#拆分url并输出结果
print("拆分结果:",urllib.parse.urlparse(url))
#合并url并输出结果
print(urllib.parse.urljoin('https://www.zhihu.com/search','?type=content&q=%E7%BD%91%E7%BB%9C'))
#定义params字符串
params={'type':'content','q':'%E7%BD%91%E7%BB%9C'}
#编码params参数,合并url并输出结果
print('https://www.zhihu.com/search?'+urllib.parse.urlencode(params))
#定义query字符串
query='type=content&q=%E7%BD%91%E7%BB%9C'
#将query转换成字典
print(urllib.parse.parse_qs(query))
#将query转换成列表
print(urllib.parse.parse_qsl(query))
#定义keyword中文字符串
keyword= 'Python语言进行网络爬虫'
#将中文字符串装换为URL编码,合并后赋值给url
url ='https://www.zhihu.com/search?type=content&q='+urllib.parse.quote(keyword)
#输出URL编码的url
print(url)
#将URL编码装换为中文字符并输出结果
print(urllib.parse.unquote(url))

运行结果:
[Python]爬虫基础——urllib库

五、分析Robots协议

robotparser模块提供了分析网站Robots协议的RobotFileParser类,它可以通过robots.txt文件来判断某网页是否能被爬取。
以下是RotbotFileParser类提供的方法:
(1)set_url():设置robots.txt文件的URL.
(2)read():读取robots.txt文件并进行分析。
(3)can_fetch():第一个参数为User_Agent,第二个参数为要爬取的网页的URL,判断该网页能否被爬取。
(4)parse():解析robots.txt文件中某些行的内容。
(5)mtime():返回上次抓取和分析的robots.txt文件的时间。
(6)modified():将当前时间设置为上次抓取和分析robots.txt时间。

案例:

#导入robotparser模块
import urllib.robotparser
#创建RobotsFileParser类对象response
response = urllib.robotparser.RobotFileParser()
#设置robots.txt文件的URL
response.set_url('https://www.zhihu.com/robots.txt')
#读取robots.txt文件并进行分析
response.read()
#定义爬虫名称
user_agent='zhuhupachong'
#定义知乎的发现url
url ='https://www.zhihu.com/explore'
#判断是否可以进行爬取
print("是否可以爬取知乎发现:",response.can_fetch(user_agent,url))

运行结果 :
[Python]爬虫基础——urllib库文章来源地址https://www.toymoban.com/news/detail-435181.html

到了这里,关于[Python]爬虫基础——urllib库的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 5.爬虫必备基础知识(urllib&requests)一

    我们浏览器在输入完网址到我们看到网页的整体内容, 这个过程中究竟发生了些什么? 我们看一下一个浏览器请求的全过程 接下来就是一个比较重要的事情了. 所有的数据都在页面源代码里么? 非也~ 这里要介绍一个新的概念 那就是页面渲染数据的过程, 我们常见的页面渲染过

    2024年04月25日
    浏览(31)
  • Python爬虫——Urllib

    爬虫小白 爬虫语法 爬虫技术 1、什么是互联网爬虫 通过一个程序,根据url进行爬取网页,获取游泳信息 通过程序模拟浏览器,去向服务器发起请求,获取响应信息 2、爬虫核心 爬取网页:爬取整个网页,包含了网页中所有内容 解析数据:将网页中得到的数据进行解析 难点

    2024年02月13日
    浏览(34)
  • 爬虫入门到精通_基础篇1(爬虫基本原理讲解, Urllib库基本使用)

    发起请求:通过HTTP库向目标站点发起请求,即发送一个Request,请求可以包含额外的headers等信息,等待服务器响应。 获取响应内容:如果服务器能正常响应,会得到一个Response,Response的内容便是所要获取的页面内容,类型可能有HTML,Json字符串,二进制数据(如图片视频)等类型。

    2024年01月23日
    浏览(30)
  • Python爬虫学习笔记(三)————urllib

    目录 1.使用urllib来获取百度首页的源码 2.下载网页图片视频  3.总结-1 4.请求对象的定制(解决第一种反爬)   5.编解码 (1)get请求方式:urllib.parse.quote() (2)get请求方式:urllib.parse.urlencode() (3)post请求方式 6.ajax的get请求 (1)获取豆瓣电影的第一页的数据 (2)下

    2024年02月16日
    浏览(30)
  • Python网络爬虫库urllib详解

    了解Python标准库中的urllib模块,掌握URL解析、发送HTTP请求、文件下载等操作。

    2024年02月08日
    浏览(31)
  • Python爬虫库之urllib使用详解

      一、Python urllib库 Python urllib 库用于操作网页 URL,并对网页的内容进行抓取处理。 Python3 的 urllib。 urllib 包 包含以下几个模块: urllib.request - 打开和读取 URL。 urllib.error - 包含 urllib.request 抛出的异常。 urllib.parse - 解析 URL。 urllib.robotparser - 解析 robots.txt 文件。 二、urllib.r

    2024年02月11日
    浏览(32)
  • Python 爬虫之 urllib 包基本使用

    urllib 是一个 python 内置包,不需要额外安装即可使用,包里面包含了以下几个用来处理 url 的模块: urllib.request,用来打开和读取 url,意思就是可以用它来模拟发送请求,就像在浏览器里输入网址然后敲击回车一样,获取网页响应内容。 urllib.error,用来处理 urllib.request 引起

    2024年02月09日
    浏览(43)
  • Python爬虫技术系列-01请求响应获取-urllib库

    参考连接: https://zhuanlan.zhihu.com/p/412408291 1.1.1 urllib简介 Urllib是python内置的一个http请求库,不需要额外的安装。只需要关注请求的链接,参数,提供了强大的解析功能 Urllib库有四个模块:request,error, parse, robotparser request:发起请求(重要) error:处理错误 parse:解析RUL或

    2024年02月07日
    浏览(34)
  • python爬虫-------urllib代理和代理池(第十七天)

    🎈🎈作者主页: 喔的嘛呀🎈🎈 🎈🎈所属专栏:python爬虫学习🎈🎈 ✨✨谢谢大家捧场,祝屏幕前的小伙伴们每天都有好运相伴左右,一定要天天开心哦!✨✨  嗨嗨嗨,兄弟姐妹们。我是喔的嘛呀。今天的学习内容是:爬虫 urllib代理和代理池 目录 一、爬虫 urllib——代理

    2024年04月14日
    浏览(29)
  • Python爬虫 从小白到高手 各种最新案例! Urllib Xpath

    1.什么是互联网爬虫? 如果我们把互联网比作一张大的蜘蛛网,那一台计算机上的数据便是蜘蛛网上的一个猎物,而爬虫程序就是一只小蜘蛛,沿着蜘蛛网抓取自己想要的数据 解释1:通过一个程序,根据Url(淘宝)进行爬取网页,获取有用信息 解释2:使用程序模拟浏览器,去

    2024年02月10日
    浏览(30)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包