网络爬虫之-Bluemoss

Bluemoss 是一个用于基于模板的网页抓取的 Python 框架,旨在简化从网页中提取数据的过程。它通过创建 Node 对象来定义抓取规则,允许用户指定从哪些 HTML 标签中提取数据、如何转换和结构化这些数据。以下是 bluemoss 的主要特点和使用方式的介绍:

主要特点

  1. 基于模板的抓取
  • Bluemoss 使用 Node 对象作为抓取的“配方”,描述要从哪些 HTML 标签中提取数据,以及如何处理和格式化这些数据。
  • 支持灵活的数据提取和转换,适合各种网页结构。
  1. XPath 支持
  • Bluemoss 使用 XPath 1.0 来定位 HTML 标签,即使不熟悉 XPath,用户也可以借助工具(如 ChatGPT)快速学习和生成所需的 XPath 表达式。
  1. 灵活的过滤和转换
  • 提供 filter 参数,允许用户指定抓取特定标签(如第一个、第二个或全部匹配的标签)。
  • 支持 transform 函数,用于在抓取后对数据进行自定义处理(如提取 URL 中的特定部分)。
  • 支持 Range 类,用于选择特定索引范围的标签,甚至可以反向排序。
  1. 结构化输出
  • 可以将抓取结果存储为字典、列表或其他结构化格式,方便后续处理。
  • 例如,可以将抓取的公司名称存储在字典的特定键下。
  1. 简单易用
  • 提供直观的 API,适合初学者和有经验的开发者。
  • 通过简单的代码即可实现复杂的抓取任务。

安装

Bluemoss 可以通过 pip 安装:

pip install bluemoss

使用示例

以下是一些基于 bluemoss 官方文档的示例,展示如何使用该库抓取数据。假设有以下 HTML 文档:

<html>
  <body>
    <li><a href="/portfolio?company=apple">Apple</a><div class="location_us"><p>Cupertino</p></div></li>
    <li><a href="/portfolio?company=google">Google</a><div class="location_us"><p>Mountain View</p></div></li>
    <li><a href="/portfolio?company=deepmind">DeepMind</a><div class="location_uk"><p>London</p></div></li>
  </body>
</html>

示例 1:抓取第一个 <a> 标签的文本

from bluemoss import Node, scrape

node = Node('a')  # 定位 <a> 标签
result = scrape(node, HTML)  # HTML 是上述 HTML 字符串
print(result)  # 输出: 'Apple'

示例 2:抓取第二个美国公司总部

node = Node('div[contains(@class, "location_us")]', filter=1)  # 定位第二个 class 包含 "location_us" 的 div
result = scrape(node, HTML)
print(result)  # 输出: 'Mountain View'

示例 3:抓取所有美国公司总部

node = Node('div[contains(@class, "location_us")]', filter=None)  # 抓取所有匹配的标签
result = scrape(node, HTML)
print(result)  # 输出: ['Cupertino', 'Mountain View']

示例 4:抓取公司 ID(从 href 属性中提取)

def get_company_id(href: str) -> str:
    return href.split('=')[-1]  # 从 href 中提取 company ID

node = Node('a', extract='href', transform=get_company_id)  # 提取 href 属性并应用转换
result = scrape(node, HTML)
print(result)  # 输出: 'apple'

示例 5:将抓取结果存入字典

node = Node('a', key='companies')  # 将结果存入字典的 'companies' 键
result = scrape(node, HTML)
print(result)  # 输出: {'companies': 'Apple'}

高级功能

  • 过滤范围:使用 Range 类选择特定索引范围的标签。例如,Node('a', filter=Range(1, 3)) 抓取索引 1 到 2 的 <a> 标签。
  • 反向排序:通过 Range 对象的 reverse=True 参数,可以反向抓取数据。
  • 属性提取:支持提取 HTML 标签的属性(如 href),并可通过 Ex 枚举(如 Ex.HREF)简化操作。

适用场景

  • 数据采集:从网页中提取结构化数据,如公司名称、价格、评论等。
  • 自动化任务:结合其他工具,定期抓取网页数据用于分析或监控。
  • 学习和研究:适合初学者学习网页抓取,也适合开发者构建复杂的抓取逻辑。

文档和资源

  • GitHub 仓库:https://github.com/LucaTabone/bluemoss
  • 官方文档:https://bluemoss.readthedocs.io
  • PyPI:https://pypi.org/project/bluemoss/

注意事项

  • XPath 学习:如果不熟悉 XPath,可以使用 ChatGPT 或其他工具生成合适的表达式。
  • 合法性:抓取网页时需遵守目标网站的服务条款,避免违反法律或道德规范。
  • 依赖:确保安装了必要的依赖(如 lxml),以支持 XPath 和 HTML 解析。

Bluemoss 是一个轻量且强大的工具,适合需要快速、灵活抓取网页数据的开发者。通过简单的配置和强大的功能,它可以大大简化网页抓取任务。

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注