亚洲免费在线-亚洲免费在线播放-亚洲免费在线观看-亚洲免费在线观看视频-亚洲免费在线看-亚洲免费在线视频

Python爬蟲之urllib.parse詳解

系統 1878 0

Python爬蟲之urllib.parse

轉載地址

Python 中的 urllib.parse 模塊提供了很多解析和組建 URL 的函數。

解析url

解析url(?urlparse()?)

urlparse() 函數可以將 URL 解析成 ParseResult 對象。對象中包含了六個元素,分別為:

            
              協議(scheme) 
域名(netloc) 
路徑(path) 
路徑參數(
            
            
              params
            
            
              ) 
查詢參數(query) 
片段(fragment)
            
          

?

            
              from
            
             urllib.parse 
            
              import
            
            
               urlparse

url
            
            =
            
              '
            
            
              https://blog.csdn.net/xc_zhou/article/details/80907101
            
            
              '
            
            
              

parsed_result
            
            =
            
              urlparse(url)


            
            
              print
            
            (
            
              '
            
            
              parsed_result 包含了
            
            
              '
            
            ,len(parsed_result),
            
              '
            
            
              個元素
            
            
              '
            
            
              )

            
            
              print
            
            
              (parsed_result)


            
            
              print
            
            (
            
              '
            
            
              scheme  :
            
            
              '
            
            
              , parsed_result.scheme)

            
            
              print
            
            (
            
              '
            
            
              netloc  :
            
            
              '
            
            
              , parsed_result.netloc)

            
            
              print
            
            (
            
              '
            
            
              path    :
            
            
              '
            
            
              , parsed_result.path)

            
            
              print
            
            (
            
              '
            
            
              params  :
            
            
              '
            
            
              , parsed_result.params)

            
            
              print
            
            (
            
              '
            
            
              query   :
            
            
              '
            
            
              , parsed_result.query)

            
            
              print
            
            (
            
              '
            
            
              fragment:
            
            
              '
            
            
              , parsed_result.fragment)

            
            
              print
            
            (
            
              '
            
            
              username:
            
            
              '
            
            
              , parsed_result.username)

            
            
              print
            
            (
            
              '
            
            
              password:
            
            
              '
            
            
              , parsed_result.password)

            
            
              print
            
            (
            
              '
            
            
              hostname:
            
            
              '
            
            
              , parsed_result.hostname)

            
            
              print
            
            (
            
              '
            
            
              port    :
            
            
              '
            
            , parsed_result.port)
          

結果為:

            parsed_result 包含了 6
            
               個元素
ParseResult(scheme
            
            =
            
              '
            
            
              http
            
            
              '
            
            , netloc=
            
              '
            
            
              user:pwd@domain:80
            
            
              '
            
            , path=
            
              '
            
            
              /path
            
            
              '
            
            , params=
            
              '
            
            
              params
            
            
              '
            
            , query=
            
              '
            
            
              query=queryarg
            
            
              '
            
            , fragment=
            
              '
            
            
              fragment
            
            
              '
            
            
              )
scheme  : http
netloc  : user:pwd@domain:
            
            80
            
              
path    : 
            
            /
            
              path
params  : params
query   : query
            
            =
            
              queryarg
fragment: fragment
username: user
password: pwd
hostname: domain
port    : 
            
            80
          

?

?

解析url( urlsplit()?)

?urlsplit() 函數也能對 URL 進行拆分,所不同的是, urlsplit() 并不會把 路徑參數(params) 從 路徑(path) 中分離出來。
當 URL 中路徑部分包含多個參數時,使用 urlparse() 解析是有問題的

這時可以使用 urlsplit() 來解析:

            
              from
            
             urllib.parse 
            
              import
            
            
               urlsplit
url
            
            =
            
              '
            
            
              http://user:pwd@domain:80/path1;params1/path2;params2?query=queryarg#fragment
            
            
              '
            
            
              

split_result
            
            =
            
              urlsplit(url)


            
            
              print
            
            
              (split_result)

            
            
              print
            
            (
            
              '
            
            
              split.path    :
            
            
              '
            
            
              , split_result.path)

            
            
              #
            
            
               SplitResult 沒有 params 屬性
            
          

結果為:

            SplitResult(scheme=
            
              '
            
            
              http
            
            
              '
            
            , netloc=
            
              '
            
            
              user:pwd@domain:80
            
            
              '
            
            , path=
            
              '
            
            
              /path1;params1/path2;params2
            
            
              '
            
            , query=
            
              '
            
            
              query=queryarg
            
            
              '
            
            , fragment=
            
              '
            
            
              fragment
            
            
              '
            
            
              )
split.path    : 
            
            /path1;params1/path2;params2
          

?

解析url(urldefrag())

            
              from
            
             urllib.parse 
            
              import
            
            
               urldefrag

url 
            
            = 
            
              '
            
            
              http://user:pwd@domain:80/path1;params1/path2;params2?query=queryarg#fragment
            
            
              '
            
            
              

d 
            
            =
            
               urldefrag(url)

            
            
              print
            
            
              (d)

            
            
              print
            
            (
            
              '
            
            
              url     :
            
            
              '
            
            
              , d.url)

            
            
              print
            
            (
            
              '
            
            
              fragment:
            
            
              '
            
            , d.fragment)
          

結果為:

            DefragResult(url=
            
              '
            
            
              http://user:pwd@domain:80/path1;params1/path2;params2?query=queryarg
            
            
              '
            
            , fragment=
            
              '
            
            
              fragment
            
            
              '
            
            
              )
url     : http:
            
            //user:pwd@domain:80/path1;params1/path2;params2?query=
            
              queryarg
fragment: fragment
            
          

?

?

組建URL

組建url(urlunparse())

