精华内容
下载资源
问答
  • urllib和urllib2是相互独立的模块,python3.0以上把urllib和urllib2合并成一个库了,requests库使用了urllib3。requests库的口号是“HTTP For Humans”,为人类使用HTTP而生,用起来不知道要比python原生库好用多少...

    python中有多种库可以用来处理http请求,比如python的原生库:urllib包、requests类库。urllib和urllib2是相互独立的模块,python3.0以上把urllib和urllib2合并成一个库了,requests库使用了urllib3。requests库的口号是“HTTP For Humans”,为人类使用HTTP而生,用起来不知道要比python原生库好用多少呢,比起urllib包的繁琐,requests库特别简洁和容易理解。话不多说,代码为证~~~

    下面我们来分别使用urllib包和requests库写一个get请求,进行一下对比,如下图:#-*- coding:utf8 -*-

    import urllib2

    import urllib

    URL_GET = "https://api.douban.com/v2/event/list"

    def use_params_urllib2():

    #构建请求参数

    params = urllib.urlencode({'loc':'108288','day_type':'weekend','type':'exhibition'})

    print 'Request Params:'

    print params

    #发送请求

    response = urllib2.urlopen('?'.join([URL_GET,'%s'])%params)

    #处理响应

    print '>>>>>>Response Headers:'

    print response.info()

    print 'Status Code:'

    print response.getcode()

    print'>>>>>>>Response Body:'

    print response.read()

    if __name__ == '__main__':

    print 'Use params urllib2:'

    use_params_urllib2()

    #-*- coding:utf8 -*-

    import requests

    URL_GET = "https://api.douban.com/v2/event/list"

    def use_params_requests():

    #构建请求参数

    params = {'loc':'108288','day_type':'weekend','type':'exhibition'}

    #发送请求

    response = requests.get(URL_GET,params=params)

    #处理响应

    print '>>>>>>Response Headers:'

    print response.headers

    print '>>>>>>Status Code:'

    print response.status_code

    print'>>>>>>>Response Body:'

    print response.text

    if __name__ == '__main__':

    print 'Use params requests:'

    use_params_requests()

    第一种使用的是urllib包,第二种使用的是requests库,从以下几个方面进行对比:

    1)构建参数:在构建请求参数时,第一种需要将请求参数使用urllib库的urlencode方法进行编码预处理,非常麻烦

    2)请求方法:发送get请求时,第一种使用的urllib库的urlopen方法打开一个url地址,而第二种直接使用requests库的get方法,与http请求方式是对应的,更加直接、易懂

    3)请求数据:第一种按照url格式去拼接一个url字符串,显然非常麻烦,第二种按顺序将get请求的url和参数写好就可以了

    4)处理响应:第一种处理消息头部、响应状态码和响应正文时分别使用.info()、.getcode()、.read()方法,第二种使用.headers、.status_code、.text方法,方法名称与功能本身相对应,更方便理解、学习和使用

    5)连接方式:看一下返回数据的头信息的“connection”,使用urllib库时,"connection":"close",说明每次请求结束关掉socket通道,而使用requests库使用了urllib3,多次请求重复使用一个socket,"connection":"keep-alive",说明多次请求使用一个连接,消耗更少的资源

    6)编码方式:requests库的编码方式Accept-Encoding更全,在此不做举例

    POST请求

    参考Python——深入理解urllib、urllib2及requests(requests不建议使用?)

    Python+Requests接口测试教程(2):requests

    http://www.bubuko.com/infodetail-2292393.html

    展开全文
  • for key,value inreponse.cookies.items():print (key + '=' + value) #组合key = value 4.7 SSL设置 #ssl设置 importrequestsfrom requests.packages importurllib3 urllib3.disable_warnings() res= requests.get...

    目录

    一、爬虫的步骤

    1.发起请求,模拟浏览器发送一个http请求

    2.获取响应的内容

    3.解析内容(解析出对自己有用的部分)

    a.正则表达式

    b.BeautifulSoup模块

    c.pyquery模块

    d.selenium模块

    4.保存数据

    a.文本文件(txt,csv等)

    b.数据库(mysql)

    c.redis,mongdb(最长使用)

    二、使用Jupyter

    2.1.使用理由:Jupyter可以一次执行,讲结果保存到内存里,供后面python语句多次使用,避免每次调试程序,都要重新请求网页,频繁爬取某个网页,容易导致该网站封IP

    2.2.使用步骤:

    a.安装:pip install jupyter (前提是已经安装了python3)

    b.运行:jupyter  notebook,浏览器自动弹出使用界面

    c.右侧New-->python3,新建一个python程序

    2.3.快捷键

    shift + enter键  :选定行执行,执行结果保留到内存

    三、爬虫请求模块之urllib

    3.1 urllib介绍

    Python标准库中提供了:urllib等模块以供Http请求,但是它的API能力不佳,需要巨量的工作,甚至包括各种方法覆盖,来完成最简单的任务,不推荐使用,此处只是了解一下

    3.2 简单使用

    #方式一:

    importurllib.request

    f= urllib.request.urlopen('http://www.baidu.com')

    result= f.read().decode('utf-8')print(result)#方式二:

    importurllib.request

    req= urllib.request.Request('http://www.baidu.com')

    response=urllib.urlopen(req)

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

    ps:硬要使用urllib模块,推荐使用方式二,因为req是一个Request对象,在这个对象里,可以定义请求的头部信息,这样可以把自己包装成像个浏览器发起的请求,如下面的一个例子

    3.3自定义请求头信息

    importurllib.request

    req= urllib.request.Request('http://www.example.com')#自定义头部,第一个参数为关键字参数key,第二个参数为内容

    req.add_header("User-Agent","Mozilla/5.0(X11;Ubuntu;Linux x86_64;rv:39.0) Gecko/20100101 Firefox/39.0")

    f=urllib.request.urlopen(req)

    result= f.read().decode('utf-8')#有一个模块fake_useragent可以随机产生User-Agent信息,对于网站的反爬虫机制有一定的欺骗作用

    3.4 fake_useragent使用

    #1.安装pip install fake_useragent

    #2.基本使用

    from fake_useragent importUserAgent

    ua=UserAgent()print(ua.chrome) #产生一个谷歌的内核字段

    #常用属性

    ua.chrome #产生一个谷歌的内核字段

    ua.ie #随机产生ie内核字段

    ua.firefox #随机产生火狐内核字段

    ua.random #随机产生不同浏览器的内核字段

    四、爬虫请求模块之requests

    4.1 requests模块介绍

    Requests是使用Apache2 Licensed许可证的,基于Python开发的HTTP库,其在Python内置模块的基础上进行了高度的封装,从而使得进行网络请求时,

    变得美好了许多,而且使用Requests可以轻而易举的完成浏览器可以做到的任何操作

    4.2 requests安装

    pip3 install requests

    4.3 简单使用

    importrequests

    r= requests.get('http://www.example.com')print(type(r))print (r.status_code) #服务器返回的状态码

    print (r.encoding) #网站使用的编码

    print (r.text) #返回的内容,字符串类型

    4.4 get请求

    #1.无参数实例

    importrequests

    res= requests.get('http://www.example.com')print (res.url) #打印请求的url

    print (res.text) #打印服务器返回的内容

    #2.有参数实例

    importrequests

    payload= {'k1':'v1','k2':'v2'}res= requests.get('http://httpbin.org/get',params=payload)print(res.url)print(res.text)#3.解析json

    importrequestsimportjson

    response= rquests.get('http://httpbin.org/get')print (type(response.text)) #返回结果是字符串类型

    pirnt (response.json()) #字符串转成json格式

    print (json.loads(response.text)) #字符串转成json格式

    print (type(response.json())) #json类型

    #4.添加headers

    importrequestsfrom fake_useragent importUserAgent

    ua=UserAgent()#自定义请求头部信息

    headers={'User-Agent':ua.chrome

    }

    response= requests.get('http://www.zhihui.com',headers =headers)print (response.text)

    4.5 post请求

    #1.基本POST实例

    importrequests#当headers为application/content的时候,请求实例如下:

    payload = {'k1':'v1','k2':'v2'}

    res= requests.post('http://httpbin.org/post',data =payload)print(res.text)print(type(res.headers),res.headers)print(type(res.cookies),res.cookies)print(type(res.url),res.url)print(type(res.history),res.history)#2.发送请求头和数据实例

    importjsonimportrequests

    url= 'http://httpbin.org/post'payload= {'some':'data'}

    headers= {'content-type':'application/json'}#当headers为application/json的时候,请求实例如下:

    res = requests.post(url,data=json.dumps(payload), headers =headers)print (res.text)

    4.6关于get与post请求的差别

    get请求方法参数只有params,而没有data参数,而post请求中两者都是有的

    4.7 http返回代码

    1 100:continue

    2 101: switching_protocols3 102: processing4 103: checkpoint5 122: uri_too_long , request_uri_too_long6

    7 200 : ok , okay, all_ok all_okay , all_good, \\o/ , '√'

    8 201: created9 202: accepted10 203: non_authoritative_info , non_authoritative_information11 204: no_content12 205: rest_content , reset13 206: partial_content, partial14 207:multi_status , multiple_status multi_stati multiple_stati15 208: already_reported16 226: im_used17

    18 #Redirection

    19 300:multipel_choices20 301 : moved_permanently , moved , \\o-

    21 302: found22 303: see_other , other23 304: not_modified24 305: use_proxy25 306: switch_proxy26 307: remporay_redirect , temporary_moved , temporary27 308 : permanent_redirect , resume_incomplete , resume #These 2 to be removed in 3.0

    28

    29 #client Error

    30 400:bad_request , bad31 401: unauthorized32 402: payment_required payment33 403: forbiden34 404 : not_found , -o-

    35 405: method_not_allowed not_allowed36 406: not_acceptable37 407: proxy_authentication_required , proxy_auth , proxy_authentication38 408: request_timeout , timeout39 409: conflict40 410:gone41 411:length_required42 412: precondition_failed , precondition43 413: request_entity_too_large44 414: requests_uri_too_large45 415: unsupported_media_type, unsupported_media , media_type46 416: ('requested_range_not_satisfiable', 'requested_range', 'range_not_satisfiable'),47 417: ('expectation_failed',),48 418: ('im_a_teapot', 'teapot', 'i_am_a_teapot'),49 421: ('misdirected_request',),50 422: ('unprocessable_entity', 'unprocessable'),51 423: ('locked',),52 424: ('failed_dependency', 'dependency'),53 425: ('unordered_collection', 'unordered'),54 426: ('upgrade_required', 'upgrade'),55 428: ('precondition_required', 'precondition'),56 429: ('too_many_requests', 'too_many'),57 431: ('header_fields_too_large', 'fields_too_large'),58 444: ('no_response', 'none'),59 449: ('retry_with', 'retry'),60 450: ('blocked_by_windows_parental_controls', 'parental_controls'),61 451: ('unavailable_for_legal_reasons', 'legal_reasons'),62 499: ('client_closed_request',),63 #Server Error.

    64 500: ('internal_server_error', 'server_error', '/o\\', '✗'),65 501: ('not_implemented',),66 502: ('bad_gateway',),67 503: ('service_unavailable', 'unavailable'),68 504: ('gateway_timeout',),69 505: ('http_version_not_supported', 'http_version'),70 506: ('variant_also_negotiates',),71 507: ('insufficient_storage',),72 509: ('bandwidth_limit_exceeded', 'bandwidth'),73 510: ('not_extended',),74 511: ('network_authentication_required', 'network_auth', 'network_authentication')

    View Code

    4.8 获得cookies

    #会话登录

    importrequests

    s=requests.Session()

    s.get('http://www.httpbin.org/cookies/set/123456789') #设置cookies

    res = s.get('http://www.httpbin.org/cookies') #获得cookies

    print (res.text) #打印cookies

    此httpbin.org是通过以上方式来设置cookies#获得cookie

    importrequests

    response= requests.get('http://www.baidu.com')#print ('response.cookies')

    for key,value inreponse.cookies.items():print (key + '=' + value) #组合key = value

    4.7 SSL设置

    #ssl设置

    importrequestsfrom requests.packages importurllib3

    urllib3.disable_warnings()

    res= requests.get('http://www.12306.cn',verify =False)print(res.status_code)#证书认证

    importrequests

    res= requests.get('https://www.12306.cn',cert=('/path/server.crt','/path/key'))print (res.status_code)

    4.8 代理设置

    importrequests

    proxies={"http":"http://127.0.0.1:9746","https":"https://127.0.0.1:9924"}

    res= requests.get("http://www.taobao.com",proxies =procies)print(res.status_code)#有密码的代理

    importrequests

    proxies={"https":"https://user:password@127.0.0.1:9924"}

    res= requests.get("http://www.taobao.com",proxies =procies)print (res.status_code)

    4.9 超时时间设置与异常处理

    importrequestsfrom requests.exceptions importReadTimeouttry:

    res= requests.get('http://httpbin.org/get',timeout=0.5)exceptReadTimeout:print ('Timeout')

    4.10 案例:检测QQ是否在线

    importurllibimportrequestsfrom xml.etree importElementTree as ET#使用内置模块urllib发送http请求

    r = urllib.request.urlopen('http://www.webxml.com.cn/webservices/qqOnlineWebService.asmx/qqCheckOnline?qqCode=3455306**')

    result= r.read().decode('utf-8')#使用第三方模块requests发送http请求

    r = requetsts.get('http://www.webxml.com.cn/webservices/qqOnlineWebService.asmx/qqCheckOnline?qqCode=3455306**')

    result=r.text#解析XML格式内容

    node =ET.XML(result)#获取内容

    if node.text =='Y':print ('在线')else:print ('离线')

    五、爬虫分析之re模块

    5.1 关于re模块的使用方法

    http://www.cnblogs.com/lisenlin/articles/8797892.html#1

    5.2 爬虫简单案例

    importrequestsimportrefrom fake_useragent importUserAgentdefget_page(url):

    ua=UserAgent()

    headers={'User-Agent':ua.chrome,

    }

    response= requests.get(url, headers =headers)try:if response.status_code == 200:

    res=response.textreturnresreturnNoneexceptException as e:print(e)defget_movie(html):

    partten= '

    (.*?).*?(.*?).*?(.*?)'items=re.findall(partten, html, re.S)#print((items))

    returnitemsdefwrite_file(items):

    fileMovie= open('movie.txt', 'w', encoding='utf8')try:for movie initems:

    fileMovie.write('电影排名:' + movie[0] + '\r\n')

    fileMovie.write('电影主演:' + movie[1].strip() + '\r\n')

    fileMovie.write('上映时间:' + movie[2] + '\r\n\r\n')print('文件写入成功...')finally:

    fileMovie.close()defmain(url):

    html=get_page(url)

    items=get_movie(html)

    write_file(items)if __name__ == '__main__':

    url= "http://maoyan.com/board/4"main(url)

    展开全文
  • import urllib.request as ur # requests方式 # response = requests.get( # "https://timgsa.baidu.com/timg?image&quality=80&size=b9999_10000&sec=1599762352425&di=7ca234f2e2998438f51f83465...
    import requests
    import urllib.request as ur
    # requests方式
    # response = requests.get(
    #     "https://timgsa.baidu.com/timg?image&quality=80&size=b9999_10000&sec=1599762352425&di=7ca234f2e2998438f51f83465e82c1ee&imgtype=0&src=http%3A%2F%2Fa3.att.hudong.com%2F14%2F75%2F01300000164186121366756803686.jpg",
    #     stream=True)
    # with open('234.png', "wb") as fs:
    #     fs.write(response.content)
    
    # urllib的方式
    def callback(a1, a2, a3):
        """
            @a1:目前为此传递的数据块数量
            @a2:每个数据块的大小,单位是byte,字节
            @a3:远程文件的大小
        """
        download_pg = 100.0 * a1 * a2 / a3
        if download_pg > 100:
            download_pg = 100
    
        print("%.2f%%" % download_pg, )
    
    ur.urlretrieve("https://timgsa.baidu.com/timg?image&quality=80&size=b9999_10000&sec=1599762352425&di=7ca234f2e2998438f51f83465e82c1ee&imgtype=0&src=http%3A%2F%2Fa3.att.hudong.com%2F14%2F75%2F01300000164186121366756803686.jpg","56.png",reporthook=callback)
    
    展开全文
  • 一、认识requests和urllib工具库 二、urllib的具体使用 1.urllib的request模块的urlopen方法可以发送http请求,具体使用: 2.使用response.read()可以获得响应体的内容,具体使用: 3.设置请求头部信息:headers...

     

    目录

    一、认识requests和urllib工具库

    二、urllib的具体使用

    1.urllib的request模块的urlopen方法可以发送http请求,具体使用:

    2.使用response.read()可以获得响应体的内容,具体使用:

    3.设置请求头部信息:headers

    4.设置代理访问:ProxyHandler(防止ip被封)

    5.携带cookie访问(HTTPCookiProcessor)

    6.异常处理

    7.URL解析

    8.urljoin

    9.urlencode


    一、认识requests和urllib工具库

    `urllib是python标准库,就是你安装了python,这个库就已经可以直接使用了。由于urllib只能接收一个url地址而不支持请求的headers操作,所以官方又推出了urllib2,urllib2.urlopen可以接受一个Request对象或者url,但是urllib有urlencode()方法,将字典参数编码成我们想要的请求参数。所以urllib和urllib2经常混用。不过不用担心,python3里,已经合并成了urllib,不存在urllib2了,使用起来更加方便。urllib包含四大模块:request(请求)、error(异常处理)、prse(url解析,拼接,合并,编码)、robotparser(解析robots.txt文件)。

    `requests是第三方库,需要独立安装:pip install requests。requests是基于urllib编写的,并且使用起来非常方便,个人推荐使用requests。

    二、urllib的具体使用

    1.urllib的request模块的urlopen方法可以发送http请求,具体使用:

    #1.最基本的打开网页

    response = urllib.request.urlopen(url,data=None,[timeout,],,)

    参数解释:url代表目标网址,data代表请求携带的参数有data就是post,不添加就是get请求,timeout是设置超时时间。

     

    2.使用response.read()可以获得响应体的内容,具体使用:

    # 1.直接将整个页面以二进制格式返回
    print(response.read())
    # 2.返回得是二进制格式得页面中得第一行
    print(response.readline())
    # 3.以二进制格式 返回所有得数据 以列表格式保存
    print(response.readlines())
    # 4.获取状态码 --200 代表得是服务器响应成功  我们测试得习惯上加这行代码 判断是否成功返回
    print(response.getcode())
    # 5.获取响应头
    print(response.getheaders())
    # 6.获取url
    print(response.geturl())
     

    3.设置请求头部信息:headers


    方式一:构建请求对象时添加。代码示例:

    #请求地址
    url = 'www.baidu.com'
    #设置请求头
    headers = {
              'User-Agent': 'Mozilla/4.0 (compatible; MSIE 5.5; Windows NT)',
              'Host': 'httpbin.org'
              }
    #设置请求参数
    dict = {
             'name': 'zhaofan'
           }
    #参数转化
    data = bytes(parse.urlencode(dict), encoding='utf8')
    #构建一个请求对象
    req = request.Request(url=url, data=data, headers=headers, method='POST')
    #发送请求
    response = request.urlopen(req)
    #打印相应内容
    print(response.read().decode('utf-8'))

    方式二:构建请求对象后,使用add_header添加。示例代码:

    from urllib import request, parse
    #
    url = 'www.baidu.com'
    #请求参数
    dict = {
        'name': 'Germey'
    }
    #请求参数转义
    data = bytes(parse.urlencode(dict), encoding='utf8')
    #构建请求对象
    req = request.Request(url=url, data=data, method='POST')
    #添加请求头
    req.add_header('User-Agent', 'Mozilla/4.0 (compatible; MSIE 5.5; Windows NT)')
    response = request.urlopen(req)
    print(response.read().decode('utf-8'))

    4.设置代理访问:ProxyHandler(防止ip被封)

    实例代码:

    import urllib.request
    
    #设置代理
    proxy_handler = urllib.request.ProxyHandler({
        'http': 'http://127.0.0.1:9743',
        'https': 'https://127.0.0.1:9743'
    })
    #请求时使用代理
    '''这里创建一般的opener获取网页内容,
    之前的urlopen,它是一个特殊的opener,
    可以理解成opener的一个特殊实例,传入的参数仅仅是url,data,timeout'''
    opener = urllib.request.build_opener(proxy_handler)
    #访问
    response = opener.open('www.baidu.com')
    print(response.read())

    5.携带cookie访问(HTTPCookiProcessor)

    解释cookie:某些网站为了辨别用户身份、进行session跟踪而储存在用户本地终端上的数据(通常经过加密)

    这里要用到cookiejar模块,它的主要作用是提供可存储cookie的对象。

    CookieJar类的对象来捕获cookie并在后续连接请求时重新发送,比如可以实现模拟登录功能。该模块主要的对象有CookieJar、FileCookieJar、MozillaCookieJar、LWPCookieJar。

    它们的关系:CookieJar —-派生—->FileCookieJar  —-派生—–>MozillaCookieJar和LWPCookieJar

    1).存储cookie到变量

    from urllib import request
    from urllib import parse
    from http import cookiejar
    
    #声明一个CookieJar对象实例来保存cookie
    cookie = cookiejar.CookieJar()
    #利用urllib库中的request的HTTPCookieProcessor对象来创建cookie处理器
    handler=request.HTTPCookieProcessor(cookie)
    #通过handler来构建opener
    opener = request.build_opener(handler)
    #此处的open方法同urllib的urlopen方法,也可以传入request
    response = opener.open('http://www.baidu.com')
    for item in cookie:
        print ('Name = '+item.name)
        print ('Value = '+item.value)
    

    2).存储cookie到文件

    有两种方法:http.cookiejar.MozillaCookieJar()、http.cookiejar.LWPCookieJar(),都用来处理 Cookie 和文件相关的事件(即保存和读取cookie)

    MozillaCookieJar方式:

    import http.cookiejar, urllib.request
    #文件名
    filename = "cookie.txt"
    cookie = http.cookiejar.MozillaCookieJar(filename)
    handler = urllib.request.HTTPCookieProcessor(cookie)
    opener = urllib.request.build_opener(handler)
    response = opener.open('http://www.baidu.com')
    #保存cookie
    '''
    可以看到有两个参数:
    ignore_discard意思是即使cookies将被丢弃也将它保存下来
    ignore_expires意思是如果cookies已经过期也将它保存并且文件已存在时将覆盖
    这里我们都设置成true
    '''
    cookie.save(ignore_discard=True, ignore_expires=True)

    LWPCookieJar方式:

    import http.cookiejar, urllib.request
    filename = 'cookie.txt'
    cookie = http.cookiejar.LWPCookieJar(filename)
    handler = urllib.request.HTTPCookieProcessor(cookie)
    opener = urllib.request.build_opener(handler)
    response = opener.open('http://www.baidu.com')
    cookie.save(ignore_discard=True, ignore_expires=True)

    3).从文件中取cookie

    import http.cookiejar, urllib.request
    cookie = http.cookiejar.LWPCookieJar()
    cookie.load('cookie.txt', ignore_discard=True, ignore_expires=True)
    handler = urllib.request.HTTPCookieProcessor(cookie)
    opener = urllib.request.build_opener(handler)
    response = opener.open('http://www.baidu.com')
    print(response.read().decode('utf-8'))

    6.异常处理

    访问网页有时候会出现403、404、500等错误,爬虫也是如此,毕竟要访问网页嘛。这里需要我们捕捉下来方便排查原因。

    捕捉异常示例:

    #需要导入error模块
    from urllib import request,error
    
    try:
        response = request.urlopen("http://www.ahkjfhaskjfhaskj.com")
    except error.URLError as e:
        #打印异常
        print(e.reason)
    

    上面的网址是不存在的,我们可以用URLError.reaason打印错误信息。但是URLError只有一个属性reason用来打印错误信息,想获得更多错误信息详情可以使用HTTPError,他是URLError的子类,HTTPError里有三个属性:code,reason,headers,即抓异常的时候可以获得code,reson,headers三个信息。

    HTTPError捕捉异常示例:

    from urllib import request,error
    try:
        response = request.urlopen("http://soghsekghds.com")
    except error.HTTPError as e:
        #异常信息
        print(e.reason)
        #错误码
        print(e.code)
        #头信息
        print(e.headers)
    
    '''
    #还可以深入判断一下,socketTimeOut:指客户端和服务进行数据交互的时间
    #isinstance判断是不是同一种类型,e.reason和socket.timeout类型一致时,判定是超时错误
    if isinstance(e.reason,socket.timeout):
            print("time out")
    '''
    
    #异常可以同时捕捉
    except error.URLError as e:
        print(e.reason)
    else:
        print("reqeust successfully")

    7.URL解析

    1).urlparse

    官方解释:

    The URL parsing functions focus on splitting a URL string into its components, or on combining URL components into a URL string.

    URL解析函数的重点是将URL字符串拆分为其组件,或将URL组件组合为URL字符串。

    说白了就是地址拆分,域名参数啥的分开,示例:

    from urllib.parse import urlparse
    
    result = urlparse("http://www.baidu.com/index.html;user?id=5#comment")
    #还可以加上,scheme="https"指定协议,但是如果url已经带了协议,scheme指定的协议就不会生效
    #result = urlparse("http://www.baidu.com/index.html;user?id=5#comment",scheme="https")
    print(result)

    打印结果:

    ParseResult(scheme='http', netloc='www.baidu.com', path='/index.html', params='user', query='id=5', fragment='comment')

    可以看到协议、网址、域名、参数等很好的分开来。

    1).urlunpars

    猜一下就是功能和urlparse的功能相反?其实就是,它是用于拼接

    示例:

    from urllib.parse import urlunparse
    
    data = ['http','www.baidu.com','index.html','user','a=123','commit']
    print(urlunparse(data))

    打印结果:

    http://www.baidu.com/index.html;user?a=123#commit
     

    完美的拼接成了url~

    8.urljoin

    这是也是用于地址拼接,不过不同于上面的urlunpars,urljoin主要用于url后缀拼接

    示例:

    
    from urllib.parse import urljoin
    
    print(urljoin('http://www.baidu.com', 'FAQ.html'))
    print(urljoin('http://www.baidu.com', 'https://pythonsite.com/FAQ.html'))
    print(urljoin('http://www.baidu.com/about.html', 'https://pythonsite.com/FAQ.html'))
    print(urljoin('http://www.baidu.com/about.html', 'https://pythonsite.com/FAQ.html?question=2'))
    print(urljoin('http://www.baidu.com?wd=abc', 'https://pythonsite.com/index.php'))
    print(urljoin('http://www.baidu.com', '?category=2#comment'))
    print(urljoin('www.baidu.com', '?category=2#comment'))
    print(urljoin('www.baidu.com#comment', '?category=2'))

    打印结果:

    http://www.baidu.com/FAQ.html
    https://pythonsite.com/FAQ.html
    https://pythonsite.com/FAQ.html
    https://pythonsite.com/FAQ.html?question=2
    https://pythonsite.com/index.php
    http://www.baidu.com?category=2#comment
    www.baidu.com?category=2#comment
    www.baidu.com?category=2

    可以看出明显第二个参数的优先级高于第一个url参数。

    9.urlencode

    这是可以将字典转换为url参数

    示例:

    from urllib.parse import urlencode
    
    params = {
        "name":"hanson",
        "age":123,
    }
    base_url = "http://www.baidu.com?"
    
    url = base_url+urlencode(params)
    print(url)

    打印结果:

    http://www.baidu.com?name=hanson&age=123

    可以看出urlencode将字典参数转化为了url参数。

    以下就是urllib的基本使用以及示例,感谢前辈们的分享支持,站在巨人的肩膀上才可以看得更远!有问题可以共同探讨~叶知秋继续努力~

     

     

     

     

    展开全文
  • python用requests和urllib2两种方式调用图灵机器人接口
  • 目标:针对网页用requests和urllib两种方式将文件内容下载到本地txt文件中。 网页:百度首页 http://www.baidu.com Requests方式:import requests import sysreload(sys) sys.setdefaultencoding('utf-8')def ...
  • requests和urllib模块

    千次阅读 2018-07-13 09:33:51
    requests模块的介绍: 能够帮助我们发起请求获取响应response常见的属性: response.text 响应体 str类型 respones.content 响应体 bytes类型 response.status_code 响应状态码 response.request.headers 响应对应...
  • requests和urllib的区别

    千次阅读 2020-02-02 22:54:35
    requests 一、发送请求 1.发送get请求,例如: r = requests.get('http://httpbin.org/ip') 2.发送post请求,例如: r = requests.post('http://httpbin.org/ip') 3.得到的响应内容(就是指get发送以后的...
  • requests和urllib.request实现对比

    千次阅读 2018-02-27 13:49:40
    import requests import urllib.request #requests req = requests.get('http://www.xiami.com/search?key=%E5%9B%9B%E5%A4%A7',headers={ 'Connection': 'Keep-Alive', 'Accept': 'text/h...
  • 我也是初学者,我先试着回答这个问题首先说下 urllib中的urllib.request.Request()与urllib.request.urlopen()区别相对于urllib.request.urlopen()来说urllib.request.Request是进一步的包装请求总的来说,如果我们...
  • #!/usr/bin/env python ...import requests,urllib,urllib2,urllib3,urlparse url = "http://xxx.com/index.php?Q=u=%OS%26%20" print "original:",url #print requests.get(url).content print
  • 深入理解urlliburllib2及requestsPython 是一种面向对象、解释型计算机程序设计语言,由Guido vanRossum于1989年底发明,第一个公开发行版发行于1991年,Python 源代码同样遵循 GPL(GNU General PublicLicense)...
  • urllib.request可以用来发送request获取request的结果 urllib.error包含了urllib.request产生的异常 urllib.parse用来解析处理URL urllib.robotparse用来解析页面的robots.txt文件 请求返回响应的对象 response ...
  • 今天突发奇想小试爬虫,...import requests from urllib import request import os # 1.首先要检查数据是否是动态加载出来的 # 2.获取页面源码数据 if not os.path.exists('tupian'): os.mkdir('tupian') ...
  • 像是看视频看到设置代理这一段,urllib.request下面就有ProxyHandler这个模块可以使用去设置代理ip,但是就没有查到如果使用requests怎么去设置代理
  • 使用urllib代替requests发送请求。这个需求的上级需求:为了减少pyinstaller打包后的文件大小以及加载速度。 替代过程: 1. 先用urllib代替requests的get请求,无压力,不写 2. 用urllib代替requests的post请求,...
  • 普遍情况下都是先获取图片链接后使用requests+open或者urllib进行下载,但有时候遇到反爬就无法下载,就可以使用selenium进行下载。 from selenium import webdriver browser=webdriver.Chrome browser.get("图片...
  • 上篇文章已经介绍了urllib库的基本使用,本篇博客介绍requests库的基本使用,爬虫极力推荐requests,看完你就明白辽~。 学习之前推荐一个非常好的http测试网站:http://httpbin.org,提供非常非常完善的接口调试...
  • 我也是初学者,我先试着回答这个问题首先说下 urllib中的urllib.request.Request()与urllib.request.urlopen()区别相对于urllib.request.urlopen()来说urllib.request.Request是进一步的包装请求总的来说,如果我们...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 2,153
精华内容 861
关键字:

requests和urllib