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

如何使用Scrapy及XPath从单结构元素提取克利夫兰联储论文数据

用Scrapy+XPath提取克利夫兰联储工作论文信息的方法

核心思路:用健壮的XPath定位论文条目

你之前使用的长层级XPath(//*[@id="content"]/div[3]/div[1]/div[3]/div/div[2]/div[2]/ul/li[1])过度依赖固定页面结构,网站只要微调布局就会失效。更可靠的方式是基于你找到的site-search-results容器来定位所有论文条目:

  • 定位所有论文的XPath://div[contains(@class, 'site-search-results')]//ul/li
    (用contains(@class, 'site-search-results')是因为该元素的class可能包含多个值,这种写法匹配更灵活)

Scrapy爬虫示例代码

在你的Spider类中,按以下方式编写parse方法提取每篇论文的信息:

import scrapy

class FedPaperSpider(scrapy.Spider):
    name = "fed_papers"
    start_urls = ["https://www.clevelandfed.org/publications/working-paper"]

    def parse(self, response):
        # 获取所有论文条目
        paper_items = response.xpath("//div[contains(@class, 'site-search-results')]//ul/li")
        for item in paper_items:
            # 提取单篇论文的各项信息
            yield {
                "标题": item.xpath(".//h3/a/text()").get(default=""),
                "详情链接": item.xpath(".//h3/a/@href").get(default=""),
                "作者": item.xpath(".//div[contains(@class, 'authors')]/text()").get(default="").strip(),
                "发布日期": item.xpath(".//div[contains(@class, 'date')]/text()").get(default="").strip(),
                "摘要": item.xpath(".//div[contains(@class, 'summary')]/p/text()").get(default="").strip()
            }

关键说明

  1. 遍历每个论文条目时,XPath开头用.表示相对当前节点查询,避免从根节点重新匹配。
  2. 使用get(default="")处理空值,防止因某些字段缺失导致爬虫报错。
  3. 提取文本后用strip()去除多余的空格、换行符。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.10 20:13:16