使用HTTP客户端在Python中进行网页抓取——笔记

使用HTTP客户端在Python中进行网页抓取

在网页抓取的上下中,HTTP客户端向目标网站发送请求,并检索网站的HTML代码或JSON有效负载等信息。

HTTP客户端并不直接指向代码开发者,而是指在客户端-服务器模型中发送HTTP请求的部分。这个客户端是一个软件程序,例如网页浏览器(如Chrome、Firefox等)或者其他可以发送HTTP请求的程序(这样的程序可以用各种编程语言编写,包括Python)。

当我们编写爬虫程序时,我们编写的代码实际上创建的就是一个这样的HTTP客户端。

Python HTTP库

Python中有许多用来创建HTTP客户端和处理HTTP请求的库,被称为Python HTTP库。

Requests

被称为python中最受欢迎的HTTP库。

功能强大且用户友好,提供了许多便捷的方法用于发送各种HTTP请求。但缺乏对异步执行的支持,对于这种情况,可以使用HTTPX库。

Python Requests 库的主要特点:

  • 保持活动状态和连接池
  • 浏览器式SSL验证
  • HTTP(S)代理支持
  • 连接超时
  • 分块请求

安装请求

pip install requests

代码示例

向目标网站发送请求,检索器HTML代码,并将结果打印到控制台。

import requestsresponse = requests.get('https://news.ycombinator.com')print(response.text)
  1. import requests

    这行代码导入了Python的requests库。这是Python中最常用的HTTP客户端库,用于发送各种类型的HTTP请求。

  2. response = requests.get('https://news.ycombinator.com')

    这行代码发送一个HTTP GET请求到URL “https://news.ycombinator.com”。GET是一种HTTP方法,我们用它来请求服务器发送一些特定资源。在这个案例中,这个资源就是"https://news.ycombinator.com"首页的HTML内容。

    requests.get()函数返回一个Response对象,代表了服务器的响应数据。这个Response对象有许多属性和方法可以让我们访问响应的详细信息,比如状态码、头部、内容等。

  3. print(response.text)

    这行代码打印了响应对象的文本内容。Response.text属性包含了服务器返回的内容,这通常是一个字符串(对于HTML或JSON响应)。在这个案例中,它是"https://news.ycombinator.com"首页的HTML代码

HTTPX

HTTPX是个功能齐全的Python HTTP客户端库,包括集成的命令行客户端,同时提供同步和异步API。

HTTPX的主要特点

  • 广泛请求兼容的API
  • 继承的命令行客户端
  • 标准同步接口,但如果需要,还可以支持异步
  • 完整类型注释

安装HTTPX

pip install httpx

代码示例

Requests 示例类似,我们将向目标网站发送请求,检索页面的 HTML 并将其与请求状态代码一起打印到控制台。

HTTPX同步代码示例

import httpxresponse = httpx.get('https://news.ycombinator.com')status_code = response.status_code
html = response.textprint(status_code)
print(html[:200])  # print first 200 characters of html
  1. import httpx: 这行代码是Python语言中的模块导入语句,它导入了httpx库,这是一个强大的HTTP客户端库,支持静态(同步)和异步HTTP请求,并且自动处理连接和线程池,因此可以更方便地发送请求和处理响应。
  2. response = httpx.get('https://news.ycombinator.com'): 这行代码通过httpx库的get方法向"https://news.ycombinator.com"发送了一个HTTP GET请求,并将响应存储在了变量response中。HTTP GET请求是HTTP协议的一个方法,它用于请求服务器上指定资源的数据(在这种情况下,资源是网站的HTML内容)。
  3. status_code = response.status_code: 这行代码获取了HTTP响应的状态码并将其存储在变量status_code中。HTTP状态码是服务器在响应中返回的一个三位数字,它表示了请求的处理情况,比如200表示请求成功,404表示请求的资源找不到。
  4. html = response.text: 这行代码从响应中提取了HTML文本并将其存储在变量html中。可以通过response.text获取响应的文本。
  5. print(status_code): 这行代码在控制台上输出状态码。
  6. print(html[:200]): 这行代码在控制台上输出HTML内容的前200个字符。在Python字符串中,使用[a:b]可以截取字符串的一部分,此处是从头截取到第200个字符。

利用 AsyncIO 的 HTTPX 异步代码示例

