Python 数据抓取教程:完结篇

简介: Python 数据抓取教程:完结篇

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 网页抓取中的助力程度。

相关文章
|
7天前
|
数据采集 XML API
Python 爬虫数据抓取(10):LXML
Python 爬虫数据抓取(10):LXML
21 1
|
5天前
|
达摩院 语音技术 异构计算
语音识别-免费开源的语音转文本软件Whisper的本地搭建详细教程,python版本是3.805,ffmpeg是专门处理音视频的,ffmpeg的下载链接,现在要求安装python和ffmpeg
语音识别-免费开源的语音转文本软件Whisper的本地搭建详细教程,python版本是3.805,ffmpeg是专门处理音视频的,ffmpeg的下载链接,现在要求安装python和ffmpeg
|
6天前
|
机器学习/深度学习 自然语言处理 TensorFlow
使用Python实现深度学习模型:序列建模与生成模型的博客教程
【7月更文挑战第2天】 使用Python实现深度学习模型:序列建模与生成模型的博客教程
15 1
|
7天前
|
机器学习/深度学习 数据采集 算法
Scikit-Learn基础教程
Scikit-Learn基础教程
13 2
|
11天前
|
Shell Python
Python教程:return和yield的区别
Python教程:return和yield的区别
7 0
Python教程:return和yield的区别
|
4天前
|
Python
Python 中 decimal 模块的用法教程
Python 中 decimal 模块的用法教程
5 0
|
5天前
|
机器学习/深度学习 TensorFlow 算法框架/工具
使用Python实现深度学习模型:迁移学习与领域自适应教程
【7月更文挑战第3天】 使用Python实现深度学习模型:迁移学习与领域自适应教程
9 0
|
10天前
|
机器人 API 开发者
Python基于Mirai开发的QQ机器人保姆式教程(亲测可用)
Python基于Mirai开发的QQ机器人保姆式教程(亲测可用)
|
10天前
|
数据采集 XML 存储
自动核对名单详细教程〖Python版〗
自动核对名单详细教程〖Python版〗
|
2月前
|
存储 安全 API
【Python 基础教程 21】Python3 文件操作全面指南:从入门到精通的综合教程
【Python 基础教程 21】Python3 文件操作全面指南:从入门到精通的综合教程
106 0