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

如何获取更多Google News中2022年苹果相关新闻(突破当前234条,目标400条)

如何获取更多Google News中2022年苹果相关新闻(突破当前234条,目标400条)

嘿,我来给你几个实用的思路,帮你突破当前的结果限制,拿到更多目标新闻:

1. 优化现有GoogleNews库的使用策略

你当前的代码只搜了单一关键词“Apple”,可以试试扩展关键词范围,加上和苹果相关的细分主题,同时调整分页范围,这样能覆盖更多不同角度的新闻:

from GoogleNews import GoogleNews
import pandas as pd

# 定义多个苹果相关的细分关键词,覆盖不同场景
keywords = ['Apple', 'Apple iPhone 2022', 'Apple earnings 2022', 'Apple product launch 2022', 'Apple company news 2022']

all_results = []

for keyword in keywords:
    # 每个关键词重新初始化GoogleNews实例,避免缓存干扰
    googlenews = GoogleNews(start='01/01/2022', end='31/12/2022', lang='en', region='US')
    googlenews.search(keyword)
    
    # 尝试抓取更多页面(比如从2到60页,比你之前的50页多一些)
    for page_num in range(2, 61):
        googlenews.getpage(page_num)
    
    # 把当前关键词的结果加入总列表
    all_results.extend(googlenews.result())

# 合并结果并去重,保留最新的条目
df = pd.DataFrame(all_results)
df = df.drop_duplicates(subset=['title'], keep='last')
df.reset_index(drop=True, inplace=True)

print(f"最终获取到 {len(df)} 条去重后的新闻")

这个方法的核心是通过关键词拆分扩大搜索覆盖范围,同时适当增加分页的上限,通常能拿到更多结果。

2. 改用Google官方的自定义搜索API

Google Cloud提供的自定义搜索API(包含新闻搜索能力)的结果限制比第三方库宽松很多,只要你有API密钥和自定义搜索引擎ID,就能批量获取更多结果。你可以把2022年拆分成更小的时间区间(比如按季度或月份),分批次搜索后合并:

import requests
import pandas as pd
import time

# 替换成你自己的API密钥和搜索引擎ID
API_KEY = "你的Google Cloud API密钥"
SEARCH_ENGINE_ID = "你的自定义搜索引擎ID"

keywords = ['Apple']
all_articles = []

# 把2022年拆分成12个月份的区间,分批次搜索
month_ranges = [
    ('2022-01-01', '2022-01-31'), ('2022-02-01', '2022-02-28'),
    ('2022-03-01', '2022-03-31'), ('2022-04-01', '2022-04-30'),
    ('2022-05-01', '2022-05-31'), ('2022-06-01', '2022-06-30'),
    ('2022-07-01', '2022-07-31'), ('2022-08-01', '2022-08-31'),
    ('2022-09-01', '2022-09-30'), ('2022-10-01', '2022-10-31'),
    ('2022-11-01', '2022-11-30'), ('2022-12-01', '2022-12-31')
]

for keyword in keywords:
    for start_date, end_date in month_ranges:
        page = 1
        # 每个时间区间最多抓取10页(每页10条,共100条,可根据配额调整)
        while page <= 10:
            # 构造请求URL,指定新闻类型和时间范围
            url = (
                f"https://www.googleapis.com/customsearch/v1?"
                f"q={keyword}&cx={SEARCH_ENGINE_ID}&key={API_KEY}"
                f"&sort=date:r:{start_date}:{end_date}&num=10&start={(page-1)*10 + 1}"
                f"&siteSearch=news.google.com&siteSearchFilter=i"
            )
            
            response = requests.get(url)
            data = response.json()
            
            if 'items' in data:
                all_articles.extend(data['items'])
            
            page += 1
            # 加个小延迟,避免触发频率限制
            time.sleep(1)

# 提取标题并去重
df = pd.DataFrame(all_articles)
df = df.drop_duplicates(subset=['title'], keep='last')
print(f"最终获取到 {len(df)} 条新闻")

要注意的是,这个API有免费配额,超出后需要付费,不过对于400条的需求来说,免费配额应该足够。

3. 网页抓取(需注意合规性)

如果上面的方法还不够,你可以模拟浏览器访问Google News网页端,通过BeautifulSoup来抓取内容。这种方法能拿到网页端能看到的所有结果,但要注意遵守Google的服务条款,不要频繁请求避免IP被封:

import requests
from bs4 import BeautifulSoup
import pandas as pd
import time

# 设置浏览器请求头,模拟真实用户访问
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'
}

# 初始搜索链接,指定关键词和2022年时间范围
base_url = "https://news.google.com/search?q=Apple%20when%3A2022-01-01..2022-12-31&hl=en-US&gl=US&ceid=US%3Aen"

all_titles = []
current_url = base_url

# 循环抓取直到拿到400条或没有下一页
while current_url and len(all_titles) < 400:
    response = requests.get(current_url, headers=headers)
    soup = BeautifulSoup(response.text, 'html.parser')
    
    # 提取所有新闻标题
    title_elements = soup.find_all('h3', class_='ipQwMb ekueJc RD0gLb')
    for elem in title_elements:
        title = elem.get_text(strip=True)
        all_titles.append(title)
    
    # 找到下一页的链接
    next_page_link = soup.find('a', class_='pnNext')
    if next_page_link:
        current_url = f"https://news.google.com{next_page_link['href']}"
    else:
        break
    
    # 设置2秒延迟,避免被反爬机制拦截
    time.sleep(2)

# 去重并转换为DataFrame
unique_titles = list(set(all_titles))
df = pd.DataFrame({'title': unique_titles})
print(f"最终获取到 {len(df)} 条去重后的新闻")

这个方法的关键是模拟真实用户的访问行为,不要太激进,否则可能被Google暂时封禁IP。

备注:内容来源于stack exchange,提问作者Rolando

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.23 08:39:54