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

Google Colab中Scrapy爬虫start_urls无法触发页面爬取求助

Google Colab中Scrapy爬虫爬取失败的排查与解决建议

1. 修复URL拼接问题

你当前parse方法里提取的href是相对路径(比如/projects/xxx),直接传入scrapy.Request会导致无效请求,必须拼接完整域名:

def parse(self, response):
    # 优化XPath,直接提取目标链接的href属性
    for href in response.xpath("//a[contains(@class, 'cf-pod__link')]/@href"):
        # 用response.urljoin自动补全域名
        full_url = response.urljoin(href.extract())
        yield scrapy.Request(full_url, callback=self.parse_page)

2. 添加反爬规避策略

目标网站可能识别了Colab的默认请求特征,建议在爬虫配置里添加浏览器请求头:
修改CrawlerProcess的settings参数:

runner = CrawlerProcess(settings={
    'REQUEST_FINGERPRINTER_IMPLEMENTATION': '2.7',
    'FEEDS': {'crowdfunder.csv': {'format': 'csv', 'overwrite': True}},
    'DEFAULT_REQUEST_HEADERS': {
        'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/114.0.0.0 Safari/537.36'
    }
})

3. 规范start_urls生成逻辑

当前在类定义阶段循环添加URL的写法容易引发初始化问题,改用start_requests方法生成请求更可靠:

class Campaign_Spider(scrapy.Spider):
    name = "crowdfunder"
    npages = 83

    def start_requests(self):
        # 生成第一页请求
        yield scrapy.Request("https://www.crowdfunder.co.uk/search/projects?category=Business&map=off")
        # 生成后续分页请求
        for i in range(2, self.npages + 2):
            url = f"https://www.crowdfunder.co.uk/search/projects?page={i}&category=Business&map=off"
            yield scrapy.Request(url)

4. 完善详情页爬取逻辑并调试

当前parse_page方法为空,无法确认是否成功进入详情页,先添加基础日志和数据提取代码:

def parse_page(self, response):
    # 打印详情页URL,确认请求成功
    self.logger.info(f"已进入详情页: {response.url}")
    # 示例提取标题(可根据需求修改)
    title = response.xpath("//h1/text()").get()
    if title:
        yield {'项目标题': title.strip(), '详情页URL': response.url}

5. Colab环境适配优化

  • 先确保已安装Scrapy:在Colab单元格中执行!pip install scrapy
  • 简化爬虫运行逻辑,Colab中无需多进程包装,直接运行更稳定:
def run_spider(spider):
    runner = CrawlerProcess(settings={
        'REQUEST_FINGERPRINTER_IMPLEMENTATION': '2.7',
        'FEEDS': {'crowdfunder.csv': {'format': 'csv', 'overwrite': True}},
        'DEFAULT_REQUEST_HEADERS': {
            'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/114.0.0.0 Safari/537.36'
        }
    })
    runner.crawl(spider)
    runner.start()

6. 日志排查关键点

结合你的日志信息,重点确认:

  • 所有分页URL是否都返回了200状态码(查看日志中DEBUG: Crawled (200)条目)
  • parse方法是否成功提取到链接(可在parse中添加self.logger.info(f"提取到{len(response.xpath('//a[contains(@class, 'cf-pod__link')]/@href'))}个项目链接"))
  • 详情页请求是否被拦截(查看日志中请求的状态码,若为403/404则需调整反爬策略)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.25 13:48:19