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

Python如何爬取以引号/连字符开头且包含指定人名的引语文本

特定人物引语提取方案优化

原有代码问题

  • 绑定了单站点专属CSS类dcr-s23rjr,无法适配多站点批量爬取场景
  • 没有做引语格式校验,只要包含目标人名就返回,会混入大量非引语文本
  • 循环内重复调用soup.find属于冗余操作,执行效率低

实现逻辑

要同时满足两个筛选规则:

  1. 文本去除首尾空白后,以双引号"或者连字符-开头
  2. 文本包含指定的目标人名

优化后代码

import requests
from bs4 import BeautifulSoup

def extract_target_quotes(page_url, target_name_list):
    # 发起页面请求,添加UA伪装避免反爬拦截
    resp = requests.get(page_url, 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"})
    if resp.status_code != 200:
        return []
    soup = BeautifulSoup(resp.text, "html.parser")
    valid_quotes = []
    # 遍历所有段落标签,可按需扩展<q> <blockquote>等引语专属标签
    for tag in soup.find_all("p"):
        text = tag.get_text(strip=True)
        # 跳过空文本避免索引报错
        if not text:
            continue
        # 同时满足开头格式要求+包含目标人名才保留
        if text.startswith(('"', '-')) and any(name in text for name in target_name_list):
            valid_quotes.append(text)
    return valid_quotes

# 调用示例
if __name__ == "__main__":
    test_url = "https://www.theguardian.com/us-news/2021/oct/17/jeffrey-clark-scrutiny-trump-election-subversion-scheme"
    # 可自行添加需要匹配的人名
    target_names = ["Michael Bromwich", "John Johnson"]
    result = extract_target_quotes(test_url, target_names)
    for quote in result:
        print(quote)

可选扩展优化

  • 兼容全角符号场景:如果爬取的中文站点存在全角双引号“、全角破折号—作为引语开头的情况,将startswith的参数修改为('"', '-', '“', '—')即可
  • 覆盖更多引语标签:部分站点会用<q>或者<blockquote>标签包裹引语,将soup.find_all("p")修改为soup.find_all(["p", "q", "blockquote"])即可覆盖这类场景
  • 批量爬取优化:多页面爬取时建议添加1-3秒的请求间隔,避免触发站点反爬规则

内容的提问来源于stack exchange,提问作者Tobias Simonsen

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 19:57:01