码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • 6.每天进步一点点---Python爬虫urllib库


    文章未完成待续

    urllib 库是 Python 内置的一个 HTTP 请求库。在 Python 2.x 中,是由 urllib 和 urllib2 两 个库来实现请求发送的,在 Python 3.x 中,这两个库已经合并到一起,统一为 urllib 了。

    urllib 库由四个模块组成。

    • request 模块:打开和浏览 URL 中的内容。
    • error 模块:包含 urllib.request 发生的错误或异常。
    • parse 模块:解析 URL。
    • robotparser 模块:解析 robots.txt 文件。

    1.发送请求

    一个简单的模拟访问百度首页的例子,代码示例如下

    import urllib.request
    
    resp = urllib.request.urlopen("http://www.baidu.com")
    print(resp)
    print(resp.read())
    
    • 1
    • 2
    • 3
    • 4
    • 5

    代码执行结果如下

    在这里插入图片描述

    通过 urllib.request 模块提供的 urlopen()函数,我们构造一个 HTTP 请求,从上面的结 果可知,urlopen()函数返回的是一个 HTTPResponse 对象,调用该对象的 read()函数可以获 得请求返回的网页内容。read()返回的是一个二进制的字符串,明显是无法正常阅读的,要调用 decode(‘utf-8’)将其解码为 utf-8 字符串。这里顺便把 HTTPResponse 类常用的方法和属 性打印出来,我们可以使用 dir()函数来查看某个对象的所有方法和属性。修改后的代码如下:

    import urllib.request
    
    resp = urllib.request.urlopen("http://www.baidu.com")
    print("resp.geturl:", resp.geturl())
    print("resp.msg:", resp.msg)
    print("resp.status:", resp.status)
    print("resp.version:", resp.version)
    print("resp.reason:", resp.reason)
    print("resp.debuglevel:", resp.debuglevel)
    print("resp.getheaders:", resp.getheaders()[0:2])
    print(resp.read().decode('utf-8'))
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11

    执行结果如下

    在这里插入图片描述

    另外,有一点要注意,在 URL 中包含汉字是不符合 URL 标准的,需要进行编码,代 码示例如下

    urllib.request.quote('http://www.baidu.com') 
    # 编码后:http%3A//www.baidu.com
    urllib.request.unquote('http%3A//www.baidu.com') 
    # 解码后:http://www.baidu.com
    
    • 1
    • 2
    • 3
    • 4

    2.抓取二进制文件

    直接把二进制文件写入文件即可,代码示例如下

    import urllib.request
    
    pic_url = "https://www.baidu.com/img/bd_logo1.png"
    pic_resp = urllib.request.urlopen(pic_url)
    pic = pic_resp.read()
    with open("bd_logo.png", "wb") as f:
        f.write(pic)
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    3.模拟GET和POST请求

    4.修改请求头

    5.设置连接超时

    6.延迟提交数据

    7.设置代理

    8.Cookie

    9.urllib.parse模块

    10.urllib.error异常处理模块

    11.urllib.robotparser模块

  • 相关阅读:
    Spring-IOC-@Value和@PropertySource用法
    1、设计模式的简介
    Hadoop-28 ZooKeeper集群 ZNode简介概念和测试 数据结构与监听机制 持久性节点 持久顺序节点 事务ID Watcher机制
    emqx启用JWT令牌认证(包含hmac-based和public-key)
    Ubuntu server 24 (Linux) 安装部署smartdns 搭建智能DNS服务器
    机械设备行业调研:纳米发电机市场规模分析及发展前景预测
    002.组合|||——回溯算法
    基于极狐GitLab OpenAPI 开发一个仿dbt的版本管理WebIDE
    [vue3+elementuiplus]el-select下拉框会自动触发校验规则的最强解决方案
    Log4j2远程代码执行漏洞靶场复现(CVE-2021-44228)
  • 原文地址:https://blog.csdn.net/u014096024/article/details/128167892
  • 最新文章
  • 攻防演习之三天拿下官网站群
    数据安全治理学习——前期安全规划和安全管理体系建设
    企业安全 | 企业内一次钓鱼演练准备过程
    内网渗透测试 | Kerberos协议及其部分攻击手法
    0day的产生 | 不懂代码的"代码审计"
    安装scrcpy-client模块av模块异常,环境问题解决方案
    leetcode hot100【LeetCode 279. 完全平方数】java实现
    OpenWrt下安装Mosquitto
    AnatoMask论文汇总
    【AI日记】24.11.01 LangChain、openai api和github copilot
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1
正则表达式工具 cron表达式工具 密码生成工具

京公网安备 11010502049817号