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

如何修改Scrapy代码提取ICLR 2019海报论文的标题与PDF链接?

修正ICLR 2019海报论文爬虫的方案

你的爬虫代码无法获取所有论文数据,主要是几个关键问题导致的,咱们来一步步修正:

原代码的核心问题

  • 固定ID选择器:你用了maincard_704这个单个论文卡片的ID,只能抓取这一篇论文,无法遍历页面上所有的海报论文。
  • 独立提取标题和链接:分开提取所有标题和链接再用zip拼接,很容易因为两者数量不匹配导致数据错位,而且无法保证标题和对应链接的关联性。
  • XPath路径错误:提取链接时用了绝对路径/@href,这会从根节点开始查找,而不是当前链接节点的属性,导致无法正确获取href值。

修改后的完整代码

class ICLRCrawler(Spider):
    name = "ICLRCrawler"
    allowed_domains = ["iclr.cc"]
    start_urls = ["https://iclr.cc/Conferences/2019/Schedule?type=Poster", ]
    
    def parse(self, response):
        # 获取所有论文卡片节点
        papers = response.xpath('//*[@id="content"]/div/div[@class="paper"]')
        
        for paper in papers:
            item = PapercrawlerItem()
            # 从当前论文卡片内提取标题(相对路径)
            title_text = paper.xpath('./div[3]/text()').get()
            item['title'] = title_text.strip() if title_text else "无标题"
            
            # 提取PDF链接:用文本包含"PDF"的a标签,更鲁棒,不依赖固定位置
            pdf_href = paper.xpath('.//a[contains(text(), "PDF")]/@href').get()
            item['pdf'] = response.urljoin(pdf_href) if pdf_href else ""
            
            item['sup'] = ''
            yield item

关键修改点说明

  1. 遍历单个论文卡片:先获取所有class="paper"的节点,然后逐个处理每个卡片,确保标题和链接属于同一篇论文,彻底避免数据错位问题。
  2. 使用相对XPath:在每个paper节点内部,用./开头的相对路径查找子元素,确保只在当前论文卡片范围内搜索。
  3. 鲁棒的链接匹配:用contains(text(), "PDF")来定位PDF链接,比依赖固定的div[6]/a[2]更可靠,避免页面结构小变动导致爬虫失效。
  4. URL补全:用response.urljoin()把相对路径的PDF链接补全为完整URL,确保链接可直接访问。
  5. 空值处理:添加了简单的空值判断,避免因为部分论文没有标题或PDF链接导致爬虫抛出异常。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.13 08:32:34