import asyncio
import httpxasync def main() -> None:async with httpx.AsyncClient() as client:response = await client.get('https://news.ycombinator.com')status_code = response.status_codehtml = response.textprint(status_code)print(html[:200])  # print first 200 characters of htmlif __name__ == '__main__':asyncio.run(main())
  1. import asyncio, httpx:这行代码导入了Python的asynciohttpx模块。asyncio是Python的一个用于编写单线程并发代码的库,使用事件循环驱动的协程。httpx是一个强大的,支持同步或异步的请求的HTTP库。
  2. async def main() -> None::异步定义函数main(), 这是一个协程函数,用async def来声明。差异是异步函数在调用时不会立即执行,而是返回一个协程对象。
  3. async with httpx.AsyncClient() as client::此行代码创建了httpx.AsyncClient()的上下文管理器,该客户端支持与服务器建立持久连接,重用SSL会话,并在全局范围内提供HTTP / 2和连接池。
  4. response = await client.get('https://news.ycombinator.com')await关键字用于等待协程的完成。在这里,我们在异步客户端上运行get方法并等待响应。这样就不必等待服务器的响应,我们的程序可以在此期间执行其他任务。
  5. status_code = response.status_codehtml = response.text:这两行代码跟上述代码解析相同,获取响应的状态码和消息
  6. print(response.status_code)print(html):同样跟上述解析相同,打印状态码和获取到的网页内容的前200个字符。
  7. if __name__ == '__main__':asyncio.run(main()):如果Python文件以模块方式被别的文件调用时,其__name__为模块名,而如果单独执行这个文件的话,__name__的值就是'__main__'。此处asyncio.run(main())是异步I/O的一个关键步骤,他可以并发执行任务,提高整体代码的执行效率。

HTTPX的特性

  1. HTTP/1.1和HTTP/2的支持:HTTP/2可以更快地加载网页,因为它允许在一个连接上处理多个请求和响应。这并非异步编程,而是连接复用。
  2. 用于同步代码和异步代码的客户端接口:"httpx"有两种客户端:httpx.Client用于同步代码,httpx.AsyncClient用于异步代码。
  3. 请求内容的直接序列化/反序列化:Requests库需要手动序列化或反序列化JSON内容,而"HTTPX"可以直接处理。

参考链接:https://blog.apify.com/web-scraping-python/#preparing-python-coding-environment-for-web-scraping

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

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

相关文章

电路仿真软件:点亮教学新篇章,十大便利助力高效学习

在信息化时代的浪潮中,电路仿真软件以其独特的优势,逐渐在教学领域崭露头角。它不仅能够帮助学生更好地理解电路知识,还能提升教师的教学效果。接下来,让我们一起探讨电路仿真软件对教学带来的十大便利。 一、直观展示电路原理 电…

Keras深度学习框架第二十四讲:KerasNLP概述

1、KerasNLP简介 KerasNLP是一个与TensorFlow深度集成的库,旨在简化NLP(自然语言处理)任务的建模过程。它提供了一系列高级API,用于预处理文本数据、构建序列模型和执行常见的NLP任务,如情感分析、命名实体识别和机器…

风控指南:国内车险欺诈呈现四大趋势

目录 车险欺诈呈现内外勾结的团伙化 防范车险欺诈需要多重合作 保险企业需要提升反欺诈能力 监管部门需要加强协同合作 2024年4月11日,国家金融监督管理总局官网发布国家金融监督管理总局关于《反保险欺诈工作办法(征求意见稿)》公开征求意见…

PCL平面多边形可视化

1、背景介绍 多边形是一个在二维平面上由直线段(称为边或侧)首尾顺次连接围成的封闭图形。这些直线段也称为多边形的边,而它们的交点称为多边形的顶点或角。在点云边缘点提取后,有时候需要将其进行可视化,如下图所示。…

【Mac】跑猫RunCat for mac(菜单栏Cpu可视化监测工具) v10.3免费版安装教程

软件介绍 RunCat是一款为菜单栏提供关键帧动画的软件。动画速度会根据Mac的CPU使用情况而变化。奔跑的小猫通过运行速度告诉您Mac的CPU使用率。 这是一款好玩的软件,可以为您的Mac使用添加一点小确幸。感兴趣的朋友可以试试哦。 安装步骤 1.打开安装包&#xff0…

贵州大学24计算机考研数据速览,国家重点实验室22408复试线285分!贵州大学计算机考研考情分析!

贵州大学计算机科学与技术学院坐落在贵州大学北校区(贵阳花溪)。 学院现有教职工139人,其中专职教师126人,教授17人,副教授37人,讲师46人,高级实验师4人,实验师17人。具有博士学位的…

诺兰电影欣赏笔记

2012:蝙蝠侠:黑暗骑士崛起(Batman 3: The Dark Knight Rises) 播放平台:优酷

Django 入门教程

