python 爬虫之urllib 库的相关模块的介绍以及应用

news2024/11/20 10:25:30

在这里插入图片描述

文章目录

  • urllib.request 模块
      • 打开 URL:
      • 发送 HTTP 请求:
      • 处理响应:
  • 应用
      • 如何读取并显示网页内容
      • 提交网页参数
      • 使用HTTP 代理访问页面

urllib.request 模块

在 Python 中,urllib.request 模块是用于处理 URL 请求的标准库模块之一。它提供了一组功能,用于打开、读取和处理 URL,包括发送 HTTP 请求和处理响应。以下是 urllib.request 模块的一些主要功能:

打开 URL:

  1. urllib.request.urlopen(url, data=None, [timeout, ]*, cafile=None, capath=None, cadefault=False, context=None)

    • 用于打开指定的 URL。
    • url 是要打开的 URL 字符串。
    • data 是可选的请求数据,如果需要发送 POST 请求,则可以通过这个参数提供数据。
    • timeout 是可选的超时时间,以秒为单位。
    • cafile, capath, cadefault 用于指定 SSL/TLS 连接的证书。
    • context 用于指定 SSL 上下文。
    from urllib.request import urlopen
    
    with urlopen('https://www.example.com') as response:
        html = response.read()
        print(html)
    

发送 HTTP 请求:

  1. urllib.request.Request(url, data=None, headers={}, origin_req_host=None, unverifiable=False, method=None)

    • 用于构建一个 HTTP 请求对象,可以在 urlopen 中使用。
    • url 是要请求的 URL。
    • data 是可选的请求数据。
    • headers 是可选的请求头字典。
    • method 是可选的请求方法,如 ‘GET’ 或 ‘POST’。
    from urllib.request import Request, urlopen
    
    req = Request('https://www.example.com', headers={'User-Agent': 'Mozilla/5.0'})
    with urlopen(req) as response:
        html = response.read()
        print(html)
    

处理响应:

  1. HTTPResponse 对象

    • urlopen 返回的对象是一个 http.client.HTTPResponse 类型的实例。
    • 提供了读取响应内容、获取响应头、获取状态码等方法和属性。
    from urllib.request import urlopen
    
    with urlopen('https://www.example.com') as response:
        status_code = response.getcode()
        headers = response.getheaders()
        html = response.read()
        print(f"Status Code: {status_code}")
        print(f"Headers: {headers}")
        print(html)
    

这些是 urllib.request 模块中一些主要的功能和方法。使用这个模块,可以在 Python 中轻松处理 URL 请求,获取远程资源的内容。

应用

如何读取并显示网页内容

当你想要读取并显示网页内容时,可以按照以下步骤使用Python的urllib.request库:

  1. **导入urllib.request模块:**首先,导入urllib.request模块,它包含了用于打开URL的功能。

    import urllib.request
    
  2. **指定要读取的网页URL:**在你的代码中指定你想要读取的网页的URL。

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

    'http://www.example.com'替换为你感兴趣的网页的URL。

  3. **打开URL并获取文件对象:**使用urllib.request.urlopen函数打开指定的URL,它返回一个文件对象,你可以使用该对象来读取网页内容。

    with urllib.request.urlopen(url) as response:
        # 在此处执行对网页内容的操作
    

    使用with语句可以确保在处理完网页内容后自动关闭文件对象,这是良好的实践。

  4. **读取网页内容:**使用文件对象的read()方法来读取网页的内容。

    with urllib.request.urlopen(url) as response:
        web_content = response.read()
    

    web_content现在包含了网页的字节内容。

  5. **将字节内容转换为字符串并显示:**使用decode()方法将字节内容转换为字符串,并将其打印出来。

    with urllib.request.urlopen(url) as response:
        web_content = response.read()
        print(web_content.decode('utf-8'))
    

    在这里,假设网页使用UTF-8编码。如果你知道网页使用其他编码,可以相应地调整decode方法的参数。

