• Python爬虫基础九urllib下载资源、urllib 请求对象的定制


    1. urllib下载资源

    可以将爬取到的数据下载到本地,例如视频、音频、图片等

    下载的方法是urllib.request.urlretrieve(url,fileName),retrieve是取回的意思

    • 参数url表示的是数据的url地址
    • 参数fileName表示的是保存到本地的文件名称

    ①、爬取网页

    import urllib.request
    # 下载网页 京东
    url_page = 'https://www.jd.com/'
    # url代表的是下载的路径 filename文件的名字
    urllib.request.urlretrieve(url_page,'jd.html')

    默认下载到当前项目文件夹

     运行jd.html结果:

    ②、下载图片

     在网页找一张图片,复制图片地址粘贴到代码里

    import urllib.request
    # 下载图片
    url_img = 'https://img11.360buyimg.com/babel/s320x320_jfs/t1/191498/27/24162/96568/627e0850E48735562/5f38da213d429d9b.jpg!cc_320x320.webp'
    urllib.request.urlretrieve(url=url_img, filename='3060.jpg')

     

    ③、下载视频

    如果网页无法直接复制视频,可以按F12进入开发者模式,选择元素,鼠标点击到视频,右侧灰色src中就是视频地址

    import urllib.request
    # 下载视频
    url_video = 'https://vd2.bdstatic.com/mda-nefkcw7j6tcyj3d2/sc/cae_h264/1652711107788893391/mda-nefkcw7j6tcyj3d2.mp4?v_from_s=hkapp-haokan-nanjing&auth_key=1652715195-0-0-c40f2fec27593bd750198ba84d34f2d5&bcevod_channel=searchbox_feed&pd=1&cd=0&pt=3&logid=0195789412&vid=9094389754794119756&abtest=101830_1-17451_1-3000225_1&klogid=0195789412'
    
    urllib.request.urlretrieve(url_video, '圆月.mp4')

    2. url完整组成

    UA介绍:User Agent中文名为用户代理,简称 UA,它是一个特殊字符串头,使得服务器能够识别客户使用的操作系统 及版本、CPU 类型、浏览器及版本。浏览器内核、浏览器渲染引擎、浏览器语言、浏览器插件等

     url  的组成:

    1. 协议   通信协议(scheme)
      • 协议部分为“http:”,这代表网页使用的是HTTP协议。在Internet中可以使用多种协议,如HTTP,FTP等等本例中使用的是HTTP协议。在"HTTP"后面的“//”为分隔符
      • HTTP协议和HTTPS的区别:HTTPS更加安全
        • HTTP协议:HTTP协议也就是超文本传输协议,是一种使用明文数据传输的网络协议。一直以来HTTP协议都是最主流的网页协议,HTTP协议被用于在Web浏览器和网站服务器之间传递信息,以明文方式发送内容,不提供任何方式的数据加密,如果攻击者截取了Web浏览器和网站服务器之间的传输报文,就可以直接读懂其中的信息。
        • HTTPS协议:为了解决HTTP协议的这一缺陷,需要使用另一种协议:安全套接字层超文本传输协议HTTPS,为了数据传输的安全,HTTPS在HTTP的基础上加入了SSL/TLS协议,SSL/TLS依靠证书来验证服务器的身份,并为浏览器和服务器之间的通信加密。HTTPS协议可以理解为HTTP协议的升级,就是在HTTP的基础上增加了数据加密。在数据进行传输之前,对数据进行加密,然后再发送到服务器。这样,就算数据被第三者所截获,但是由于数据是加密的,所以你的个人信息仍然是安全的。这就是HTTP和HTTPS的最大区别。

        • http默认使用的是80端口,https默认使用的是443端口
    2. 域名   主机(host) 
      • 也可以使用IP地址作为域名使用
    3. 端口号(port)
      • 域名和端口之间使用“:”作为分隔符。端口不是一个URL必须的部分,如果省略端口部分,将采用默认端口
    4. 虚拟路径(path)
      • 从域名后的第一个“/”开始到最后一个“/”为止,是虚拟目录部分。虚拟目录也不是一个URL必须的部分。
    5. 文件名 
      • 从域名后的最后一个“/”开始到“?”为止,是文件名部分,如果没有“?”,则是从域名后的最后一个“/”开始到“#”为止,是文件部分,如果没有“?”和“#”,那么从域名后的最后一个“/”开始到结束,都是文件名部分
    6. 参数  
      • 从“?”开始到“#”为止之间的部分为参数部分,又称搜索部分、查询部分。
      • 参数可以允许有多个参数,参数与参数之间用“&”作为分隔符。
      • 从“#”开始到最后,都是锚部分。锚部分也不是一个URL必须的部分

    3、请求对象的定制

    这里复制百度的UA,放入到代码里

    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/92.0.4515.159 Safari/537.36u'
    }
    # 因为urlopen方法中不能存储字典 所以headers不能传递进去
    # 请求对象的定制
    #注意  英文参数顺序的问题  不能直接写url 和 headers  中间还有data  所以要使用关键字传参
    request = urllib.request.Request(url=url,headers=headers)
    response = urllib.request.urlopen(request)
    content = response.read().decode('utf8')
    print(content)

     说明:UA是模仿从游览器发起的请求,这样才可以获取完整的数据。

    不定制请求对象的情况

    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/92.0.4515.159 Safari/537.36'
    }
    #不定制请求对象
    request = urllib.request.Request(url=url)
    response = urllib.request.urlopen(request)
    content = response.read().decode('utf8')
    print(content)

    输出结果:

     https协议是一个更加安全的协议,UA就是其中一种反爬的手段。如果请求没有携带UA,则获取到的数据不完整。

  • 相关阅读:
    Delphi中TFlowPanel实现滚动条效果
    Delphi组件开发-在窗体标题栏添加按钮(使用MakeObjectInstance(NewWndProc),并处理好多消息)
    减小Delphi的Exe文件大小(11种方法)
    画出太极图
    类似地图的以鼠标为中心缩放图像
    andoid x项目的优化 1
    ICON图标文件解析
    所有语言的Awesome(2)
    获取EIP(汇编语言直接给Delphi变量赋值)
    Qt Windows下链接子系统与入口函数(终结版)(可同时存在main和WinMain函数)
  • 原文地址:https://www.cnblogs.com/Williamls/p/16279290.html
Copyright © 2020-2023  润新知