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

Python中为Scrapy Spider传入screen_name参数初始化时报错求助

解决Scrapy爬虫传入可变参数的初始化错误

我来帮你搞定这个Scrapy传参的问题~你遇到的报错是因为错误地直接实例化爬虫类后传给了process.crawl()——Scrapy的CrawlerProcess.crawl()方法设计是接收爬虫类本身,而非已经实例化好的对象。当你传入TwitterSpider(screen_name="realDonaldTrump")时,Scrapy内部还会尝试调用TwitterSpider()创建新实例,这时候就会缺失screen_name参数,触发报错。

正确的解决方式

推荐的做法是直接把爬虫类和参数一起传给process.crawl(),让Scrapy负责实例化爬虫并传递参数:

把这一行:

process.crawl(TwitterSpider(screen_name="realDonaldTrump"))

修改为:

process.crawl(TwitterSpider, screen_name="realDonaldTrump")

这样Scrapy会自动将screen_name参数传递给爬虫的__init__方法,完美适配你的自定义初始化逻辑。

完整可运行代码示例

import scrapy
from scrapy.crawler import CrawlerProcess

class TwitterSpider(scrapy.Spider):
    name = "twitter_friends"
    def __init__(self, screen_name, *args, **kwargs):
        self.usernames = []
        self.screen_name = screen_name
        # 建议保留*args传给父类,避免潜在的参数兼容问题
        super().__init__(*args, **kwargs)

    def start_requests(self):
        base_url = "https://mobile.twitter.com"
        urls = [
            base_url + '/{screen_name}/following'.format(screen_name=self.screen_name)
        ]
        for url in urls:
            yield scrapy.Request(url=url, callback=self.parse)

    def closed(self, spider):
        print("spider closed")

    def parse(self, response):
        # 这里可以添加你的页面解析逻辑
        pass

process = CrawlerProcess({
    'USER_AGENT': 'Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1)'
})

# 传入爬虫类和目标参数
process.crawl(TwitterSpider, screen_name="realDonaldTrump")
# 如果要运行多个不同参数的爬虫,直接多次调用crawl即可
# process.crawl(TwitterSpider, screen_name="BarackObama")
process.start()

多爬虫运行说明

如果要实现你的最终目标——运行多个带不同screen_name的爬虫,只需要多次调用process.crawl()即可,比如:

process.crawl(TwitterSpider, screen_name="realDonaldTrump")
process.crawl(TwitterSpider, screen_name="BarackObama")
process.start()

Scrapy会自动并行处理这些爬虫任务。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.13 10:45:38