如何使用Scrapy读取JSON文件中的链接批量爬取对应页面数据
Scrapy 批量爬取修改方案
核心修改逻辑
- 替换原有固定URL列表逻辑,新增本地JSON文件读取逻辑
- 提取JSON中每个条目的相对路径,拼接完整域名生成目标爬取URL
- 保留原有页面解析逻辑不变,兼容原有的数据提取规则
修改后完整代码
import scrapy import json class RatingSpider(scrapy.Spider): name = "rating" # 统一配置基础域名,方便后续修改 base_domain = "https://www.darkpattern.games" def start_requests(self): # 替换为你本地JSON文件的实际路径 json_path = "./your_previous_crawl_data.json" with open(json_path, "r", encoding="utf-8") as f: game_list = json.load(f) # 遍历所有游戏条目生成爬取请求 for game in game_list: # 提取相对路径,拼接完整URL relative_link = game["link"][0].strip() full_url = f"{self.base_domain}{relative_link}" yield scrapy.Request(url=full_url, callback=self.parse) def parse(self, response): for rating in response.css('div.score_box'): yield { # 可自行补充游戏名称等关联字段,方便数据匹配 'reported': rating.css('div.score_heading *::text').extract() }
可选优化提示
如果需要关联原JSON中的旧评分、游戏名称等数据,可以通过Scrapy的meta参数传递信息,示例如下:
# 生成请求时添加传参 yield scrapy.Request( url=full_url, callback=self.parse, meta={ "old_rating": game["rating"][2].strip(), "game_name": game["title"][1].strip() } ) # 解析阶段读取参数 def parse(self, response): old_rating = response.meta["old_rating"] game_name = response.meta["game_name"] # 可将上述字段加入返回结果,实现新旧数据关联
内容的提问来源于stack exchange,提问作者Sam Niknejad
相关产品推荐
相关产品推荐