整个代码示例:

import urllib.request

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

with urllib.request.urlopen(url) as response:
    web_content = response.read()
    print(web_content.decode('utf-8'))

这个代码会打开指定的URL,读取网页内容,然后将其作为字符串显示在控制台上。

提交网页参数

当你需要向网页提交参数时,可以使用HTTP请求中的POST方法。下面是使用Python的requests库的一步步介绍:

  1. **安装requests库:**如果你还没有安装requests库,可以通过以下命令安装:

    pip install requests
    
  2. **导入requests模块:**在你的Python脚本中导入requests模块。

    import requests
    
  3. **指定要提交参数的URL:**在你的代码中指定你要提交参数的网页的URL。

    url = 'http://www.example.com/post_endpoint'
    

    'http://www.example.com/post_endpoint'替换为你要提交参数的实际网页地址。

  4. **准备要提交的参数:**创建一个字典,其中包含你想要提交的参数。

    payload = {'param1': 'value1', 'param2': 'value2'}
    

    这里的payload是一个字典,包含了两个参数param1param2以及对应的值。

  5. **发送POST请求并传递参数:**使用requests.post方法发送POST请求,并通过data参数传递参数。

    response = requests.post(url, data=payload)
    

    在这里,url是你指定的网页地址,data是要提交的参数字典。

  6. **检查响应:**检查服务器的响应,看是否请求成功。

    if response.status_code == 200:
        print('请求成功!')
        print('响应内容:', response.text)
    else:
        print(f'请求失败,状态码: {response.status_code}')
    

    这里我们通过response.status_code检查HTTP响应状态码,如果状态码是200,则表示请求成功。你可以根据实际需要处理不同的状态码。

整个代码示例:

import requests

url = 'http://www.example.com/post_endpoint'

payload = {'param1': 'value1', 'param2': 'value2'}

response = requests.post(url, data=payload)

if response.status_code == 200:
    print('请求成功!')
    print('响应内容:', response.text)
else:
    print(f'请求失败,状态码: {response.status_code}')

这个代码将以POST方式向指定的URL提交参数,并输出服务器的响应。

使用HTTP 代理访问页面

当你想要通过HTTP代理访问页面时,你可以使用Python的requests库,并设置代理。以下是一步步的介绍:

  1. **安装requests库:**如果你还没有安装requests库,可以通过以下命令安装:

    pip install requests
    
  2. **导入requests模块:**在你的Python脚本中导入requests模块。

    import requests
    
  3. **指定要访问的URL:**在你的代码中指定你要访问的网页的URL。

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

    'http://www.example.com'替换为你要访问的实际网页地址。

  4. **指定代理:**设置代理服务器的地址。代理服务器可以是HTTP代理或者HTTPS代理,具体取决于你的代理类型。

    proxy = {
        'http': 'http://your_http_proxy_address',
        'https': 'http://your_https_proxy_address'
    }
    

    your_http_proxy_addressyour_https_proxy_address替换为你实际使用的代理服务器地址。

  5. **发送请求时使用代理:**通过proxies参数将代理传递给requests.getrequests.post等方法。

    response = requests.get(url, proxies=proxy)
    

    在这里,url是你指定的网页地址,proxies是包含了代理地址的字典。

  6. **检查响应:**检查服务器的响应,看是否请求成功。

    if response.status_code == 200:
        print('请求成功!')
        print('响应内容:', response.text)
    else:
        print(f'请求失败,状态码: {response.status_code}')
    

    这里我们通过response.status_code检查HTTP响应状态码,如果状态码是200,则表示请求成功。你可以根据实际需要处理不同的状态码。

整个代码示例:

import requests

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

proxy = {
    'http': 'http://your_http_proxy_address',
    'https': 'http://your_https_proxy_address'
}

response = requests.get(url, proxies=proxy)

