前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Python 数据抓取教程:完结篇

Python 数据抓取教程:完结篇

作者头像
数据科学工厂
发布2024-07-16 16:45:44
890
发布2024-07-16 16:45:44
举报
文章被收录于专栏:数据科学(冷冻工厂)

Socket

Socket是一种工具,用于将多个设备连接起来,实现它们之间的数据交流。在这个过程中,会用到一个中介服务器,它负责在设备之间传递信息,但不允许设备之间直接建立联系。

现在,如何使用套接字发出 HTTP 请求?嗯,可以通过打开套接字来完成。让我们通过一个简单的Python代码来理解。

代码语言:javascript
复制
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。

代码语言:javascript
复制
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 请求。

代码语言:javascript
复制
// 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。

代码语言:javascript
复制
import mechanicalsoup

browser = mechanicalsoup.StatefulBrowser()

browser 对象将允许我们输入命令而无需创建新变量。现在,我们要打开目标 URL。

代码语言:javascript
复制
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 网页抓取中的助力程度。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2024-07-05,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 冷冻工厂 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • Socket
  • Urllib3
  • MechanicalSoup
  • 总结
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档