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

无需Selenium/BS4,用Python获取TechCrunch更多文章的方法

解决Techcrunch加载更多文章的爬取方案

不用Selenium的话,核心是抓包分析网站的AJAX加载接口,用requests模拟请求获取隐藏内容,步骤如下:

1. 抓包分析加载逻辑

打开浏览器开发者工具(F12),切换到Network标签,过滤「XHR/Fetch」类型请求:

  • 点击页面的「加载更多」按钮,观察新出现的请求,找到返回后续文章的接口(通常是类似/wp-json/tc/v1/more-posts的API端点)
  • 记录请求的URL、请求参数(比如cursor分页标识)、请求头(尤其是User-Agent、Referer)
  • 查看响应内容,确认是包含文章HTML片段的JSON,还是直接返回HTML

2. 用requests模拟请求实现批量获取

以下是可参考的代码示例(需根据实际抓包结果调整参数):

import requests
from bs4 import BeautifulSoup
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',
    'Referer': 'https://techcrunch.com/'
}

base_url = 'https://techcrunch.com'
# 替换为抓包得到的加载更多接口URL
load_more_api = 'https://techcrunch.com/wp-json/tc/v1/more-posts'

article_links = []

# 第一步:获取首页的20篇文章链接及初始cursor
response = requests.get(base_url, headers=headers)
soup = BeautifulSoup(response.text, 'html.parser')

# 提取首页文章链接
for article in soup.select('article.post-block'):
    link_tag = article.find('a', class_='post-block__title__link')
    if link_tag:
        article_links.append(link_tag['href'])

# 提取初始cursor(从页面JS变量中获取,需根据实际源码调整)
cursor = None
for script in soup.select('script'):
    if 'tc_more_posts_cursor' in script.text:
        cursor = script.text.split('tc_more_posts_cursor = "')[1].split('";')[0]
        break

# 第二步:循环请求加载更多,直到收集满100篇
while len(article_links) < 100 and cursor:
    # 替换为抓包得到的请求参数
    params = {'cursor': cursor, 'page': '1'}
    try:
        api_response = requests.get(load_more_api, headers=headers, params=params)
        api_response.raise_for_status()
        data = api_response.json()
    except Exception as e:
        print(f"请求失败: {e}")
        break

    # 解析接口返回的文章HTML片段
    more_soup = BeautifulSoup(data['html'], 'html.parser')
    for article in more_soup.select('article.post-block'):
        link_tag = article.find('a', class_='post-block__title__link')
        if link_tag:
            article_links.append(link_tag['href'])
            if len(article_links) >= 100:
                break

    # 更新cursor为下一页标识
    cursor = data.get('next_cursor')
    # 加延迟避免触发反爬
    time.sleep(1)

# 第三步:保存文章HTML或转换为PDF
for idx, link in enumerate(article_links[:100], 1):
    article_res = requests.get(link, headers=headers)
    # 保存HTML
    with open(f'techcrunch_article_{idx}.html', 'w', encoding='utf-8') as f:
        f.write(article_res.text)
    # 若要转PDF,可使用pdfkit(需提前安装wkhtmltopdf)
    # import pdfkit
    # pdfkit.from_url(link, f'techcrunch_article_{idx}.pdf')

关键注意事项

  • 抓包时务必确认请求参数和请求头的完整性,部分网站会校验Referer或X-WP-Nonce等字段
  • 若遇到反爬,可增加请求延迟、轮换User-Agent
  • 页面选择器(如article.post-block)可能随网站更新变化,需根据实际页面结构调整

内容的提问来源于stack exchange,提问作者Math and Coding

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.04 03:43:33