1. Django简介 基本介绍 Django 是一个由 Python 编写的一个开放源代码的 Web 应用框架。 MVC 与 MVT 模型 MVC 模型 MVC 模式(Model–view–controller)是软件工程中的一种软件架构模式,把软件系统分为三个基本部分:模型&am…

图论(三)(最小生成树)

一、图的表示(简要概述) 对于图G(V,E)( V 为节点的集合,E 为边的集合 V*V 的子集)有两种表示方法:邻接链表和邻接矩阵,两种表示方法既可以表示有向图&#x…

【C++STL详解(四)------vector的模拟实现】

文章目录 vector各函数接口总览vector当中的成员变量介绍默认成员函数构造函数1构造函数2构造函数3拷贝构造函数赋值运算符重载函数析构函数 迭代器相关函数begin和end 容量和大小相关函数size和capacityreserveresizeempty 修改容器内容相关函数push_backpop_backinserterases…

掌握安全渗透测试:利用永恒之黑漏洞获取Windows 10系统访问权限

以下是利用永恒之黑漏洞对Windows 10进行渗透测试的步骤: 环境介绍 靶机:IP地址为192.168.1.60,运行Windows 10 1903版本。攻击机:IP地址为192.168.1.53。 靶机准备 检查Windows 10版本号:确保靶机运行的Windows 1…

鼠标滚轮使用时上下跳动的解决方法

前阵子鼠标滚轮使用时总会出现上下跳动比如向下滚动会往上反弹或者是在当前框架卡住但颤动的情况,这个问题困扰了我很久,试过了很多设置和驱动方面的办法都没解决,因此大概率是滚轮那有脏东西了。最后终于在一个答复下面看到了一种不用拆开修…

基于open3d加载kitti数据集bin文件

前言 在自动驾驶领域,Kitti数据集是一个非常流行的点云数据集,广泛用于3D目标检测、跟踪和其他相关研究。Open3D是一个强大的开源库,专门用于处理和可视化三维数据。本文将介绍如何使用Open3D来加载和可视化Kitti数据集中的.bin文件。 准备…

类脑计算和量子计算、人工智能的关系

According to www.iAsk.ai Ask Ai Search Engine: 类脑计算、量子计算和人工智能是三个不同但相关的领域。它们在不同层面上探索和利用了不同的计算模型和技术,但都旨在推动计算能力的发展和创新。 类脑计算是一种受到人脑神经系统启发的计算模型。它试图通过模拟…

页面置换算法

一、实验目的: 通过编写一个页面置换算法的模拟程序,深入理解并比较最佳置换算法、先进先出算法和最近最久未使用算法在操作系统中的应用和性能差异。同时,通过实验,加深对操作系统中内存管理相关概念的理解。 实验设备与实验环境…

并查集Java实现以及leetcode例题

Java 模板 public class UnionFindSet {// 节点数private int N 1005;// 每个节点的父节点private int[] father new int[N];/*** 并查集初始化*/public void init() {for (int i 0; i < N; i) father[i] i;}/*** 查询节点的父节点下标&#xff08;路径压缩&#xff09…

时政|杂粮产业

政策支持 《新一轮千亿斤粮食产能提升行动方案&#xff08;2024—2030年&#xff09;》明确&#xff0c;按照“巩固提升口粮、主攻玉米大豆、兼顾薯类杂粮”的思路&#xff0c;因地制宜发展马铃薯、杂粮杂豆等品种&#xff0c;根据市场需求优产稳供。 产地发展 河北省石家庄…

工业路由器在工厂数字化的应用及价值

随着科技的飞速发展&#xff0c;数字化转型已成为工厂提高效率、降低成本、实现智能化管理的关键途径。在这个过程中&#xff0c;工业路由器凭借其独特的优势&#xff0c;正逐渐成为工厂数字化建设不可或缺的核心组件。本文将深入探讨工业路由器在工厂数字化中的应用及价值&…

linux与windows脚本格式必须转换,linux只有LF

如果windows下的脚本在linux下直接执行&#xff0c;则会造成无穷的错误。 在文本处理中, CR, LF, CR/LF是不同操作系统上使用的换行符. Dos和windows&#xff1a; 采用回车换行CR/LF表示下一行. UNIX/Linux &#xff1a; 采用换行符LF表示下一行. MAC OS &#xff1a; 采用回车…

作业39 sqrt应用

目录 判断完全平方数 题目描述 输出所有因数 题目描述 因子求和 题目描述 判断素数 题目描述 判断完全平方数 题目描述 输入一个整数&#xff0c;判断他是否是完全平方数&#xff0c;如果是&#xff0c;输出yes&#xff0c;否则输出no 样例 样例…