Python 无法访问从json响应派生的单个配方的内部页面

Python 无法访问从json响应派生的单个配方的内部页面,python,python-3.x,web-scraping,python-requests,Python,Python 3.x,Web Scraping,Python Requests,我正试着从一本书中找出不同的食谱。到目前为止,我所写的内容可以解析所有配方名称。然而,我找不到任何方法来访问单个配方链接。以下是每个容器的外观,其中没有可用的slug,因此我找不到任何关于如何访问不同配方的内部页面的线索: {'id': 748, 'img': 'https://cdn-uploads.mealime.com/uploads/recipe/thumbnail/41/thumbnail_708f7645-6cb4-4089-8e18-95f5b97cbbcf.jpg', 'na

我正试着从一本书中找出不同的食谱。到目前为止,我所写的内容可以解析所有配方名称。然而,我找不到任何方法来访问单个配方链接。以下是每个容器的外观,其中没有可用的slug,因此我找不到任何关于如何访问不同配方的内部页面的线索:

{'id': 748,
 'img': 'https://cdn-uploads.mealime.com/uploads/recipe/thumbnail/41/thumbnail_708f7645-6cb4-4089-8e18-95f5b97cbbcf.jpg',
 'name': 'Apple Quinoa Salad with Celery, Almonds & Dried Cranberries',
 'recipeId': 41,
 'restrictions': [6],
 'types': [1, 3, 2, 4]}
如果我没有错,这是
https://www.mealime.com/_next/data/kSmAjTn7MJl4zVPNE6MeR/recipes/greek-turkey-meatball-pita-wraps-veggies-olives-feta-sauce/14887.json
通向内部页面的单个配方链接的外观

我试过:

import requests
from pprint import pprint

link = 'https://www.mealime.com/_next/data/kSmAjTn7MJl4zVPNE6MeR/recipes.json'

with requests.Session() as s:
    s.headers['User-Agent'] = 'Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/88.0.4324.150 Safari/537.36'
    res = s.get(link)
    for item in res.json()['pageProps']['reducedVariants']:
        pprint(item)
如何访问从json响应派生的单个配方的内部页面


在这里,我已经为一个你可以使用的所有,但
名称
可以包含不必要的词,必须删除,然后我们可以再次发出请求,你可以得到想要的输出:

import requests
from pprint import pprint
import re

main_url="https://www.mealime.com/_next/data/kSmAjTn7MJl4zVPNE6MeR/recipes"
json=".json"

with requests.Session() as s:
    s.headers['User-Agent'] = 'Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/88.0.4324.150 Safari/537.36'

    res = s.get(main_url+json)      
    main_data=res.json()

    for i in range(len(main_data['pageProps']['reducedVariants'])):
        if main_data['pageProps']['reducedVariants'][i]['id']==14887:
            name=main_data['pageProps']['reducedVariants'][i]['name'].replace("with","")
            id_=main_data['pageProps']['reducedVariants'][i]['id']
            name="-".join(re.findall("[a-zA-Z]+", name.lower()))
            detail_res=requests.get(main_url+"/"+name+"/"+str(id_)+json)
            print(detail_res.json()['pageProps']['publishedRecipe']['line_items'])
输出:

[{'id': 258630, 'quantity': '1 (4 oz) pkg', 'ingredient_name': 'crumbled feta cheese'}, {'id': 258637, 'quantity': '2', 'ingredient_name': 'eggs'}, {'id': 258641, 'quantity': '1', 'ingredient_name': 'English cucumber'}, {'id': 258647, 'quantity': '1 small bunch', 'ingredient_name': 'fresh dill'}, {'id': 258629, 'quantity': '4 cloves', 'ingredient_name': 'garlic'},....

所以你想从这个URL链接每个receipe?是的,但不要使用这个
https://www.mealime.com/recipes
。我想解析每个食谱,它们应该像@Bhavya Parikh。你只需要名字吗?或我需要名字和配料。但是,我可以使用此链接
https://www.mealime.com/recipes
。但是,我的问题不同。我希望使用json响应解析这两个字段。里面的数据对我来说毫无用处。我想知道的是我能实现我在问题中提出的要求的逻辑。谢谢。你为什么不从脚本标签中提取呢?你的脚本中包含了什么内容?所以,你必须操纵字符串来创建类似希腊火鸡肉丸皮塔包装蔬菜橄榄羊奶酱之类的鼻涕虫。通常它们在json响应中可用。不过,这里似乎没有。哦,对不起,我没有提到我会更新它是的,你需要操纵名称。是的,它丢失了,所以你必须调用另一个URL好的,你的解决方案一直有效,直到它遇到像
香脂鸡腿大蒜和欧芹炒胡萝卜这样的名称,在这些名称中,é会引起麻烦,从而导致值错误。是的,对于某些食谱,它将不起作用:)