黄色网页视频 I 影音先锋日日狠狠久久 I 秋霞午夜毛片 I 秋霞一二三区 I 国产成人片无码视频 I 国产 精品 自在自线 I av免费观看网站 I 日本精品久久久久中文字幕5 I 91看视频 I 看全色黄大色黄女片18 I 精品不卡一区 I 亚洲最新精品 I 欧美 激情 在线 I 人妻少妇精品久久 I 国产99视频精品免费专区 I 欧美影院 I 欧美精品在欧美一区二区少妇 I av大片网站 I 国产精品黄色片 I 888久久 I 狠狠干最新 I 看看黄色一级片 I 黄色精品久久 I 三级av在线 I 69色综合 I 国产日韩欧美91 I 亚洲精品偷拍 I 激情小说亚洲图片 I 久久国产视频精品 I 国产综合精品一区二区三区 I 色婷婷国产 I 最新成人av在线 I 国产私拍精品 I 日韩成人影音 I 日日夜夜天天综合

Python爬蟲之urllib.parse詳解

系統(tǒng) 2249 0

Python爬蟲之urllib.parse

轉(zhuǎn)載地址

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

解析url

解析url(?urlparse()?)

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

            
              協(xié)議(scheme) 
域名(netloc) 
路徑(path) 
路徑參數(shù)(
            
            
              params
            
            
              ) 
查詢參數(shù)(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)
          

結(jié)果為:

            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() 函數(shù)也能對 URL 進行拆分,所不同的是, urlsplit() 并不會把 路徑參數(shù)(params) 從 路徑(path) 中分離出來。
當 URL 中路徑部分包含多個參數(shù)時,使用 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 屬性
            
          

結(jié)果為:

            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)
          

結(jié)果為:

            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()接收一個列表的參數(shù),而且列表的長度是有要求的,是必須六個參數(shù)以上,否則拋出異常。

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

            
            
              print
            
            (urlunparse(url_compos))
          

結(jié)果為:

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

?

?

組建url(urljoin())

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

            
              from
            
             urllib.parse 
            
              import
            
            
               urljoin

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

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

結(jié)果為:

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

?

?

查詢參數(shù)的構(gòu)造與解析

?

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

            
              from
            
             urllib.parse 
            
              import
            
            
               urlencode

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

query_args 
            
            =
            
               urlencode(query_args)

            
            
              print
            
            (query_args)
          

結(jié)果為:

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

?

使用 parse_qs() 來將查詢參數(shù)解析成 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))
          

結(jié)果為:

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

?

quote()與unquote()

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

            
              from
            
             urllib.parse 
            
              import
            
            
               quote

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

            
            
              print
            
            
              (test1)
test2 
            
            =
            
               unquote(test1)

            
            
              print
            
            (test2)
          

結(jié)果為:

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

?


更多文章、技術(shù)交流、商務(wù)合作、聯(lián)系博主

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號聯(lián)系: 360901061

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

【本文對您有幫助就好】

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

發(fā)表我的評論
最新評論 總共0條評論