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

使用Scrapy爬取Project Euler网站的优化实现方案咨询

Hey there! 针对你想用Scrapy爬取Project Euler题目并生成JSON的需求,我整理了一套简洁高效的实现方案,刚好贴合你只抓取ID、标题、内容的核心需求,避开那些复杂冗余的代码:

1. 快速初始化Scrapy项目

首先创建项目并进入目录:

scrapy startproject euler_scraper
cd euler_scraper

2. 定义数据结构(可选但规范)

在euler_scraper/items.py里定义我们需要的字段,让数据结构更清晰:

import scrapy

class EulerProblemItem(scrapy.Item):
    problem_id = scrapy.Field()
    title = scrapy.Field()
    content = scrapy.Field()

3. 编写核心爬虫代码

在euler_scraper/spiders/euler_spider.py中编写爬虫逻辑,直接生成目标URL并提取关键数据:

import scrapy
from euler_scraper.items import EulerProblemItem
import re

class EulerSpider(scrapy.Spider):
    name = 'euler'
    allowed_domains = ['projecteuler.net']
    # 这里设置要爬取的题目范围,比如1到100,按需调整
    start_urls = [f'https://projecteuler.net/problem={i}' for i in range(1, 101)]

    def parse(self, response):
        # 从页面h2标签提取题目ID和标题
        h2_text = response.css('h2::text').get()
        problem_id = re.search(r'Problem (\d+)', h2_text).group(1)
        title = h2_text.split(' - ')[1]
        
        # 提取题目内容,合并所有文本并去除多余空格
        content = ' '.join(response.css('div.problem_content *::text').getall()).strip()

        # 组装数据并返回
        item = EulerProblemItem()
        item['problem_id'] = problem_id
        item['title'] = title
        item['content'] = content
        yield item

4. 配置爬虫礼仪(重要)

在euler_scraper/settings.py里添加基础配置,避免被服务器限制:

# 设置模拟浏览器的User-Agent
USER_AGENT = 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36'

# 设置下载延迟,遵守爬虫礼仪
DOWNLOAD_DELAY = 2

5. 运行爬虫并导出JSON

直接用Scrapy自带的Feed Exports功能导出JSON,不需要写额外的Pipeline代码:

scrapy crawl euler -o euler_problems.json

这样你就能得到一个包含所有目标数据的JSON文件,后续直接用AJAX加载到本地网页就可以了。这个方案的优势在于:

  • 用Scrapy原生的Feed Exports替代自定义Pipeline,减少冗余代码
  • 直接生成目标URL,省去爬取列表页的额外步骤(如果需要爬取所有题目,也可以先爬列表页获取所有ID再生成URL,按需调整)
  • 用CSS选择器+简单正则提取数据,逻辑清晰易维护

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.19 08:10:56