如何解决无法访问从 json 响应派生的单个配方的内页
我正在尝试从 webpage 中抓取不同的食谱。到目前为止,我所写的内容可以从那里解析所有的食谱名称。但是,我找不到任何方法来访问单个食谱链接。以下是每个容器的外观,其中没有可用的 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 响应的单个配方的内页?
解决方法
这里我已经完成了一个你可以使用的所有内容,但 name
可以包含必须删除的不必要的词,然后我们可以再次发出请求,你可以获得所需的输出:
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'},....
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。