当前位置:   article > 正文

python3实现url的分隔_python3 urlsplit

python3 urlsplit

URL简介
URL是Uniform Resource Locator的简写,统一资源定位符
一个url由以下几部分组成

scheme://host.port/path/?query-string=xxx&anchor
  • 1
  • scheme: 代表访问的协议,一般为http、ftp或https等
  • host: 代表主机号,域名,例如: www.baidu.com
  • port: 代表端口号,访问网站默认为80端口
  • path: 代表查找路径
  • query-string: 代表查询字符串
  • anchor: 锚点,一般前端用来做页面定位

代码演示使用ipython,关于ipython

URL切割

  1. urllib.parse.urlparse
In [1]: import urllib

In [2]: urllib.parse.urlparse("https://www.baidu.com/s?user=test")
Out[2]: ParseResult(scheme='https', netloc='www.baidu.com', path='/s', params='', query='user=test', fragment='')

In [3]: type(urllib.parse.urlparse("https://www.baidu.com/s?user=test"))
Out[3]: urllib.parse.ParseResult

In [4]: urllib.parse.urlparse("https://www.baidu.com/s?user=test").scheme
Out[4]: 'https'

In [5]: type(urllib.parse.urlparse("https://www.baidu.com/s?user=test").scheme)
Out[5]: str
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 正确使用
# 只有域名
In [16]: urllib.parse.urlparse("www.baidu.com")
Out[16]: ParseResult(scheme='', netloc='', path='www.baidu.com', params='', query='', fragment='')
  • 1
  • 2
  • 3
  • 错误使用
暂定
  • 1
  1. urllib.parse.urlsplit
In [1]: import urllib

In [2]: urllib.parse.urlsplit("https://www.baidu.com/s?user=test")
Out[2]: SplitResult(scheme='https', netloc='www.baidu.com', path='/s', query='user=test', fragment='')

In [13]: type(urllib.parse.urlsplit("https://www.baidu.com/s?user=test"))
Out[13]: urllib.parse.SplitResult

In [14]: urllib.parse.urlsplit("https://www.baidu.com/s?user=test").scheme
Out[14]: 'https'

In [15]: type(urllib.parse.urlsplit("https://www.baidu.com/s?user=test").scheme)
Out[15]: str
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 正确使用
# 只有域名
In [18]: urllib.parse.urlsplit("www.baidu.com")
Out[18]: SplitResult(scheme='', netloc='', path='www.baidu.com', query='', fragment='')
  • 1
  • 2
  • 3
  • 错误使用
暂定
  • 1
  1. 使用正则分隔符在字符串中提取url
正则表达式描述
匹配之前的项的1次或0次
[]匹配在[字符]之中的任意字符
\d相当[0-9]
{n}匹配之前的项n次
+匹配之前的项1次或多次
|指明两项之间的一个选择
\w包含大小写字母数字和下划线 相当于([0-9a-zA-Z])
.匹配除换行符 \n 之外的任何单字符。

用圆括号将所有选择项括起来,相邻的选择项之间用|分隔。但用圆括号会有一个副作用,使相关的匹配会被缓存,此时可用?:放在第一个选项前来消除这种副作用。其中 ?: 是非捕获元之一

In [19]: import re

In [20]: string = 'Runoob 的网页地址为:https://www.runoob.com,Google 的网页地址为:https://www.google.com'

In [21]: re.findall('https?://(?:[-\w.]|(?:%[\da-fA-F]{2}))+', string)
Out[21]: ['https://www.runoob.com', 'https://www.google.com']
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  1. 判断一个字符串是否是URL
  • 判断该url是否有IP地址返回
In [22]: import socket

In [23]: socket.gethostbyname("www.baidu.com")
Out[23]: '220.181.38.149'
  • 1
  • 2
  • 3
  • 4
  • 错误使用
In [24]: socket.gethostbyname("https://www.baidu.com")
---------------------------------------------------------------------------
gaierror                                  Traceback (most recent call last)
<ipython-input-24-da327ed90c22> in <module>
----> 1 socket.gethostbyname("https://www.baidu.com")

gaierror: [Errno 11001] getaddrinfo failed
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/Guff_9hys/article/detail/1019588
推荐阅读
相关标签
  

闽ICP备14008679号