You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.30 02:05:34