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

如何在Scrapy中从parse函数提取链接并加入爬取结果

修改方案:为Scrapy爬虫新增link字段

直接修改parse_item方法即可,利用Scrapy响应对象自带的url属性获取详情页完整链接,以下是修改后的完整代码:

import scrapy
from scrapy.crawler import CrawlerProcess


class weeklymining(scrapy.Spider):
    name = 'weeklymining'
    start_urls = ['https://www.miningweekly.com/page/coal/page:'+str(x) for x in range(0,351)]

    def parse(self, response):
        for link in response.xpath('//*[@class="en-serif"]/a/@href'):
            yield response.follow(
                url=link.get(),
                callback=self.parse_item
            )

    def parse_item(self, response):
        yield {
            'date': response.xpath('//*[@class="article_title"]//p/span[1]/text()').extract(),
            'title': response.xpath('//*[@id="article_headline"]/text()').get(),
            'text':''.join([x.get().strip() for x in response.xpath('//*[@id="article_content_container"]//p//text()')]),
            'link': response.url  # 新增的link字段
            }
if __name__ == '__main__':
    process = CrawlerProcess()
    process.crawl(weeklymining)
    process.start()

修改说明

  1. 核心修改:在parse_item方法的返回字典中添加'link': response.url,response.url会自动返回当前详情页的完整URL,无需额外传递参数,是最简洁高效的方式。
  2. 备选方案(如需自定义传递链接):如果需要在parse环节手动传递链接,可通过meta参数实现:
    • 在parse方法中修改response.follow:
      yield response.follow(
          url=link.get(),
          callback=self.parse_item,
          meta={'detail_link': link.get()}
      )
      
    • 在parse_item方法中获取链接:
      'link': response.meta.get('detail_link')
      
    这种方式适合需要传递额外自定义参数的场景,本次需求优先推荐第一种方案。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.22 05:06:28