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

相关文章
|
8天前
|
数据可视化 DataX Python
Seaborn 教程-绘图函数
Seaborn 教程-绘图函数
39 8
|
8天前
Seaborn 教程-主题(Theme)
Seaborn 教程-主题(Theme)
27 7
|
8天前
|
Python
Seaborn 教程-模板(Context)
Seaborn 教程-模板(Context)
28 4
|
8天前
|
数据可视化 Python
Seaborn 教程
Seaborn 教程
25 5
|
1月前
|
Python
SciPy 教程 之 Scipy 显著性检验 9
SciPy 教程之 Scipy 显著性检验第9部分,介绍了显著性检验的基本概念、作用及原理,通过样本信息判断假设是否成立。着重讲解了使用scipy.stats模块进行显著性检验的方法,包括正态性检验中的偏度和峰度计算,以及如何利用normaltest()函数评估数据是否符合正态分布。示例代码展示了如何计算一组随机数的偏度和峰度。
28 1
|
1月前
|
BI Python
SciPy 教程 之 Scipy 显著性检验 8
本教程介绍SciPy中显著性检验的应用,包括如何利用scipy.stats模块进行显著性检验,以判断样本与总体假设间的差异是否显著。通过示例代码展示了如何使用describe()函数获取数组的统计描述信息,如观测次数、最小最大值、均值、方差等。
29 1
|
1月前
|
数据采集 数据可视化 数据挖掘
深入浅出:使用Python进行数据分析的基础教程
【10月更文挑战第41天】本文旨在为初学者提供一个关于如何使用Python语言进行数据分析的入门指南。我们将通过实际案例,了解数据处理的基本步骤,包括数据的导入、清洗、处理、分析和可视化。文章将用浅显易懂的语言,带领读者一步步掌握数据分析师的基本功,并在文末附上完整的代码示例供参考和实践。
|
1月前
|
Python
SciPy 教程 之 Scipy 显著性检验 6
显著性检验是统计学中用于判断样本与总体假设间是否存在显著差异的方法。SciPy的scipy.stats模块提供了执行显著性检验的工具,如T检验,用于比较两组数据的均值是否来自同一分布。通过ttest_ind()函数,可以获取两样本的t统计量和p值,进而判断差异是否显著。示例代码展示了如何使用该函数进行T检验并输出结果。
29 1
|
1月前
|
Python
SciPy 教程 之 Scipy 显著性检验 3
本教程介绍Scipy显著性检验,包括其基本概念、原理及应用。显著性检验用于判断样本与总体假设间的差异是否显著,是统计学中的重要工具。Scipy通过`scipy.stats`模块提供了相关功能,支持双边检验等方法。
32 1
|
1月前
|
Python
SciPy 教程 之 Scipy 显著性检验 5
显著性检验用于判断样本与总体假设间的差异是否由随机变异引起,或是假设与真实情况不符所致。SciPy通过scipy.stats模块提供显著性检验功能,P值用于衡量数据接近极端程度,与alpha值对比以决定统计显著性。
32 0
下一篇
DataWorks