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

如何从allrecipes站点URL提取路径参数及配置Scrapy分页规则

解决方案

一、URL路径参数提取问题

你可以通过「先过滤空路径段 + 定位数字路径段位置」的通用方案实现需求,核心逻辑是利用该站点URL的固定结构:所有需要提取的分类路径都位于/recipes/后的数字ID段之后,无需提前预知路径段数量。
示例代码如下:

def get_valid_categories(url):
    # 拆分URL并过滤所有空字符串,自动处理末尾/带来的空元素问题
    path_parts = [part for part in url.split("/") if part]
    # 定位recipes段的索引,下一段即为数字ID段
    recipes_pos = path_parts.index("recipes")
    # 取数字ID段之后的所有内容即为目标分类
    return path_parts[recipes_pos + 2:]

# 测试所有示例URL
urls = [
    'https://www.allrecipes.com/recipes/695/world-cuisine/asian/chinese/',
    'https://www.allrecipes.com/recipes/94/soups-stews-and-chili/',
    'https://www.allrecipes.com/recipes/416/seafood/fish/salmon/',
    'https://www.allrecipes.com/recipes/205/meat-and-poultry/pork/'
]
for u in urls:
    print(get_valid_categories(u))

运行输出完全符合你的预期:

['world-cuisine', 'asian', 'chinese']
['soups-stews-and-chili']
['seafood', 'fish', 'salmon']
['meat-and-poultry', 'pork']

二、Scrapy分页规则配置问题

你原有的规则不正确,正则没有匹配分页URL中数字ID和分类路径的中间部分,且没有对查询参数前的问号做转义。
调整后的规则如下:

Rule(LinkExtractor(allow=r'/recipes/.*\?page=\d+'), follow=True)

正则含义说明:

  • /recipes/:匹配URL中固定的分类前缀
  • .*:匹配数字ID、分类路径等任意中间内容
  • \?:转义匹配查询参数起始的问号
  • page=\d+:匹配分页参数和数字页码

该规则可以适配所有分类下的分页URL。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.07 11:12:04