zoukankan      html  css  js  c++  java
  • Python3中urllib使用介绍

    Python3中urllib使用介绍

    版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/duxu24/article/details/77414298

    Py2.x:

    • Urllib
    • Urllin2

    Py3.x:

    • Urllib

    变化:

    • 在Pytho2.x中使用import urllib2——-对应的,在Python3.x中会使用import urllib.requesturllib.error
    • 在Pytho2.x中使用import urllib——-对应的,在Python3.x中会使用import urllib.requesturllib.errorurllib.parse
    • 在Pytho2.x中使用import urlparse——-对应的,在Python3.x中会使用import urllib.parse
    • 在Pytho2.x中使用import urlopen——-对应的,在Python3.x中会使用import urllib.request.urlopen
    • 在Pytho2.x中使用import urlencode——-对应的,在Python3.x中会使用import urllib.parse.urlencode
    • 在Pytho2.x中使用import urllib.quote——-对应的,在Python3.x中会使用import urllib.request.quote
    • 在Pytho2.x中使用cookielib.CookieJar——-对应的,在Python3.x中会使用http.CookieJar
    • 在Pytho2.x中使用urllib2.Request——-对应的,在Python3.x中会使用urllib.request.Request

    快速爬取一个网页

    import urllib.request
    
    file=urllib.request.urlopen('http://www.baidu.com')
    
    data=file.read()    #读取全部
    
    dataline=file.readline()    #读取一行内容
    
    fhandle=open("./1.html","wb")    #将爬取的网页保存在本地
    fhandle.write(data)
    fhandle.close()
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11

    浏览器的模拟

    应用场景:有些网页为了防止别人恶意采集其信息所以进行了一些反爬虫的设置,而我们又想进行爬取。 
    解决方法:设置一些Headers信息(User-Agent),模拟成浏览器去访问这些网站。

    import urllib.request
    import urllib.parse
    
    url = 'http://www.baidu.com'
    header = {
       'User-Agent': 'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.96 Safari/537.36'
    }
    
    request = urllib.request.Request(url, headers=header)
    reponse = urllib.request.urlopen(request).read()
    
    fhandle = open("./baidu.html", "wb")
    fhandle.write(reponse)
    fhandle.close()
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14

    代理服务器的设置

    应用场景:使用同一个IP去爬取同一个网站上的网页,久了之后会被该网站服务器屏蔽。 
    解决方法:使用代理服务器。 (使用代理服务器去爬取某个网站的内容的时候,在对方的网站上,显示的不是我们真实的IP地址,而是代理服务器的IP地址)

    def use_proxy(proxy_addr,url):
        import urllib.request
        proxy=urllib.request.ProxyHandler({'http':proxy_addr})
        opener=urllib.request.build_opener(proxy,urllib.request.HTTPHandler)
        urllib.request.install_opener(opener)
        data=urllib.request.urlopen(url).read().decode('utf8')
        return data
    
    proxy_addr='61.163.39.70:9999'
    data=use_proxy(proxy_addr,'http://www.baidu.com')
    print(len(data))
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11

    Cookie的使用

    应用场景:爬取的网页涉及登录信息。访问每一个互联网页面,都是通过HTTP协议进行的,而HTTP协议是一个无状态协议,所谓的无状态协议即无法维持会话之间的状态。

    import urllib.request
    import urllib.parse
    import urllib.error
    import http.cookiejar
    
    url='http://bbs.chinaunix.net/member.php?mod=logging&action=login&loginsubmit=yes&loginhash=La2A2'
    data={
        'username':'zhanghao',
        'password':'mima',
    }
    postdata=urllib.parse.urlencode(data).encode('utf8')
    header={
        'User-Agent':'Mozilla/5.0 (X11; Fedora; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.36'
    }
    
    request=urllib.request.Request(url,postdata,headers=header)
    #使用http.cookiejar.CookieJar()创建CookieJar对象
    cjar=http.cookiejar.CookieJar()
    #使用HTTPCookieProcessor创建cookie处理器,并以其为参数构建opener对象
    cookie=urllib.request.HTTPCookieProcessor(cjar)
    opener=urllib.request.build_opener(cookie)
    #将opener安装为全局
    urllib.request.install_opener(opener)
    
    try:
        reponse=urllib.request.urlopen(request)
    except urllib.error.HTTPError as e:
        print(e.code)
        print(e.reason)
    
    fhandle=open('./test1.html','wb')
    fhandle.write(reponse.read())
    fhandle.close()
    
    url2='http://bbs.chinaunix.net/forum-327-1.html'   #打开test2.html文件,会发现此时会保持我们的登录信息,为已登录状态。也就是说,对应的登录状态已经通过Cookie保存。
    reponse2=urllib.request.urlopen(url)
    fhandle2=open('./test2.html','wb')
    fhandle2.write(reponse2.read())
    fhandle2.close()
  • 相关阅读:
    Maidsafe-去中心化互联网白皮书
    The Top 20 Cybersecurity Startups To Watch In 2021 Based On Crunchbase
    Top 10 Blockchain Security and Smart Contract Audit Companies
    The 20 Best Cybersecurity Startups To Watch In 2020
    Blockchain In Cybersecurity: 11 Startups To Watch In 2019
    004-STM32+BC26丨260Y基本控制篇(阿里云物联网平台)-在阿里云物联网平台上一型一密动态注册设备(Android)
    涂鸦开发-单片机+涂鸦模组开发+OTA
    000-ESP32学习开发-ESP32烧录板使用说明
    03-STM32+Air724UG远程升级篇OTA(阿里云物联网平台)-STM32+Air724UG使用阿里云物联网平台OTA远程更新STM32程序
    03-STM32+Air724UG远程升级篇OTA(自建物联网平台)-STM32+Air724UG实现利用http/https远程更新STM32程序(TCP指令,单片机程序检查更新)
  • 原文地址:https://www.cnblogs.com/pscc/p/9788201.html
Copyright © 2011-2022 走看看