if response.status_code == 200:
    print('请求成功!')
    print('响应内容:', response.text)
else:
    print(f'请求失败,状态码: {response.status_code}')

请注意,具体的代理设置可能因你的网络环境和代理类型而有所不同。确保使用你实际网络环境中的正确代理信息。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1210202.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

CSS 实现新拟态(Neumorphism) UI 风格

什么是新拟态(Neumorphism) UI 风格?网上似乎还没有一个准确统一的定义。按照我个人的通俗理解,就是将界面的一部分凸起来,另一部分凹下去,形成的一种错落有致的拟物风格。代表作是乌克兰设计师 Alexander Plyuto 在各平台发布的新…

μC/OS-II---内存管理2(os_core.c)

流程---内存管理扩展 初始化μC/OS-II创建用户起始任务开始多任务调度统计Task创建用户应用程序任务 初始化μC/OS-II void OSInit (void) {OSInitHookBegin(); /* Call port specific initialization code */OS_InitMisc(); …

算法笔记-第七章-链表(未完成)

算法笔记-第七章-链表 链表的遍历链表结点的个数链表的头插法!链表删除元素链表反转例题思路一:原地反转思路二:头插法链表去除重复元素(有些复杂了)思路题目一题目二链表的遍历 #include<cstdio> const int N = 100; struct Node {int data, next;//表示的是当前数据和…

C++语言相关笔记

写在前面 记录一下C的要点&#xff0c;参考的书籍如下&#xff1a; 《C Primer Plus》是偏向教学的工具书&#xff0c;可以视为偏基础&#xff1b;《C Primer》 是偏向工程实践的工具书&#xff0c;可以视为偏进阶&#xff1b;《深度探索C对象模型》则针对C对象模型进行剖析&…

flutter背景图片设置

本地图片设置 1、在配置文件pubspec.yaml中&#xff0c;设置以下代码 assets:- assets/- assets/test/2、如果目录中没有assets文件夹&#xff0c;则创建一个文件夹&#xff0c;并且取名为assets&#xff0c;在此文件夹中存放图片资源即可&#xff0c;如果想分文件夹管理&…

golang中context使用总结

一、context使用注意事项 在使用context时&#xff0c;有一些需要注意的事项&#xff0c;以及一些与性能优化相关的建议&#xff1a; 避免滥用context传递数据&#xff1a;context的主要目的是传递请求范围的数据和取消信号&#xff0c;而不是用于传递全局状态或大量数据。滥用…

ElasticSearch 增删改查操作

本文主要是介绍 ElasticSearch 的文档增删改查和批量操作&#xff0c;同时会介绍一些 REST API 返回状态码的具体含义。 我们先来看下这个表&#xff1a; 这个表包含了 Index、Create、Read、Update、Delete 这五种方法&#xff0c;我们先来看下 CRUD 操作的 HTTP 请求都长什么…

美团拼图滑块

有时候放弃也是一种智慧。 就像这说的一样&#xff0c;美团的拼图滑块&#xff0c;不知道这个缺口该怎么去处理&#xff0c;正常划顶到最外面去了&#xff0c;所以就不知道这个是咋计算的。 先来看看他的这个加密&#xff0c;跟原来的一划到底其实是一样的&#xff0c;难度只是…

php+vue3实现点选验证码

buildadmin 中的点选验证码实现 验证码类 <?phpnamespace ba;use Throwable; use think\facade\Db; use think\facade\Lang; use think\facade\Config;/*** 点选文字验证码类*/ class ClickCaptcha {/*** 验证码过期时间(s)* var int*/private int $expire 600;/*** 可以…

萌宠俱乐部

一、html代码 二、CSS代码 三、效果图 四、继续努力呀&#xff01;&#xff01;&#xff01; 一、html代码 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta name"viewport" content"wi…

如何使用线性模型的【分箱】操作处理非线性问题

让线性回归在非线性数据上表现提升的核心方法之一是对数据进行分箱&#xff0c;也就是离散化。与线性回归相比&#xff0c;我们常用的一种回归是决策树的回归。为了对比不同分类器和分箱前后拟合效果的差异&#xff0c;我们设置对照实验。 生成一个非线性数据集前&#xff0c;…

Java计算数据百分比

public class CalculatePCT {public static void main(String[] args) {System.out.println(getPercent(9, 100));System.out.println(getPercent2(3, 7));}/*** 方式一&#xff1a;使用java.text.NumberFormat实现*/public static String getPercent(int x, int y) {double d1…

ACM练习——第二天

今天又是一天课&#xff0c;满课&#xff0c;很累哈&#xff0c;计组真的挺难的&#xff0c;但是多学学还是可以学明白。行吧&#xff0c;继续进入今天的ACM练习&#xff0c;现阶段都是主要练习Java到C的语言过渡。 因为今天的题目多半都是昨天的延伸&#xff0c;我就不提供Jav…

Java主流分布式解决方案多场景设计与实战

Java的主流分布式解决方案的设计和实战涉及到多个场景&#xff0c;包括但不限于以下几点&#xff1a; 分布式缓存&#xff1a;在Java的分布式系统中&#xff0c;缓存是非常重要的一部分。常用的分布式缓存技术包括Redis、EhCache等。这些缓存技术可以用来提高系统的性能和响应…

2023软件测试面试跳槽必备

你眼中的软件测试岗位是怎样的&#xff1f;大部分人可能会给出这样的回答&#xff1a;“测试&#xff1f;简单啊&#xff0c;没什么技术含量&#xff0c;无非就是看需求、看业务手册、看设计文档、然后点点功能是否实现&#xff0c;麻烦点的就是测试下部署安装是否出现兼容性问…

开讲:长江航道工程局举办首届云表无代码培训班

11月9日至10日&#xff0c;公司联合珠海乐图软件有限公司在总部机关举办了首届云表无代码编程开发初级培训班。公司所属单位工程、成本、财务等相关业务部门及项目部管理人员参加培训&#xff0c;公司总工程师张晏方作开班动员讲话。 张晏方指出&#xff0c;公司自主开发的云表…

java生成docx文档, docx文档动态饼图

背景: 最近接了个需求, 要求生成日报, 大概如下图所示: 其中*表示变量, 看到要动态生成doc给我难受坏了,为什么会有这种需求? 然后看到里面还要动态生成饼图, oh, no.........没有办法, 硬着头皮上吧. 于是就搜了下java生成docx的方式, 看到的, 比较靠谱的一种通过freemake…

【每日一题】1334. 阈值距离内邻居最少的城市-2023.11.14

题目&#xff1a; 1334. 阈值距离内邻居最少的城市 有 n 个城市&#xff0c;按从 0 到 n-1 编号。给你一个边数组 edges&#xff0c;其中 edges[i] [fromi, toi, weighti] 代表 fromi 和 toi 两个城市之间的双向加权边&#xff0c;距离阈值是一个整数 distanceThreshold。 …

[Linux] ssh远程访问及控制

一、ssh介绍 1.1 SSH简介 SSH&#xff08;Secure Shell&#xff09;是一种安全通道协议&#xff0c;主要用于实现远程登录、远程复制等功能的字符接口。SSH 协议包括用户在登录时输入的用户密码、双方之间的通信。 加密数据传输&#xff0c;SSH 是一种建立在应用层和传输层上…

<MySQL> 查询数据进阶操作 -- 聚合查询

目录 一、聚合查询概述 二、聚合函数查询 2.1 常用函数 2.2 使用函数演示 2.3 聚合函数参数为*或列名的查询区别 2.4 字符串不能参与数学运算 2.5 具有误导性的结果集 三、分组查询 group by 四、分组后条件表达式查询 五、MySQL 中各个关键字的执行顺序 一、聚合查询…