zoukankan      html  css  js  c++  java
  • urlib补充

    import urllib.request # HTTP请求模块

    '''

    urllib4个模块:

    request :他是最基本的HTTP请求模块,可以用来模拟发送请求。

    error:异常处理模块,如果出现请求错误,我们可以捕获这些异常,然后进行重试或其他操作以保证程序不会意外终止。

    parse:一个工具,提供了许多URl处理方法,比如拆分、解析、合并等。

    robotparser:主要是用来识别网站的robots.txt文件。然后判断哪些网站可以爬,哪些不可以爬,这个模块其实用得比较少。

    '''

    url = 'http://www.baidu.com'

    response = urllib.request.urlopen(url) # 发送请求

    '''

    语法格式:urlopen(url, data=None, timeout=socket._GLOBAL_DEFAULT_TIMEOUT, cafile=None, capath=None, cadefault=False, context=None)

    urlopen有以下参数:

    url:需要访问网址。

    data:默认值为None,不写参数的话默认为get请求,反之为post,发送post请求,

        参数data以字典形式储存数据,并将参数data由字典类型转换成字节型才能完成post请求。

    timeout:超时设置。

    cafilecapathcadefault:使用参数指定一组HTTPS请求的可信CA证书。

    context:描述各种SSL选项的实例。

    '''

    # read函数返回网页内容,read返回的是bytes类型的数据,需要用到decode()转换成str类型,转行的编码格式是根据网页的编码方式的,否则会乱码。

    print(response.read().decode('utf-8'))

    # 返回状态码,还有getcode()方法也算是可以返回状态码

    print(response.status)

    # 返回响应头信息

    print(response.getheaders())

    print('*****************************************************************')

    # 设置请求头

    import urllib.request

    url = 'https://www.baidu.com'

    # 定义请求头

    headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/76.0.3809.100 Safari/537.36'}

    # 设置request的请求头

    req = urllib.request.Request(url, headers=headers)

    # 使用urlopen打开req

    # # read函数返回网页内容,read返回的是bytes类型的数据,需要用到decode()转换成str类型,转行的编码格式是根据网页的编码方式的,否则会乱码。

    html = urllib.request.urlopen(req).read().decode('utf-8')

    print(html)

    print('*****************************************************************')

    # 设置代理IP

    # 代理IP的原理:以本机先访问代理IP,再通过代理IP访问互联网,这样网站接受到的访问IP就是代理IP的地址。

    import urllib.request

    url = 'https://www.baidu.com'

    # 设置代理IP

    proxy_handler = urllib.request.ProxyHandler({

        'http': '218.56.132.157:8000',

        'https': '218.56.132.157:8000'

    })

    # 必须使用build_opener()函数来创建带有代理IP功能的opener对象

    opener = urllib.request.build_opener(proxy_handler)

    response = opener.open(url)

    html = response.read().decode('utf-8')

    print(html)

    '''

    这里要注意的是:

    由于使用了代理IP,因此连接IP的时候有可能出现超时而导致报错,

    遇到这种情况只要更换其他代理IP或者再次访问即可。

    '''

    print('*****************************************************************')

    # 使用cookies

    '''

    cookies主要用于获取用户登录信息,比如:通过提交数据实现用户登录之后,会生成带有登录状态的cookies

    这样可以将cookies保存在本地文件中,下次程序运行的时候,直接读取cookies来登录,

    对于特别复杂的登录,如验证码、手机短信验证登录这类的网站,使用cookies能简单解决重复登录的问题。

    -

    urllib提供了HTTPCooieProcessor()cookies操作,但cookies的读写是有MozillaCookieJar()完成的。

    '''

    print('*****************************************************************')

    # 证书验证

    import urllib.request

    import ssl

    url = 'https://www.baidu.com'

    # 关闭证书验证

    ssl._create_default_https_context = ssl._create_unverified_context

    response = urllib.request.urlopen(url)

    print(response.getcode())

    print('*****************************************************************')

    # 数据处理和post请求

    import urllib.request

    import urllib.parse

    # 数据处理

    url = 'https://www.baidu.com'

    '''

    urllib在请求访问服务器的时候,如果发生数据传递,就需要对内容进行编码处理,strbytes对象

    的两个元素元祖序列转行为百分比编码的ASCII文本字符串。

    如果字符串要用作POST,那么它应该被编码为字节,否则会导致TypeError错误。

    '''

    # 发送post请求,需要使用urllib.parse对参数内容进行处理。

    data = {

        'value': 'true',

    }

    # 数据处理

    data = urllib.parse.urlencode(data).encode('utf-8')

    # 使用urlencode方法转换成字节的数据类型,encode设置字节编码,注意:字节编码是根据网站的编码格式来定的。

    # urlencode的作用只是对请求参数做数据格式转换处理。

    req = urllib.request.urlopen(url, data=data)

    print(req)

    # urllib还有两个编码处理的方法,quote()unquote()

    url = '%2523%25E7%25BC%2596%25E7%25A8%258B%2523'

    # 第一次解码

    first = urllib.parse.unquote(url)

    print(first)  # 输出:%23%E7%BC%96%E7%A8%8B%23

    # 第二次解码

    second = urllib.parse.unquote(first)

    print(second)  # 输出:#编程#

    # 上面的例子是将url中的特殊字符进行还原处理。

    url = '编程'

    a = urllib.parse.quote(url)

    print(a)  # 输出:%E7%BC%96%E7%A8%8B

    s = urllib.parse.quote(a)

    print(s)  # 输出:%25E7%25BC%2596%25E7%25A8%258B

    # 上面的例子是将url中的中文字符进行还原处理。

    print('*****************************************************************')

    '''

    urllib的常用语法:

    - urllib.request.ualopen:访问url,请求url

    - urllib.request.Request:模拟headers请求头

    - urllib.request.HTTPCookieProcessor:设置cookies对象

    - urllib.parse.urlencode(data).encode('utf-8'):请求数据格式转换

    - urllib.parse.quote(url)url编码处理,主要对url上的中文等特殊符号编码处理。

    - urllib.parse.unquote(url)url解码处理,将url上的特殊符号还原。

    urllib是Python标准库的一部分,包含urllib.request,urllib.error,urllib.parse,urllib.robotparser四个子模块,这里主要介绍urllib.request的一些简单用法:
    首先是urlopen函数,用于打开一个URL:
    #获取并打印google首页的html
    import urllib.request
    response urllib.request.urlopen( ;http://www.google.com ;)
    html response.read()
    print(html)
    urlopen返回一个类文件对象,可以像文件一样操作,同时支持一下三个方法:
    info()返回一个对象表示远程服务器返回的头信息。 getcode()返回Http状态码如果是http请求返回请求的url地址。 有时候我们需要设置代理,这时我们可以这样做:
    #设置全局代理
    import urllib.request
    handler urllib.request.ProxyHandler({ http://someproxy.com:8080 ;})
    opener urllib.request.build_opener(handler)
    urllib.request.install_opener(opener)#安装opener作为urlopen()使用的全局URL opener即以后调用urlopen()时都会使用安装的opener对象。
    response urllib.request.urlopen( ;http://www.google.com ;)
    print(response.read())

    如果要细致的设置代理,可以用opener的open方法打开URL:
    import urllib.request
    handler urllib.request.ProxyHandler({ http://someproxy.com:8080 ;})
    opener urllib.request.build_opener(handler)
    response opener.open( ;http://www.google.com ;)
    print(response.read())
    打开url后,我们可以将内容写入一个本地文件来达到保存网页的目的,但是这里有一个更方便的方法,那就是调用urlretrieve():
    #使用urllib.request.urlretrieve()将网页保存到本地
    import urllib.request
    url ;http://www.baidu.com/ ;
    local_path ;P:\download.html ;
    urllib.request.urlretrieve(url, local_path)

  • 相关阅读:
    sqlserver2005 新建批处理作业的步骤
    sql server 排除名字重复数据,获取最新的数据
    c#.net常用函数列表
    vs2008 ajax:AjaxPanel 页面无刷新操作
    解决asp.net中listbox的SelectedIndex的取值为1
    AjaxPro.Utility.RegisterTypeForAjax DropDownList三级联动
    我来了!
    《暗时间》读后感
    js判断是安卓手机还是ios
    angular各个版本下载
  • 原文地址:https://www.cnblogs.com/Centwei/p/15381344.html
Copyright © 2011-2022 走看看