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

如何使用Scrapy爬取本地目录下所有.html文件中的数据

问题原因

你当前的start_urls指向的是本地文件夹路径,Scrapy请求该路径只会返回文件夹的目录索引页面,不会自动读取内部的HTML文件内容。

实现方案

我们可以通过start_requests方法遍历本地文件夹下的所有.html文件,生成对应的file://协议请求,再逐个解析每个HTML文件的内容,修改后代码如下:

import scrapy
import os

LOCAL_FOLDER = 'html_files/'
BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
HTML_FOLDER_PATH = os.path.join(BASE_DIR, LOCAL_FOLDER)

class MySpider(scrapy.Spider):
    name = 'mySpider'

    def start_requests(self):
        # 遍历目标文件夹下的所有文件
        for filename in os.listdir(HTML_FOLDER_PATH):
            # 过滤出html文件
            if not filename.endswith('.html'):
                continue
            file_abs_path = os.path.join(HTML_FOLDER_PATH, filename)
            # 转为scrapy支持的file协议url
            yield scrapy.Request(f"file://{file_abs_path}", callback=self.parse)

    def parse(self, response):
        # 这里写你的解析逻辑即可,response对应单个html文件的内容
        rows = response.xpath('//div[@class="data"]//tbody/tr')
        self.logger.info(f"当前处理文件:{response.url},匹配到数据行:{len(rows)}")
        # 提取数据返回示例
        for row in rows:
            yield {
                # 可根据你的实际需求调整XPath提取规则
                'col1': row.xpath('./td[1]/text()').get(),
                'col2': row.xpath('./td[2]/text()').get()
            }

补充说明

  • 如果你的html_files下还有嵌套的子文件夹,可将os.listdir替换为os.walk递归遍历所有层级的html文件
  • Windows系统下代码会自动生成符合要求的带盘符的file:///格式路径,无需额外适配
  • 本地文件请求无反爬限制,可直接运行无需调整Scrapy的延迟、UA等反爬配置

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 13:54:05