日韩久久久精品,亚洲精品久久久久久久久久久,亚洲欧美一区二区三区国产精品 ,一区二区福利

Python爬蟲之urllib.parse詳解

系統(tǒng) 2015 0

Python爬蟲之urllib.parse

轉(zhuǎn)載地址

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

解析url

解析url(?urlparse()?)

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

            
              協(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),
            
              '
            
            
              個(gè)元素
            
            
              '
            
            
              )

            
            
              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
            
               個(gè)元素
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ù)也能對(duì) URL 進(jìn)行拆分,所不同的是, urlsplit() 并不會(huì)把 路徑參數(shù)(params) 從 路徑(path) 中分離出來(lái)。
當(dāng) URL 中路徑部分包含多個(gè)參數(shù)時(shí),使用 urlparse() 解析是有問(wèn)題的

這時(shí)可以使用 urlsplit() 來(lái)解析:

            
              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 沒(méi)有 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()接收一個(gè)列表的參數(shù),而且列表的長(zhǎng)度是有要求的,是必須六個(gè)參數(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()將兩個(gè)字符串拼接成url,

            
              from
            
             urllib.parse 
            
              import
            
            
               urljoin

            
            
              #
            
            
               連接兩個(gè)參數(shù)的url, 將第二個(gè)參數(shù)中缺的部分用第一個(gè)參數(shù)的補(bǔ)齊,如果第二個(gè)有完整的路徑,則以第二個(gè)為主
            
            
              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ù)可以將一個(gè) dict 轉(zhuǎn)換成合法的查詢參數(shù):

            
              from
            
             urllib.parse 
            
              import
            
            
               urlencode

query_args 
            
            =
            
               {
    
            
            
              '
            
            
              name
            
            
              '
            
            : 
            
              '
            
            
              dark sun
            
            
              '
            
            
              ,
    
            
            
              '
            
            
              country
            
            
              '
            
            : 
            
              '
            
            
              中國(guó)
            
            
              '
            
            
              
}

query_args 
            
            =
            
               urlencode(query_args)

            
            
              print
            
            (query_args)
          

結(jié)果為:

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

?

使用 parse_qs() 來(lái)將查詢參數(shù)解析成 dict。

            
              from
            
             urllib.parse 
            
              import
            
            
               urlencode

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

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
            
            
              '
            
            : [
            
              '
            
            
              中國(guó)
            
            
              '
            
            ]}
          

?

quote()與unquote()

quoteI()對(duì)特殊字符進(jìn)行轉(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號(hào)聯(lián)系: 360901061

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

【本文對(duì)您有幫助就好】

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

發(fā)表我的評(píng)論
最新評(píng)論 總共0條評(píng)論
主站蜘蛛池模板: 鄂伦春自治旗| 克东县| 咸宁市| 美姑县| 建平县| 黎川县| 洪雅县| 荔波县| 綦江县| 武宣县| 丹阳市| 固原市| 安岳县| 五莲县| 运城市| 英德市| 汝州市| 固原市| 依兰县| 万宁市| 长阳| 青浦区| 格尔木市| 孟州市| 靖安县| 白水县| 时尚| 徐州市| 邮箱| 巴里| 金湖县| 石狮市| 鹤庆县| 尉犁县| 迁安市| 京山县| 固始县| 广平县| 什邡市| 都昌县| 敖汉旗|