网站首页 > 技术文章 正文
Socket
Socket是一种工具,用于将多个设备连接起来,实现它们之间的数据交流。在这个过程中,会用到一个中介服务器,它负责在设备之间传递信息,但不允许设备之间直接建立联系。
现在,如何使用套接字发出 HTTP 请求?嗯,可以通过打开套接字来完成。让我们通过一个简单的Python代码来理解。
import socket
sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
sock.connect((“www.google.com", 80))
sock.send(b”GET / HTTP/1.1\r\nHost:www.google.com\r\n\r\n")
response = sock.recv(4096)
sock.close()
print(response.decode())
这段代码分为七个部分,我们将逐一进行详细解析。
- 首先,我们需要导入套接字库。
- 接着,我们定义了一个套接字构造函数,它需要两个参数:套接字家族和套接字类型。
- 然后,我们指定了一个网址,用于建立网络连接。你可以根据需要选择任何有效的网址。
- 接下来,我们发起了一个 GET 请求。这个请求最初是以普通文本格式存在的,但通过 .send() 方法,我们将其转换为字节格式以便于发送。
- 作为客户端,我们在这里捕获服务器的响应。我们设置接收的数据量为4096字节,以确保能够获取尽可能多的信息。
- 一旦从服务器接收到所有数据,我们便关闭了连接,这是完成通信的一个必要环节。
- 最后,我们打印出了服务器的响应内容。
Urllib3
Urllib3 是 Python 标准库中的一个官方 HTTP 请求库。它之所以被认为是官方的,是因为与 requests 库不同,它是 Python 的核心组成部分。如果你希望减少外部依赖,可以选择使用 urllib3。这个库包括五个主要模块:
- request — 主要用来打开网络链接。
- response — 这是 request 模块内部使用的,你通常不需要直接操作。
- error — 提供了 request 模块所需的错误处理类。
- parse — 负责将 URL 分解成协议、主机名、端口号、路径等组成部分。
- robotparser — 用于解析 robots.txt 文件,以了解网站的爬虫协议。
接下来,我们将通过一段简单的代码示例来学习如何使用 urllib3。
import urllib3
http = urllib3.PoolManager()
r = http.request(‘GET’, ‘https://www.scrapingdog.com/robots.txt')
print(r.status)
print(r.data)
步骤看起来与请求库类似。 PoolManager 跟踪许多连接。然后我们向 robots.txt URL 发送一个普通的 GET 请求。我们甚至可以使用 urllib3 发送 POST 和 DELETE 请求。
// POST request
import urllib3
http = urllib3.PoolManager()
r = http.request(‘POST’, ‘http://httpbin.org/post', fields={“Title”: “Scrapingdog”, “Purpose”: “Web Scraping API”, “Feature”: “Fastest Web Scraper”})
print(r.status)
print(r.data)
fields 参数会将数据从客户端发送到服务器。我们正在发送一个 JSON 对象。服务器将发送响应以确认数据已添加到其数据库中。
作为初学者,您很有可能不会使用 urllib3 进行网页抓取。您很可能会使用请求。但与 requests 相比,使用 urllib3 有一定的优势。对于解析数据,您可以使用 BS4 或 RegEx。
MechanicalSoup
它如同 Beautiful Soup 4(BS4)的衍生物,因为它需要借助 BS4 的能力来实现自动化处理。它使我们能够用更简洁的代码完成更多的任务。它不仅能够自动化网页抓取,还能自动处理页面重定向,并且具备发送和存储 cookie 的功能。
让我们通过一些 Python 代码来初步探索 MechanicalSoup。
import mechanicalsoup
browser = mechanicalsoup.StatefulBrowser()
browser 对象将允许我们输入命令而无需创建新变量。现在,我们要打开目标 URL。
url=”https://www.scrapingdog.com"
browser.open(url)
.open() 将返回一个请求类型的对象。响应,这是由于 Mechanical Soup 正在使用 requests 模块进行调用。
browser.get_current_page() 函数可以获取到当前页面的 HTML 源代码。此外,它还提供了多种方法,例如 .find_all() 和 .select_form(),这些方法可以帮助我们在 HTML 数据中查找特定的元素或标签。总的来说,这个库为我们提供了一种新颖的网页抓取方式。
总结
我们探讨了八种 Python 库,它们能够协助你进行网页抓取。每种库都有其独特的长处和短板。一些库操作简便但抓取效果有限;另一些库可能起初难以掌握,但一旦你完全理解了它们,它们将使你能够迅速高效地完成任务,就像使用正则表达式那样。
我制作了一个表格,用以简要介绍这些库的概况。我根据它们的难易程度、使用频率和应用场景进行了评分,并给出了 1 到 5 的评分,以帮助你了解它们在 Python 网页抓取中的助力程度。
猜你喜欢
- 2025-03-11 Python开发的自动上传采集工具,轻松采集网站数据
- 2025-03-11 详细介绍一下Python中如何使用来创建爬虫?
- 2025-03-11 一篇文章教会你使用Python定时抓取微博评论
- 2025-03-11 Python性能监控实战,掌握性能指标采集
- 2025-03-11 Scrapy爬虫框架 批量抓取数据轻轻松松啦~
- 2025-03-11 自动化测试实战篇:基于Python实践性能指标结果自动采集工具
- 2025-03-11 从0教你用Python写网络爬虫,内容详细代码清晰,适合入门学习
- 2025-03-11 突破某易云的JS逆向,利用Python采集整站数据
- 2025-03-11 我背着女朋友,用 Python 偷偷抓取了她的行踪
- 2025-03-11 免Python也能网页抓取:用AI自动完成 HTML 解析和数据提取
- 265℃Python短文,Python中的嵌套条件语句(六)
- 264℃python笔记:for循环嵌套。end=""的作用,图形打印
- 263℃PythonNet:实现Python与.Net代码相互调用!
- 259℃Python实现字符串小写转大写并写入文件
- 257℃Python操作Sqlserver数据库(多库同时异步执行:增删改查)
- 117℃原来2025是完美的平方年,一起探索六种平方的算吧
- 98℃Python 和 JavaScript 终于联姻了!PythonMonkey 要火?
- 90℃Ollama v0.4.5-v0.4.7 更新集合:Ollama Python 库改进、新模型支持
- 最近发表
- 标签列表
-
- python中类 (31)
- python 迭代 (34)
- python 小写 (35)
- python怎么输出 (33)
- python 日志 (35)
- python语音 (31)
- python 工程师 (34)
- python3 安装 (31)
- python音乐 (31)
- 安卓 python (32)
- python 小游戏 (32)
- python 安卓 (31)
- python聚类 (34)
- python向量 (31)
- python大全 (31)
- python次方 (33)
- python桌面 (32)
- python总结 (34)
- python浏览器 (32)
- python 请求 (32)
- python 前端 (32)
- python验证码 (33)
- python 题目 (32)
- python 文件写 (33)
- python中的用法 (32)