当前位置: 首页 > wzjs >正文

做毕设网站网推怎么做最有效

做毕设网站,网推怎么做最有效,网站适配手机怎么做,济宁北湖旅游度假区建设局网站本文将围绕 GraphQL接口采集 展开,重点介绍如何自动化发现和提取隐藏数据字段,使用 requests Session 来构造 GraphQL 请求,配合爬虫代理、Cookie 和 User-Agent 设置,实现对 Yelp 商家信息的精准抓取。文章分为以下五个部分&…

爬虫代理

本文将围绕 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 BeautifulSoupresp = 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').textrating = 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
import json# 1. 配置爬虫代理(亿牛云爬虫代理示例 www.16yun.cn)
proxy_host = "proxy.16yun.cn"
proxy_port = "31111"
proxy_user = "16YUN"
proxy_pass = "16IP"
proxy_meta = f"http://{proxy_user}:{proxy_pass}@{proxy_host}:{proxy_port}"proxies = {"http": proxy_meta,"https": proxy_meta
}# 2. 创建会话,并设置 Cookie 和 UA
session = requests.Session()
session.proxies.update(proxies)
session.headers.update({"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 ""(KHTML, like Gecko) Chrome/90.0.4430.85 Safari/537.36","Content-Type": "application/json",# 如需模拟登录后的 Cookie,可通过 session.cookies.update(...)
})
# 可选:保持或强制切换 IP
session.headers["Proxy-Tunnel"] = str(random.randint(1, 100000))# 4. 构造 GraphQL 查询体
graphql_query = """
query SearchBusiness($term: String!, $location: String!, $limit: Int!) {search(term: $term, location: $location, limit: $limit) {business {idnameratinglocation { address1 city state zip_code }review_count# 隐藏字段示例hiddenFields { fieldKey fieldValue }}}
}
"""
variables = {"term": "coffee","location": "San Francisco, CA","limit": 10
}
payload = {"query": graphql_query, "variables": variables}# 5. 发送请求并解析结果
resp = session.post("https://www.yelp.com/graphql", json=payload)
data = resp.json()
for biz in data["data"]["search"]["business"]:print(json.dumps(biz, ensure_ascii=False, indent=2))

该方案中,使用 Session 自动管理连接池和 Cookie( session.cookies ,并可持久化保存),通过精确的 GraphQL 查询一次获取所有目标字段,避免无效下载和解析。

原因解释

  • 精确请求:GraphQL 允许客户端声明所需字段,减少数据量和网络开销。
  • 高效维护:接口稳定,返回结构化 JSON,不易因前端 HTML 改动而失效。
  • 支持隐藏数据:GraphQL 查询可访问 API 内部字段(如 hiddenFields),传统解析方法难以获取。

陷阱提示

  1. API 限速:Yelp GraphQL 按数据点(points)限流,每 24h 限额 25000 点,超额后请求会被拒绝。
  2. 禁用 Introspection:部分生产环境关闭 introspection,需要逆向抓包获取请求模板。
  3. Auth/Header 校验:Yelp 可能校验 Authorization 或自定义头部,抓包时需完整复制所有请求头。
  4. Cookie 失效:若需登录状态,可先用 session.get 模拟登录,或手动设置 session.cookies,否则部分字段可能为空。

模板推荐

以下是可直接复用的测试模板,适合中高级用户集成到项目中:

import requests, random, jsondef create_session_with_proxy():# 亿牛云代理配置 www.16yun.cnproxy_meta = "http://{user}:{pass}@{host}:{port}".format(host="proxy.16yun.cn", port="31111",user="16YUN", pass="16IP")session = requests.Session()session.proxies = {"http": proxy_meta, "https": proxy_meta}session.headers.update({"User-Agent": "你的UA","Content-Type": "application/json","Proxy-Tunnel": str(random.randint(1,999999))})return sessiondef fetch_yelp_businesses(term, location, limit=20):session = create_session_with_proxy()query = """query SearchBusiness($term: String!, $location: String!, $limit: Int!) {search(term: $term, location: $location, limit: $limit) {business {id name rating review_countlocation { address1 city }hiddenFields { fieldKey fieldValue }}}}"""payload = {"query": query, "variables": {"term": term, "location": location, "limit": limit}}resp = session.post("https://www.yelp.com/graphql", json=payload)return resp.json().get("data", {}).get("search", {}).get("business", [])if __name__ == "__main__":results = fetch_yelp_businesses("pizza", "New York, NY", 5)print(json.dumps(results, ensure_ascii=False, indent=2))

通过上述模板,你可以灵活调整查询字段、关键词和位置,迅速构建高效稳定的爬虫工程。适合将此模块化后嵌入到更复杂的分布式框架或调度系统中。

http://www.dtcms.com/wzjs/456903.html

相关文章:

  • 企业管理软件价格怎么做优化
  • 广东省城乡建设委员会网站站长工具网
  • 应用开发用什么软件14个seo小技巧
  • 备案加在wordpress重庆旅游seo整站优化
  • 在线可以做翻译的网站西安网站制作费用
  • 桌子上做嗯啊干爹网站产品推广文案
  • 南阳高质量建设大市网站基本营销策略有哪些
  • 网站建设 自查表产品经理培训
  • 宜兴做宠物的网站酒店线上推广方案有哪些
  • 网站banner flash素材店铺seo是什么意思
  • 如何建设赌博网站夸克搜索入口
  • 电脑路由器做网站服务器十大营销策略
  • 品牌宣传网站制作互联网舆情监控系统
  • 安微省城城乡建设厅网站百度普通收录
  • wordpress成长记录网站模版主流搜索引擎有哪些
  • 长春网站建设方案唐山网站建设方案优化
  • 网站认证怎么做新东方英语线下培训学校
  • 宁夏建设工程招标投标管理中心网站竞价专员是做什么的
  • 好看的ui界面百度网站的优化方案
  • 如何自己做企业网站西安seo网站排名
  • 爱搜索中级网站建设厦门网站建设
  • 重庆网站建设jccit朝阳seo建站
  • 做淘宝网站需要多少钱西部数码域名注册
  • wordpress如何修改html代码简述seo对各类网站的作用
  • 网站是如何设计配置方案的企业推广app
  • 网站seo的重要性电脑培训机构哪个好
  • html5怎么做网站计算机培训班有用吗
  • 企业邮箱地址怎么填青岛seo外包服务
  • 八桂职教网登录入口网站关键词排名优化电话
  • 大连网站开发多少钱广东深圳疫情最新消息今天