在如今这个数据为王的时代,网络爬虫是获取信息的重要工具。但很多网站会通过 IP 限制、访问频率控制或反爬机制来保护数据。这时,代理(Proxy)就成了爬虫开发中不可或缺的一部分。这篇文章将带你了解如何在 ScrapeGraphAI 中配置代理,分享具体的代码示例,并解答一些常见问题,帮助你更顺畅地使用这个工具。

ScrapeGraphAI 是什么?
ScrapeGraphAI 是一个基于 Python 的开源爬虫库,结合了大型语言模型(LLM)和图逻辑,能从网页或本地文件(比如 HTML、JSON、XML)中提取结构化数据。它的特别之处在于,你可以用自然语言告诉它要抓取什么,它就能智能解析内容。加上代理支持,还能绕过网站的限制,让爬取更高效。
为什么需要代理?
爬虫用久了,你可能会碰到这些麻烦:
- IP 被封:请求太多,网站直接把你的 IP 屏蔽。
- 地区限制:有些内容只对特定区域开放。
- 频率限制:单个 IP 的请求次数被卡住。
用代理,ScrapeGraphAI 可以隐藏你的真实 IP,假装从不同地方发起请求,轻松解决这些问题。下面我们就来看看怎么配置。
配置代理的代码示例
接下来是两个实用例子,一个用免费代理,一个用自定义代理,带你一步步实现。
示例 1:用免费代理
ScrapeGraphAI 自带了对免费代理的支持,基于 free-proxy 库。看看这段代码:
python
from scrapegraphai.graphs import SmartScraperGraph
import os
from dotenv import load_dotenv
# 加载环境变量,把 API 密钥放 .env 文件里更安全
load_dotenv()
openai_key = os.getenv("OPENAI_API_KEY")
# 设置代理和模型参数
graph_config = {
"llm": {
"api_key": openai_key,
"model": "openai/gpt-4o-mini",
},
"loader_kwargs": {
"proxy": {
"server": "broker", # 用内置的免费代理
"criteria": {
"anonymous": True, # 要匿名的
"secure": True, # 要安全的(比如 HTTPS)
"countryset": {"US"}, # 只用美国的代理
"timeout": 10.0, # 超时设为 10 秒
"max_shape": 3 # 代理池最多 3 个
}
}
},
"verbose": True # 开日志,方便调试
}
# 定义任务
prompt = "抓取页面上所有书名和价格。"
source = "https://books.toscrape.com/"
# 创建并运行爬虫
scraper = SmartScraperGraph(prompt=prompt, source=source, config=graph_config)
result = scraper.run()
# 看看结果
print(result)这段代码用免费代理抓取了一个书店网站,要求代理匿名、安全、来自美国。跑起来后,你就能看到书名和价格列表。
示例 2:用自定义代理
如果你有自己的代理(比如从 ProxyScrape 或 ScrapingAnt 买的),可以这样设置:
python
from scrapegraphai.graphs import SmartScraperGraph
import os
from dotenv import load_dotenv
# 加载环境变量
load_dotenv()
openai_key = os.getenv("OPENAI_API_KEY")
# 设置自定义代理和模型参数
graph_config = {
"llm": {
"api_key": openai_key,
"model": "openai/gpt-4o-mini",
},
"loader_kwargs": {
"proxy": {
"server": "http://rp.proxyscrape.com:6060", # 你的代理地址
"username": "your_username", # 用户名
"password": "your_password" # 密码
}
},
"verbose": True
}
# 定义任务
prompt = "列出所有新闻标题和链接。"
source = "https://news.ycombinator.com/"
# 创建并运行爬虫
scraper = SmartScraperGraph(prompt=prompt, source=source, config=graph_config)
result = scraper.run()
# 输出结果
print(result)这里用了一个自定义代理服务器,确保请求通过它发出,成功抓取新闻标题和链接。
常见问题解答
下面是一些大家常问的问题,配上简单明了的答案,帮你少走弯路。
Q1:免费代理和付费代理有啥不一样?
答:免费代理是 ScrapeGraphAI 自带的,方便是方便,但不太稳定,容易被网站屏蔽,速度也一般。付费代理(比如住宅代理)用的是真实用户的 IP,匿名性强,成功率高,适合大任务或长期使用。小项目试试免费的就行,正式干活还是花点钱买个靠谱的。
Q2:怎么确认代理有没有用上?
答:把 verbose 设成 True,跑代码时看日志。里面会告诉你请求是不是通过代理发的,还有代理的状态。如果没用上,可能会报超时或连接失败。
Q3:代理被封了咋办?
答:先检查代理还能不能用(免费的经常挂)。不行就换一个,或者用代理池自动切换。还可以慢点发请求,装得像真人操作,别撞上反爬规则。
Q4:ScrapeGraphAI 能自动换代理吗?
答:可以。你可以在 loader_kwargs 里多放几个代理,或者用付费服务的旋转代理,设置一个入口地址,它会自己换 IP。
Q5:代理会不会拖慢速度?
答:会,尤其是免费代理或服务器离得远的。挑个延迟低的代理(最好离目标网站近),速度能好不少。
几条实用建议
- 选靠谱代理:住宅代理或数据中心代理更稳,成功率高。
- 先测再用:正式抓之前,先小范围试试代理行不行。
- 守规矩:别违反网站的服务条款,爬数据也要讲道德。
- 加点工具:碰到验证码,可以试试 Capsolver 或 Anti-Captcha,成功率更高。
写在最后
在 ScrapeGraphAI 里配好代理,就能轻松绕过 IP 限制和地区屏蔽,抓到更多数据。这篇文章给了你免费和自定义代理的代码,也答了几个常见问题,希望能帮你快速上手。不管你是开发者还是数据爱好者,这个工具加上代理都能让你事半功倍。
有啥疑问或者经验想分享?欢迎留言,爬虫的世界,咱们一起探索!


