美文网首页
爬虫请求模块

爬虫请求模块

作者: 遇明不散 | 来源:发表于2019-06-10 14:45 被阅读0次

    爬虫请求模块

    版本
    • python2:urllib2、urllib
    常用方法
    向网站发起一个请求并获取响应
    # 向网站发起一个请求并获取响应
    urllib.request.urlopen("网址")
    
    # 示例:获取百度的网页源代码
    response = urllib.request.urlopen('http://www.baidu.com/')
    # 字节流
    html = response.read()
    # 字符串 
    html = response.read().decode("utf-8")
    print(html)
    
    重构User-Agent
    # User-Agent是爬虫和反爬虫斗争的第一步,发送请求必须带User-Agent
    urllib.request.Request("网址",headers="字典")
    
    • 利用Request()方法构建请求对象
    • 利用urlopen()方法获取响应对象
    • 利用响应对象的read().decode("utf-8")获取内容
    import urllib.request
    url = "http://www.baidu.com/"
    headers = {"User-Agent":"Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.131 Safari/537.36"}
    # 创建请求对象
    req = urllib.request.Request(url,headers=headers)
    # 获取响应对象
    res = urllib.request.urlopen(req)
    # 响应对象read()
    html = res.read().decode('utf-8')
    print(html)
    
    响应对象方法
    # 读取服务器响应的内容
    read()
    # 返回HTTP的响应码
    getcode()
    # 返回实际数据的URL(防止重定向问题)
    geturl()
    
    urllib.parse模块
    # 给字典进行编码
    urllib.parse.urlencode(字典)
    # 给字符串进行编码
    urllib.parse.quote(字符串)
    
    示例
    import urllib.request
    import urllib.parse
    
    baseurl = "http://www.baidu.com/s?wd="
    key = input("请输入要搜索的内容:")
    
    # 对关键字进行urlencode()编码
    # wd = {"wd":key}
    # key = urllib.parse.urlencode(wd)
    
    # 用quote()编码
    key = urllib.parse.quote(key)
    
    # 拼接地址
    url = baseurl + key
    headers = {"User-Agent":"Mozilla/5.0"}
    
    # 创建请求对象
    req = urllib.request.Request(url,headers=headers)
    # 获取响应对象
    res = urllib.request.urlopen(req)
    html = res.read().decode('utf-8')
    
    # 将结果保存到本地
    with open("result1.html","w",encoding="utf-8") as f:
        f.write(html)
    
    urllib.request中Handler处理器

    自定义的urlopen()方法,urlopen()方法是一个特殊的opener(模块已定义好),不支持代理等功能,通过Handler处理器对象来自定义opener对象

    # 创建opener对象
    build_opener(Handler处理器对象)
    
    opener.open(url,参数)
    
    Handler处理器分类
    # 没有任何特殊功能
    HTTPHandler()
    # 普通代理
    ProxyHandler(普通代理) # {"协议":"IP地址:端口号"}
    # 私密代理
    ProxyBasicAuthHandler(密码管理器对象)
    # web客户端认证
    HTTPBasicAuthHandler(密码管理器对象) 
    
    密码管理器对象作用
    # 创建密码管理器对象
    pwdmg = urllib.request.HTTPPasswordMgrWithDefaultRealm()
    # 把认证信息添加到密码管理器对象
    pwdmg.add_password(None,webserver,user,passwd)
    # 创建Handler处理器对象
    
    示例
    # 创建相关的Handler处理器对象
    http_handler = urllib.request.HTTPHandler()
    # 创建自定义opener对象
    opener = urllib.request.build_opener(http_handler)
    # 利用opener对象打开url
    req = urllib.request.Request(url,headers=headers)
    res = opener.open(req)
    

    请求方式及实例

    GET

    查询参数在URL地址中显示

    POST
    # 在Request方法中添加data参数
    urllib.request.Request(url,data=data,headers=headers)
    # 表单数据以bytes类型提交,不能是str
    data = {....}
    data = urlencode(data)  # 字符串
    data = bytes(data,"utf-8") # 字符串 -> 字节流
    data.encode("utf-8")
    
    Cookie模拟登陆

    HTTP是一种无连接协议,客户端和服务器交互仅仅限于 请求/响应过程,结束后断开,下一次请求时,服务器会认为是一个新的客户端,为了维护他们之间的连接,让服务器知道这是前一个用户发起的请求,必须在一个地方保存客户端信息。

    • cookie:通过在客户端记录的信息确定用户身份
    • session:通过在服务端记录的信息确定用户身份
    # 1.通过抓包工具、F12获取到cookie(先登陆1次网站)
    # 2.正常发请求
    

    相关文章

      网友评论

          本文标题:爬虫请求模块

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