使用BeautifulSoup4的Python脚本遭Google反爬,如何合规解决?
解决Google反爬并合法批量查询企业链接的方案
你的脚本触发Google反爬机制,核心原因是直接自动化爬取Google搜索页面违反了其服务条款,且高频无伪装的请求很容易被识别为机器人。以下是完全合规且有效的解决思路:
1. 使用Google Custom Search API(首推)
这是Google官方提供的合法自动化搜索接口,完全符合服务条款,适合2000-3000次的查询需求。
- 操作步骤:
- 登录Google Cloud平台创建项目,启用「Custom Search API」
- 生成API密钥和自定义搜索引擎ID(可设置为搜索全网)
- 免费额度:每天100次免费查询,超额后按极低费率付费(完全覆盖你的需求)
- 优势:稳定无反爬风险,返回结构化JSON数据,解析更高效
代码示例(替换原有脚本核心逻辑)
import requests import csv # 替换为你的API密钥和搜索引擎ID API_KEY = "your_api_key_here" SEARCH_ENGINE_ID = "your_search_engine_id_here" print("Starting script...") print("------") with open('companies.csv', 'r') as f, open('output.csv', 'w', newline='', encoding="utf-8") as f_out: reader = csv.reader(f) writer = csv.writer(f_out) next(reader) # 跳过表头 writer.writerow(['Company', 'URL', 'LinkedIn', 'Facebook']) for row in reader: company = row[0] print(f"\nProcessing: {company}") # 调用Custom Search API api_url = f"https://www.googleapis.com/customsearch/v1?q={company}&key={API_KEY}&cx={SEARCH_ENGINE_ID}" response = requests.get(api_url) if response.status_code != 200: print(f"API请求失败:{response.text}") writer.writerow([company, "", "", ""]) continue search_items = response.json().get('items', []) if not search_items: print(f"未找到{company}的搜索结果") writer.writerow([company, "", "", ""]) continue # 提取官网链接 official_url = search_items[0]['link'] print(f"官网:{official_url}") # 提取LinkedIn和Facebook链接 linkedin_url = "" facebook_url = "" for item in search_items: link = item['link'] if "/company/" in link and "linkedin.com" in link: linkedin_url = link print(f"LinkedIn:{linkedin_url}") elif "facebook.com/" in link and not "sharer" in link: facebook_url = link print(f"Facebook:{facebook_url}") writer.writerow([company, official_url, linkedin_url, facebook_url]) print("Done!")
2. 模拟人类请求(临时方案,需严格遵守规则)
如果暂时不想使用API,可通过伪装请求降低被检测概率,但仍存在违反条款的风险,仅适合小批量测试:
- 添加真实浏览器的
User-Agent请求头 - 每次请求之间添加2-5秒的随机延迟,避免高频请求
- 若请求量极大,可切换合规代理IP(需确保代理来源合法)
代码修改片段(核心部分)
import requests import bs4 import csv import time import random # 模拟Chrome浏览器请求头 headers = { 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/118.0.0.0 Safari/537.36' } # 循环处理企业时添加随机延迟 for row in reader: company = row[0] # 随机暂停2-5秒 time.sleep(random.uniform(2, 5)) # 带请求头发起请求 request_result = requests.get(f"https://google.com/search?q={company}", headers=headers) # 检查是否触发验证码 if "Our systems have detected unusual traffic" in request_result.text: print(f"{company}触发反爬,暂停10分钟后继续") time.sleep(600) writer.writerow([company, "", "", ""]) continue # 后续解析逻辑保持不变...
3. 替代数据源(避免依赖Google搜索)
如果不需要通过Google搜索获取,可考虑以下合规数据源:
- 商业企业名录API:部分平台提供企业官网、社交链接的批量查询接口
- LinkedIn Marketing API:申请权限后可精准获取企业LinkedIn主页信息
- Facebook Graph API:同理,可合法获取企业Facebook主页数据
内容的提问来源于stack exchange,提问作者halchemy
相关产品推荐
相关产品推荐

