python urllib.parse

  • urlparse

    from urllib.parse import urlparse, urlunparse
    
    result = urlparse('http://www.baidu.com/index.html;user?id=5#comment')
    print(result)
    
    ParseResult(scheme='http', netloc='www.baidu.com', path='/index.html', params='user', query='id=5', fragment='comment')
    # 其中schema是协议,netloc是域名服务器,path是相对路径,params是参数,query是查询条件,fragment锚点
    
    # 相对应的将参数合并成完整url的方法为urlunparse(),共6个参数
    
  • urlsplit

    from urllib.parse import urlsplit,urlunsplit
    
    result = urlsplit('http://www.baidu.com/index.html;user?id=5#comment')
    print(result)
    
    SplitResult(scheme='http', netloc='www.baidu.com', path='/index.html;user', query='id=5', fragment='comment')
    # 与urlparse类似,但是没有params返回值,合并在path里面
    
    # 对应的方法为urlunsplit(),共5个参数
    

    注:urlparse和urlsplit都有一个allow_fragments参数,默认为True;若设置为False,它会被解析为path,parameters或者query的一部分,而fragment部分为空

  • urlencode

    from urllib.parse import urlencode
    
    params = {  
        'name' : 'germey',  
        'age' : 22  
    }  
    base_url = 'http://www.baidu.com?'  
    url = base_url + urlencode(params)  
    print(url) 
    
    http://www.baidu.com?name=germey&age=22
    

    一般当某个post请求的"Content-Type"为"application/x-www-form-urlencoded"时,需要对post_data进行urlencode(urlencode(post_data))

  • quote & unquote

    # 该方法可以将内容转变成url编码的格式
    # 多数情况用于对中文字符进行编码
    from urllib.parse import quote  
      
    keyword = '壁纸'  
    url = 'http://www.baidu.coms?wd='+quote(keyword)  
    print(url)  
    
    http://www.baidu.coms?wd=%E5%A3%81%E7%BA%B8
        
    # 相对应的unquote可以进行url解码
    print(unquote(url))
    
    http://www.baidu.coms?wd=壁纸
    

    quote方法有个参数encoding,不同的encoding值,获取的url编码有一些不同

  • unicode

    有一些字符串的形式包含大量’\u’字符如(“2019\u5e74\u5e74\u62a5\u8868”),可以这样来转换成中文

    # 前面的r很重要,将反斜杠的转义功能去除掉(或者使用双反斜杠)
    text = r'2019\u5e74\u5e74\u62a5\u8868'
    print(text.encode().decode('unicode_escape'))
    
    '2019年年报表'
    
  • requests.post()

    在通过requests.post()进行POST请求时,传入报文的参数有两个,一个是data,一个是json。
    data与json既可以是str类型,也可以是dict类型。
    区别:

  1. 不管jsonstr还是dict,如果不指定headers中的content-type,默认为application/json
  2. datadict时,如果不指定content-type,默认为application/x-www-form-urlencoded,相当于普通form表单提交的形式
  3. datastr时,如果不指定content-type,默认为application/json
  4. 用data参数提交数据时,request.body的内容则为a=1&b=2的这种形式,用json参数提交数据时,request.body的内容则为’{"a": 1, "b": 2}'的这种形式

在Chrome浏览器中,查看post请求下面的Form Data时,选择view soure可以看到post的数据的形式,若为a=1&b=2的形式,一般使用data参数;若为{“a”: 1, “b”: 2}的形式,一般使用json参数。

你可能感兴趣的:(python爬虫)