zoukankan      html  css  js  c++  java
  • python爬虫---urllib库的基本用法

    urllib是python自带的请求库,各种功能相比较之下也是比较完备的,urllib库包含了一下四个模块:

    urllib.request   请求模块

    urllib.error   异常处理模块

    urllib.parse   url解析模块

    urllib.robotparse    robots.txt解析模块

     

    下面是一些urllib库的使用方法。

    使用urllib.request

    import urllib.request
    
    response = urllib.request.urlopen('http://www.bnaidu.com')
    print(response.read().decode('utf-8'))

    使用read()方法打印网页的HTML,read出来的是字节流,需要decode一下

    import urllib.request
    
    response = urllib.request.urlopen('http://www.baidu.com')
    print(response.status) #打印状态码信息  其方法和response.getcode() 一样  都是打印当前response的状态码
    print(response.getheaders()) #打印出响应的头部信息,内容有服务器类型,时间、文本内容、连接状态等等
    print(response.getheader('Server'))  #这种拿到响应头的方式需要加上参数,指定你想要获取的头部中那一条数据
    print(response.geturl())  #获取响应的url  
    print(response.read())#使用read()方法得到响应体内容,这时是一个字节流bytes,看到明文还需要decode为charset格式

     

    为一个请求添加请求头,伪装为浏览器

    1.在请求时就加上请求头参数

    import urllib.request
    import urllib.parse
    
    url = 'http://httpbin.org/post'
    header = {}
    header['User-Agent'] = 'Mozilla/5.0 ' 
                              '(Macintosh; U; Intel Mac OS X 10_6_8; en-us) AppleWebKit/534.50 ' 
                              '(KHTML, like Gecko) Version/5.1 Safari/534.50'

    req = urllib.request.Request(url=url, headers=header)
    res = urllib.request.urlopen(req)

    Request是一个请求类,在构造时将headers以参数形式加入到请求中

    2.使用动态追加headers的方法

    若要使用动态追加的方法,必须实例化Request这个类

    import urllib.request
    import urllib.parse
    
    url = 'http://httpbin.org/post'
    
    req = urllib.request.Request(url=url)
    req.add_header('User-Agent','Mozilla/5.0 (Windows NT 6.1; WOW64; rv:53.0) Gecko/20100101 Firefox/53.0')
    res = urllib.request.urlopen(req)

     

    使用代理:

    ProxyHandler是urllib.request下的一个类,借助这个类可以构造代理请求

    参数为一个dict形式的,key对应着类型,IP,端口

    import urllib.request
    
    proxy_handler = urllib.request.ProxyHandler({
        'http':'112.35.29.53:8088',
        'https':'165.227.169.12:80'
    })
    opener = urllib.request.build_opener(proxy_handler)
    response = opener.open('http://www.baidu.com')
    print(response.read())

    urllib.parse的用法

    import urllib.request
    import urllib.parse
    
    url = 'http://httpbin.org/post'
    header = {}
    header['User-Agent'] = 'Mozilla/5.0 ' 
                              '(Macintosh; U; Intel Mac OS X 10_6_8; en-us) AppleWebKit/534.50 ' 
                              '(KHTML, like Gecko) Version/5.1 Safari/534.50'
            
    data = {}
    data['name'] = 'us'
    data = urllib.parse.urlencode(data).encode('utf-8')
    req = urllib.request.Request(url=url, data=data, headers=header, method='POST')
    response = urllib.request.urlopen(req)
    print(response.read().decode('utf-8'))
    print(type(data))

    urllib这个库很坑,建议直接弃用,上个月我用urllib写好的代码,现在运行起来各种问题

    所以使用requests库吧,超简洁的语法方法。

  • 相关阅读:
    在安装SqlServer2008时,有一项安装程序支持规则,为什么重新启动计算机那一项总是失败
    在 ServiceModel 客户端配置部分中,找不到引用协定“WebServiceTest.WebServiceSoap”的默认终结点元素。这可能是因为未找到应用程序的配置文件,或者是因为客户端元素
    IIS7上设置MIME让其支持android和Iphone的更新下载
    c# 常用正则
    数据库增容方法
    初识MAC(由window到mac的转变适应)
    无需控件直接导出xls(csv)
    2017中国屏幕分辨率统计---UI设计应注重的问题
    网页制作基础及HTML教学模块安排
    传统教学设计模板
  • 原文地址:https://www.cnblogs.com/mzc1997/p/7813786.html
Copyright © 2011-2022 走看看