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

Python爬蟲之urllib.parse詳解

系統 2095 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條評論
主站蜘蛛池模板: 伊人网伊人 | 欧美综合国产精品日韩一 | 天天操夜夜做 | 亚洲欧美日韩久久精品第一区 | 国产三级久久久精品三级 | 91热久久免费精品99 | 国产aaa免费视频国产 | 青青国产成人久久91网 | 国产亚洲精品久久精品6 | 最新狠狠色狠狠色综合 | 亚洲精品性夜夜夜 | 看日本真人一一级特黄毛片 | www.男人的天堂.com | 欧美日韩免费播放一区二区 | 成人网18免费网站在线 | 亚洲高清中文字幕综合网 | 国产极品福利视频在线观看 | 九九热网 | 偷拍肉窝窝视频在线播放 | 亚洲精品一区二区三区不卡 | 色综合久久久 | 欧美vs日韩vs国产在线观看 | 天天做天天爱天天操 | 欧美xxxxbbbb在线播放 | 国产精品第| 青青青青在线成人视99 | 特级一级毛片视频免费观看 | 成人爽视频 | 欧美兽皇另类 | 成人欧美一区二区三区在线 | 一级特级毛片 | 九九久久国产精品大片 | 久久久久久久综合色一本 | 国产一区二区三区不卡观 | 免费一级黄色毛片 | 亚洲精品高清国产一久久 | 欧美hdvideosex4k | 毛片在线观看视频 | 三级性生活视频 | 色女孩综合 | 亚洲黄色高清视频 |