返回顶部
首页 > 资讯 > 后端开发 > Python >Python爬虫中urllib库怎么用
  • 663
分享到

Python爬虫中urllib库怎么用

2023-06-29 03:06:18 663人浏览 安东尼

Python 官方文档:入门教程 => 点击学习

摘要

这篇文章给大家分享的是有关python爬虫中urllib库怎么用的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。一、说明:urllib库是python内置的一个Http请求库,requests库就是基于该库开发出来

这篇文章给大家分享的是有关python爬虫中urllib库怎么用的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。

    一、说明:

    urllib库是python内置的一个Http请求库,requests库就是基于该库开发出来的,虽然requests库使用更方便,但作为最最基本的请求库,了解一下原理和用法还是很有必要的。

    二、urllib四个模块组成:

    urllib.request  
    请求模块(就像在浏览器输入网址,敲回车一样)

    urllib.error   
    异常处理模块(出现请求错误,可以捕捉这些异常)

    urllib.parse  
    url解析模块

    urllib.robotparser
    robots.txt解析模块,判断哪个网站可以爬,哪个不可以爬,用的比较少

    在python2与python3中有所不同

    Python2中:

    import urllib2response = urllib2.urlopen('http://www.baidu.com')

    python3中:

    import  urllib.requestresponse = urllib.request.urlopen('http://www.baidu.com')

    三、urllib.request

    1、urlopen函数

    urllib.request.urlopen(url, data=None, timeout=Socket._GLOBAL_DEFAULT_TIMEOUT,*, cafile=None, capath=None, cadefault=False, context=None)

    url参数

    from urllib import requestresponse = request.urlopen('http://www.baidu.com')print(response.read().decode('utf-8'))

    data参数

    没有data参数时,发送的是一个get请求,加上data参数后,请求就变成了post方式(利用’http://httpbin.org测试网址)

    import urllib.requestimport urllib.parsedata1= bytes(urllib.parse.urlencode({'Word':'hello'}),encoding='utf-8')response = urllib.request.urlopen('http://httpbin.org/post',data = data1)print(response.read())

    data参数需要bytes类型,所以需要使用bytes()函数进行编码,而bytes函数的第一个参数需要时str类型,所以使用urllib.parse.urlencode将字典转化为字符串

    timeout参数

    设置一个超时的时间,如果在这个时间内没有响应,便会抛出异常

    import urllib.requesttry:    response = urllib.request.urlopen('http://www.baidu.com', timeout=0.001)    print(response.read())except:    print('error') 

    将超时时间设置为0.001秒,在这个时间内,没有响应,输出error

    2、response 响应类型

    import urllibfrom urllib import request response = urllib.request.urlopen('http://www.baidu.com')print(type(response))

    状态码与响应头

    import urllibfrom urllib import requestresponse = urllib.request.urlopen('http://www.baidu.com')print(response.status)print(response.getheaders())print(response.getheader('Server'))

    read方法

    import urllib.requestresponse = urllib.request.urlopen('http://www.baidu.com')print(type(response.read()))print(response.read().decode('utf-8'))

    response.read()返回的是bytes形式的数据,所以需要用decode(‘utf-8’)进行解码。

    3、Request对象 

    如果我们需要发送复杂的请求,在urllib库中就需要使用一个Request对象

    import urllib.request #直接声明一个Request对象,并把url当作参数直接传递进来request = urllib.request.Request('http://www.baidu.com')response = urllib.request.urlopen(request)print(response.read().decode('utf-8'))

    声明了一个Request对象,把url当作参数传递给这个对象,然后把这个对昂作为urlopen函数的参数

    更复杂的请求,加headers

    #利用Request对象实现一个post请求

    import urllib.requesturl = 'http://httpbin.org/post'headers = {    'User-Agent': 'Mozilla/5.0 (windows NT 6.1; WOW64) AppleWEBKit/537.36 (Khtml, like Gecko) Chrome/86.0.4240.198 Safari/537.36'}data = {'word':'hello'}data = bytes(str(data),encoding='utf-8')req = urllib.request.Request(url = url,data = data,headers = headers,method = 'POST')response = urllib.request.urlopen(req)print(response.read().decode('utf-8'))

    上面的这个请求包含了请求方式、url,请求头,请求体,逻辑清晰。

    Request对象还有一个add_header方法,这样也可以添加多个键值对的header

    4、高级请求方式

    设置代理

    很多网站会检测某一段时间某个IP的访问次数(通过流量统计,系统日志等),如果访问次数多的不像正常人,它会禁止这个IP的访问。ProxyHandler(设置代理的handler),可以变换自己的IP地址。

    from urllib import request # 导入request模块 url = 'http://httpbin.org' # url地址handler = request.ProxyHandler({'http': '122.193.244.243:9999'}) # 使用request模块ProxyHandler类创建代理#handler = request.ProxyHandler({"http":"账号:密码@'122.193.244.243:9999'"})#付费代理模式 opener = request.build_opener(handler) # 用handler创建openerresp = opener.open(url) # 使用opener.open()发送请求print(resp.read()) # 打印返回结果

    cookie

    import urllib.requestimport urllib.parseurl = 'https://weibo.cn/5273088553/info'# 正常的方式进行访问# headers = {#     'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.84 Safari/537.36'# }#携带cookie进行访问headers = {    'GET https': '//weibo.cn/5273088553/info HTTP/1.1',    'Host': ' weibo.cn',    'Connection': ' keep-alive',    'Upgrade-Insecure-Requests': ' 1',    'User-Agent': ' Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.84 Safari/537.36',    'Accept': ' text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8',    # 'Referer: https':'//weibo.cn/',    'Accept-Language': ' zh-CN,zh;q=0.9',    'Cookie': ' _T_WM=c1913301844388de10cba9d0bb7bbf1e; SUB=_2A253Wy_dDeRhGeNM7FER-CbJzj-IHXVUp7GVrDV6PUJbkdANLXPdkW1NSesPJZ6v1GA5MyW2HEUb9ytQW3NYy19U; SUHB=0bt8SpepeGz439; SCF=Aua-HpSw5-z78-02NmUv8CTwXZCMN4XJ91qYSHkDXH4W9W0fCBpEI6Hy5E6vObeDQtXtfqobcD2D32r0O_5jsRk.; SSOLoginState=1516199821',}request = urllib.request.Request(url=url, headers=headers)response = urllib.request.urlopen(request)# 输出所有# print(response.read().decode('gbk'))# 将内容写入文件中with open('weibo.html', 'wb') as fp:    fp.write(response.read())

    四、urllib.error

    可以捕获三种异常:URLError,HTTPError(是URLError类的一个子类),ContentTooShortError

    URLError只有一个reason属性

    HTTPError有三个属性:code,reason,headers

    import urllib.requestfrom urllib import errortry:    response = urllib.request.urlopen('http://123.com')except error.URLError as e:    print(e.reason)
    import urllibfrom urllib import requestfrom urllib import error#先捕捉http异常,再捕捉url异常try:    response = urllib.request.urlopen('http://123.com')except error.HTTPError as e:    print(e.reason, e.code, e.headers)except error.URLError as e:    print(e.reason)else:    print('RequestSucess!')

    五、URL解析urllib.parse

    urlparse函数

    该函数是对传入的url进行分割,分割成几部分,并对每部分进行赋值

    import urllibfrom urllib import parseresult = urllib.parse.urlparse('http://www,baidu.com/index.html;user?id=5#comment')print(type(result))print(result)

    结果方便的拆分了url

    <class 'urllib.parse.ParseResult'>ParseResult(scheme='http', netloc='www,baidu.com', path='/index.html', params='user', query='id=5', fragment='comment')Process finished with exit code 0

    从输出结果可以看出,这几部分包括:协议类型、域名、路径、参数、query、fragment

    urlparse有几个参数:url,scheme,allow_fragments

    在使用urlparse时,可以通过参数scheme = 'http&rsquo;的方式来指定默认的协议类型,如果url有协议类型,scheme参数就不会生效了

    urlunparse函数

    与urlparse函数作用相反,是对url进行拼接的 

    Python爬虫中urllib库怎么用

    urljoin函数

    用来拼接url

    Python爬虫中urllib库怎么用

    urlencode函数

    可以把一个字典转化为get请求参数

    Python爬虫中urllib库怎么用

    感谢各位的阅读!关于“Python爬虫中urllib库怎么用”这篇文章就分享到这里了,希望以上内容可以对大家有一定的帮助,让大家可以学到更多知识,如果觉得文章不错,可以把它分享出去让更多的人看到吧!

    --结束END--

    本文标题: Python爬虫中urllib库怎么用

    本文链接: https://lsjlt.com/news/322130.html(转载时请注明来源链接)

    有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

    猜你喜欢
    • Python爬虫中urllib库怎么用
      这篇文章给大家分享的是有关Python爬虫中urllib库怎么用的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。一、说明:urllib库是python内置的一个http请求库,requests库就是基于该库开发出来...
      99+
      2023-06-29
    • Python爬虫之urllib库详解
      目录一、说明:二、urllib四个模块组成:三、urllib.request1、urlopen函数2、response 响应类型3、Request对象 4、高级请求方式四、urlli...
      99+
      2024-04-02
    • Python爬虫技术栈 | urllib库&&urllib3库
      ❤️urllib库详解❤️ 每篇前言: 第一部分:urllib库 一、request模块:发送请求 1.urlopen() ...
      99+
      2023-09-10
      python 爬虫 urllib库urllib3库
    • Python爬虫之Urllib库的基本使
      # get请求 import urllib.request response = urllib.request.urlopen("http://www.baidu.com") print(response.read().decode('...
      99+
      2023-01-30
      爬虫 Python Urllib
    • Python爬虫进阶之如何使用urllib库
      这篇文章主要介绍了Python爬虫进阶之如何使用urllib库,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。python的数据类型有哪些python的数据类型:1. 数字类型...
      99+
      2023-06-14
    • Python爬虫库urllib的使用教程详解
      目录Python urllib库urllib.request模块urlopen函数Request 类urllib.error模块URLError 示例HTTPError示例...
      99+
      2022-11-21
      Python爬虫库urllib使用 Python urllib使用 Python urllib
    • Python 爬虫 urllib模块:p
      本程序以爬取 'http://httpbin.org/post' 为例格式:  导入urllib.request  导入urllib.parse  数据编码处理,再设为utf-8编码:  bytes(urllib.parse.urlenco...
      99+
      2023-01-31
      爬虫 模块 Python
    • python爬虫实例(urllib&Be
      python 2.7.6urllib:发送报文并得到responseBeautifulSoup:解析报文的body(html)#encoding=UTF-8 from bs4 import BeautifulSoup from urllib...
      99+
      2023-01-31
      爬虫 实例 python
    • 关于python爬虫应用urllib库作用分析
      目录一、urllib库是什么?二、urllib库的使用urllib.request模块urllib.parse模块利用try-except,进行超时处理status状态码 &...
      99+
      2024-04-02
    • python爬虫urllib库中parse模块urlparse的使用方法
      这篇文章主要介绍了python爬虫urllib库中parse模块urlparse的使用方法,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。在python爬虫urllib库中,u...
      99+
      2023-06-14
    • python爬虫中requests库怎么用
      小编给大家分享一下python爬虫中requests库怎么用,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!python爬虫—requests库的用法request...
      99+
      2023-06-25
    • Python爬虫中urllib3与urllib的区别是什么
      目录urllib库urllib.request模块Request对象1 . 请求头添加2. 操作cookie3. 设置代理urllib.parse模块urllib.error模块urllib.robotparse模块...
      99+
      2022-06-02
      Python urllib3 urllib Python urllib3
    • python爬虫urllib中的异常模块处理
      目录urllib中的异常处理url的组成部分URLErrorHTTPError简介Urllib.error 模块异常处理urllib中的异常处理 在我们写爬虫程序时,若出现url中的...
      99+
      2024-04-02
    • Python 爬虫库RoboBrowser怎么用
      这篇文章主要介绍“Python 爬虫库RoboBrowser怎么用”,在日常操作中,相信很多人在Python 爬虫库RoboBrowser怎么用问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”Python 爬虫...
      99+
      2023-06-13
    • Python中urllib+urllib2+cookielib模块编写爬虫实战
      超文本传输协议http构成了万维网的基础,它利用URI(统一资源标识符)来识别Internet上的数据,而指定文档地址的URI被称为URL(既统一资源定位符),常见的URL指向文件、目录或者执行复杂任务的对...
      99+
      2022-06-04
      爬虫 实战 模块
    • Python爬虫urllib和requests的区别详解
      我们讲了requests的用法以及利用requests简单爬取、保存网页的方法,这节课我们主要讲urllib和requests的区别。 1、获取网页数据 第一步,引入模块。 两者引入...
      99+
      2024-04-02
    • python爬虫怎么使用BeautifulSoup库
      本篇内容介绍了“python爬虫怎么使用BeautifulSoup库”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!  BeautiSoup类...
      99+
      2023-06-02
    • 爬虫笔记1:Python爬虫常用库
      请求库:1、urllib:urllib库是Python3自带的库(Python2有urllib和urllib2,到了Python3统一为urllib),这个库是爬虫里最简单的库。2、requests:requests属于第三方库,使用起来...
      99+
      2023-01-31
      爬虫 常用 笔记
    • python爬虫urllib中的异常模块如何处理
      这篇文章主要介绍“python爬虫urllib中的异常模块如何处理”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“python爬虫urllib中的异常模块如何处理”文章能帮助大家解决问题。urllib...
      99+
      2023-06-30
    • python爬虫之请求模块urllib的基本使用
      目录前言urllib的子模块HttpResponse常用方法与属性获取信息urlli.parse的使用(一般用于处理带中文的url)✅爬取baidu官网HTML源代码✅添加请求头信息...
      99+
      2024-04-02
    软考高级职称资格查询
    编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
    • 官方手机版

    • 微信公众号

    • 商务合作