Python日常-女神要减肥,我打辅助!

一个蝉鸣沉醉的晚上,我和女神坐在沙发上,呆呆地看着鱼缸里的小鱼儿自由自在地游来游去。

突然,女神摸着自己的肚子,惊叹一声:哇!三个月大了!

我怔了一下,急切地问道:啥时候的事?怎么不告诉我?

“就这几个月呀!不知不觉就长了这么多膘!”

“我靠!我还以为你有了!”

女神嘤嘤地锤着我的胸,喊着要减肥!

“没问题,我助你!”

所谓“管住嘴,迈开腿!”减肥也是有方法论的,我们要用科学的方法减肥。管住嘴,不是不吃,而是要保证每天摄入的能量小于每天消耗的能量。

我还在说着方法论,女神已经打开手机,在网上搜减肥食谱了,看来是真的下决心了。

咱也不能落后呀,我看到她在一个叫“美食杰”的网页上看菜谱,我就说不需要这么麻烦,一页一页地翻太累了,给我5分钟,我给你这个网站上所有的减肥食谱。

准备食材

我打开电脑,在浏览器上输入网址,然后迅速地定位到“减肥食谱”的分类上:

在这里插入图片描述

打开这个菜谱页面,我发现这个页面是以卡片的形式来呈现每一个菜谱,然后底下是分页。

在这里插入图片描述

对于分页的页面,我们首先看 URL 的变化,如果 URL 有规律,那就很容易解决,这个页面的分页恰巧是 URL 上可以体现页码的变化(第二一页是 p2 结尾):

https://www.meishij.net/jiankang/jianfei/p2/

接着,我们来看每个菜谱的细节:

在这里插入图片描述

我们可以看到这个页面很有规律,每个菜谱和其对应的材料都是一样的格式。

有了这些基础,我的思路就很清晰了:

通过拼接 URL 实现分页查询,通过解析相同格式的 HTML 页面来获取菜谱和材料。

烹饪

我写一个方法,请求页面,然后从页面中解析出菜名和材料,由于不同的菜谱中使用的材料可能会有重复,所以我对材料做了去重处理。


import requests
from lxml import etree

def getRecipe(url, pageNum, foodFileName, meterialFileName):
    foods = []
    meterials = []
    for i in range(1, pageNum):
        rurl = url % i  # 构建网址,用网址前半部分相同的,拼接后边的数字
        res = requests.get(rurl).text  # 用requests库的get函数来获得网页数据
        res_xpath = etree.HTML(res)  # 将获得的数据转化为xpath格式
        foods.extend(res_xpath.xpath('//*/a[@class="list_s2_item_info"]/strong/text()'))  # 用浏览器获得所需信息的xpath位置
        meterial = res_xpath.xpath('//*/a[@class="list_s2_item_info"]/span[@class="sc"]/text()')
        for m in meterial:
            meterials.extend(m.split(','))
    for food in foods:  # 依次从获得的总食谱中提取菜名
        with open(foodFileName + ".txt", 'a', encoding="utf-8") as f:
            f.write(food + '\n')
    undupMeterials = list(set(meterials))  # 对材料去重
    for m in undupMeterials:
        with open(meterialFileName + ".txt", 'a', encoding="utf-8") as f:
            f.write(m + '\n')
    return foods, undupMeterials

fitfoods, fitmeterials = getRecipe('https://www.meishij.net/jiankang/jianfei/p%s/', 6, 'fitfood', 'fitmeterial')

下碟

最后的结果我将菜谱和食材分别写到两个文件中,然后将文件发给女神了。

女神掐表一算,说:亲爱的,你太快了!

我翻了一个白眼,说到:下次不要这样说,要说“亲爱的,你太帅了!”。

她锤了了一下,红着脸说“你真坏!”

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

闲欢

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值