urlunparse()接收一個列表的參數,而且列表的長度是有要求的,是必須六個參數以上,否則拋出異常。

            
              from
            
             urllib.parse 
            
              import
            
            
               urlunparse
url_compos 
            
            = (
            
              '
            
            
              http
            
            
              '
            
            , 
            
              '
            
            
              user:pwd@domain:80
            
            
              '
            
            , 
            
              '
            
            
              /path1;params1/path2
            
            
              '
            
            , 
            
              '
            
            
              params2
            
            
              '
            
            , 
            
              '
            
            
              query=queryarg
            
            
              '
            
            , 
            
              '
            
            
              fragment
            
            
              '
            
            
              )

            
            
              print
            
            (urlunparse(url_compos))
          

結果為:

            http://user:pwd@domain:80/path1;params1/path2;params2?query=queryarg
            
              #
            
            
              fragment
            
          

?

?

組建url(urljoin())

urljoin()將兩個字符串拼接成url,

            
              from
            
             urllib.parse 
            
              import
            
            
               urljoin

            
            
              #
            
            
               連接兩個參數的url, 將第二個參數中缺的部分用第一個參數的補齊,如果第二個有完整的路徑,則以第二個為主
            
            
              print
            
            (urljoin(
            
              '
            
            
              https://movie.douban.com/
            
            
              '
            
            , 
            
              '
            
            
              index
            
            
              '
            
            
              ))

            
            
              print
            
            (urljoin(
            
              '
            
            
              https://movie.douban.com/
            
            
              '
            
            , 
            
              '
            
            
              https://accounts.douban.com/login
            
            
              '
            
            ))
          

結果為:

            https://movie.douban.com/
            
              index
https:
            
            //accounts.douban.com/login
          

?

?

查詢參數的構造與解析

?

使用 urlencode() 函數可以將一個 dict 轉換成合法的查詢參數:

            
              from
            
             urllib.parse 
            
              import
            
            
               urlencode

query_args 
            
            =
            
               {
    
            
            
              '
            
            
              name
            
            
              '
            
            : 
            
              '
            
            
              dark sun
            
            
              '
            
            
              ,
    
            
            
              '
            
            
              country
            
            
              '
            
            : 
            
              '
            
            
              中國
            
            
              '
            
            
              
}

query_args 
            
            =
            
               urlencode(query_args)

            
            
              print
            
            (query_args)
          

結果為:

            name=dark+sun&country=%E4%B8%AD%E5%9B%BD
          

?

使用 parse_qs() 來將查詢參數解析成 dict。

            
              from
            
             urllib.parse 
            
              import
            
            
               urlencode

            
            
              from
            
             urllib.parse 
            
              import
            
            
               parse_qs
query_args 
            
            =
            
               {
    
            
            
              '
            
            
              name
            
            
              '
            
            : 
            
              '
            
            
              dark sun
            
            
              '
            
            
              ,
    
            
            
              '
            
            
              country
            
            
              '
            
            : 
            
              '
            
            
              中國
            
            
              '
            
            
              
}

query_args 
            
            =
            
               urlencode(query_args)

            
            
              print
            
            
              (query_args)

            
            
              print
            
            (parse_qs(query_args))
          

結果為:

            name=dark+sun&country=%E4%B8%AD%E5%9B%
            
              BD
{
            
            
              '
            
            
              name
            
            
              '
            
            : [
            
              '
            
            
              dark sun
            
            
              '
            
            ], 
            
              '
            
            
              country
            
            
              '
            
            : [
            
              '
            
            
              中國
            
            
              '
            
            ]}
          

?

quote()與unquote()

quoteI()對特殊字符進行轉義unquote()則相反。

            
              from
            
             urllib.parse 
            
              import
            
            
               quote

            
            
              from
            
             urllib.parse 
            
              import
            
            
               unquote
test1 
            
            = quote(
            
              '
            
            
              中文
            
            
              '
            
            
              )

            
            
              print
            
            
              (test1)
test2 
            
            =
            
               unquote(test1)

            
            
              print
            
            (test2)
          

結果為:

            %E4%B8%AD%E6%96%87
            
              
中文
            
          

?


更多文章、技術交流、商務合作、聯系博主

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號聯系: 360901061

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。

【本文對您有幫助就好】

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描上面二維碼支持博主2元、5元、10元、自定義金額等您想捐的金額吧,站長會非常 感謝您的哦!!!

發表我的評論
最新評論 總共0條評論
主站蜘蛛池模板: 亚洲特级片 | 4hu四虎永久网址 | 又黄又爽又成人免费视频 | 久九精品 | 欧日韩不卡在线视频 | 手机看片高清日韩精品 | 手机看片国产免费 | 中文字幕视频在线 | 在线日本中文字幕 | 色综合久久婷婷天天 | 天天射日 | 天天干精品| 国产成人在线视频观看 | 日韩欧美手机在线 | 丁香六月色婷婷 | 一级毛片aaa片免费观看 | 国产亚洲精品九九久在线观看 | 国产精品社区在线观看 | 欧美亚洲国产精品久久久久 | 亚洲精品久久久中文字幕 | 91亚洲精品久久91综合 | 日韩视频观看 | 精品煌色视频网站在线观看 | 91成人国产 | 福利在线观看 | 成 人 黄 色 视频 免费观看 | 久久天天躁狠狠躁狠狠躁 | 伊人999| 国内精品免费一区二区三区 | 一级毛片a免费播放王色 | 亚洲一一在线 | a在线观看免费 | 99精品视频看国产啪视频 | 香蕉综合网 | 国产精品午夜激爽毛片 | 国产成人18黄禁网站免费观看 | 久久桃花 | 久久噜噜久久久精品66 | 国产农村精品一级毛片视频 | 一级做人免费观看c欧美网站 | 视频在线观看入口一二三2021 |