如何使用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() }
关键说明
- 遍历每个论文条目时,XPath开头用
.表示相对当前节点查询,避免从根节点重新匹配。 - 使用
get(default="")处理空值,防止因某些字段缺失导致爬虫报错。 - 提取文本后用
strip()去除多余的空格、换行符。
内容的提问来源于stack exchange,提问作者ellie
相关产品推荐
相关产品推荐

