GraphQL接口采集:自动化发现和提取隐藏数据字段

爬虫代理

本文将围绕 GraphQL接口采集 展开,重点介绍如何自动化发现和提取隐藏数据字段,使用 requests + Session 来构造 GraphQL 请求,配合爬虫代理、Cookie 和 User-Agent 设置,实现对 Yelp 商家信息的精准抓取。文章分为以下五个部分:

  • 错误示例:展示常见盲目爬取方式及其弊端
  • 正确姿势:基于 GraphQL API 的最佳实践步骤和示例代码
  • 原因解释:解析 GraphQL 抓取相比传统抓取的优势
  • 陷阱提示:讲解可能遇到的反爬与限流陷阱
  • 模板推荐:提供可复用的代码模板,方便中高级用户快速上手

通过本文,你将掌握从调试网络请求到高效采集隐藏字段的全流程技巧,避免常见误区,并获得一份可直接投入使用的 Python 模板。

错误示例

盲目解析页面 HTML

很多用户在不了解 GraphQL 机制时,仍然用传统的 BeautifulSoup 解析 Yelp HTML 页面,然后通过正则或 CSS Selector 抽取数据。这种方式弊端明显:

  1. 无法获取隐藏字段:Yelp 许多数据(如商家详细属性、内部 ID)仅在 GraphQL 响应中存在,HTML 中压根不包含。
  2. 解析成本高:页面嵌套层级多,维护成本极高,一次页面结构调整可能导致抓取全部失效。
  3. 带宽浪费:下载整页 HTML,提取部分数据,浪费网络与 IO 资源。
# 错误示例:直接抓取 HTML,再用 BeautifulSoup 解析
import requests
from bs4 import BeautifulSoup

resp = requests.get('https://www.yelp.com/search?find_desc=coffee&find_loc=San%20Francisco')
soup = BeautifulSoup(resp.text, 'html.parser')
for card in soup.select('.container__09f24__21w3G'):
    name = card.select_one('.link__09f24__1kwXV').text
    rating = card.select_one('.i-stars__09f24__1T6rz')['aria-label']
    # 隐藏字段无法获取……
    print(name, rating)

正确姿势

1. 利用浏览器调试定位 GraphQL 请求

打开浏览器开发者工具,切换到 Network → XHR/Fetch,输入关键词后观察到向 https://www.yelp.com/graphql 的 POST 请求,里面包含 operationName、query、variables 三部分内容。

2. 构造 GraphQL 查询

在抓包中复制请求体或手动构造,只请求所需字段(商家名称、评分、评论、地址及隐藏字段)。

3. 使用 requests.Session 设置爬虫代理、Cookie 和 User-Agent

import requests, random
im
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值