美文网首页
爬虫学习:使用urllib库

爬虫学习:使用urllib库

作者: 老宋_1998 | 来源:发表于2018-10-20 09:50 被阅读0次

    urllib库

    是Python中一个最基本的网络请求库,可以模拟浏览器行为,向指定的服务器发送请求,接收数据。

    urlopen函数

    向服务器发送请求,并接收返回值。基本使用:

    from urllib import request
    resp = request.urlopen('http://www.baidu.com')
    print(resp.read().decode())
    

    urlopen函数常用参数:

    1. url: 请求的url
    2. data: 请求的data。urlopen默认使用get请求,如果传递了data参数,则变成post请求。
    3. 返回值:是一个http.client.HTTPResponse对象,该对象是一个类文件句柄对象,可以使用read(size)、readline、readlines以及getcode等方法。

    urlretrieve函数

    向服务器发送请求,接收返回的数据并保存到文件。常用于下载图片等文件。

    常用的有两个参数: 一个是url,是网页请求的地址;另一个是filename,是保存下载内容的文件路径和文件名。如果有需要,还可以象urlopen一样使用data参数。

    from urllib import request
    request.urlretrieve("http://www.baidu.com", "baidu.html")
    

    urlencode函数

    如果url中包含了中文或其它特殊字符,就必须进行编码。urlencode可以把字典数据转换为URL编码的数据。

    from urllib import request, parse
    
    base_url = 'http://www.baidu.com/s?'
    params = {'name':'张三','age':18,'greet':'hello world'}
    q_string = parse.urlencode(params)
    print(q_string)
    url = base_url + q_string
    

    输出结果:

    name=%E5%BC%A0%E4%B8%89&age=18&greet=hello+world

    parse_qs函数

    可以将经过编码后的url参数进行解码。

    from urllib import parse
    
    qs = "name=%E5%BC%A0%E4%B8%89&age=18&greet=hello+world"
    data = parse.parse_qs(qs)
    print(data)
    

    输出结果:

    {'name': ['张三'], 'age': ['18'], 'greet': ['hello world']}

    urlparse和urlsplit函数

    都是用来解析请求url的,urlparse的结果比urlsplit的结果多了一个params,path项的内容也不一样。

    from urllib import parse, request
    
    url = "http://www.baidu.com/s;hello?wd=python&username=abc#1"
    
    result1 = parse.urlparse(url)  # 多了个params参数
    print(result1)
    result2 = parse.urlsplit(url)
    print(result2)
    

    输出结果:

    ParseResult(scheme='http', netloc='www.baidu.com', path='/s', params='hello', query='wd=python&username=abc', fragment='1')

    SplitResult(scheme='http', netloc='www.baidu.com', path='/s;hello', query='wd=python&username=abc', fragment='1')

    request.Request类

    如果想要在请求的时候增加一些请求头,可以使用request.Request类来实现。比如要增加一个User-Agent,示例代码如下:

    from urllib import request
    
    url = 'https://www.lagou.com/'
    headers = {
        'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.132 Safari/537.36'
    }
    
    req = request.Request(url, headers=headers)
    resp = request.urlopen(req)
    print(resp.read().decode())
    

    ProxyHandler处理器(代理):

    1. 代理的原理:在请求目的网站之前,先请求代理服务器,由代理服务器去请求目的网站,拿到目的网站数据后,再转发给我们。
    2. http://httpbin.org: 这个网站可以方便的查看http请求的一些参数。
    3. 在代码中使用代理:
      • 使用urllib.request.ProxyHandler,传入一个代理,这个代理是一个字典,字典的key依赖于代理服务器能够接收的类型,一般是httphttps,值是ip:port
      • 使用上一步创建的handler,以及request.build_opener创建一个opener对象。
      • 使用上一步创建的opener,调用open函数,发起请求。

    示例代码如下:

    from urllib import request
    
    #网页地址
    url = 'http://httpbin.org/ip'
    
    #创建handler
    handler = request.ProxyHandler({'http':'223.241.78.43:8010'})
    
    #创建opener
    opener = request.build_opener(handler)
    
    #打开网页,返回网页内容
    resp = opener.open(url)
    
    #打印网页内容
    print(resp.read().decode())
    

    相关文章

      网友评论

          本文标题:爬虫学习:使用urllib库

          本文链接:https://www.haomeiwen.com/subject/aompzftx.html