Python爬虫-爬取药膳食谱数据

🎈 博主:一只程序猿子

🎈 博客主页:一只程序猿子 博客主页

🎈 个人介绍:爱好(bushi)编程!

🎈 创作不易:喜欢的话麻烦您点个👍和

🎈 欢迎访问我的主页(点我直达)

🎈 除此之外您还可以通过个人名片联系我

额滴名片儿

 目录

1.介绍

2.分析

(1)数据来源

(2)页面结构

3.爬取流程

4.源码

5.效果展示

6.拓展


1.介绍

        本文将介绍如何编写Python爬虫,爬取心食谱网站的一些与药膳相关的食谱信息,当然,通过修改对应食谱的URL,可以爬取其他食谱信息。爬取到的数据可用于数据分析和可视化,适用于学年设计或者毕设的数据来源。

2.分析

(1)数据来源

心食谱网站:菜谱|菜谱大全|家常菜谱 - 心食谱

(2)页面结构

        我们主要爬取食谱分类板块下的食谱数据:

         随便点开一个食谱,比如点开第一个家常菜:

        页面底部是换页按钮,需要注意的是:当查看本食谱中的尾页时,页面底部换页按钮并不会出现下一页的按钮了

 

        点开其中的一个菜品,可以看到菜品详细信息:

        需要注意的是:有些菜品可能会有更多项或更少项介绍:

         查看菜谱菜品的URL:

        菜谱翻页:

 菜品详细信息:

3.爬取流程

菜谱的URL-->获取菜谱页中所有菜品的URL-->根据菜品的URL获取菜品的详细信息

        因为菜谱有多个页面,一页中有多个菜品,所以我们将使用循环遍历菜谱中的所有界面,获取所有菜品url,最后根据菜品url获取菜品的详细信息.

4.源码

import requests
from settings import COOKIES, HEADERS
from lxml import etree
from utils.utils import *
from db_helper import DBHelper# 获取食谱类型
def get_type(url):response = requests.get(url, cookies=COOKIES, headers=HEADERS)html = etree.HTML(response.text)type = html.xpath('/html/body/div[2]/div/h1/text()')[0]type = type.strip()DBHelper().findType(type)return type# 获取本菜谱下一页菜单页url
def get_next_page(url):response = requests.get(url, cookies=COOKIES, headers=HEADERS)html = etree.HTML(response.text)next_page_url = html.xpath('//div[@class="page-turn fl"]/a/@href')[-1]return next_page_url# 获取本页菜谱内的所有菜品基础信息
def get_menu(url):response = requests.get(url, cookies=COOKIES, headers=HEADERS)html = etree.HTML(response.text)ys_name_list = html.xpath('//div[@class="new-menu mt20"]/div[@class="bpannel cb"]/a/@title')         # 药膳名称列表ys_url_list = html.xpath('//div[@class="new-menu mt20"]/div[@class="bpannel cb"]/a/@href')ys_img_list = html.xpath('//div[@class="new-menu mt20"]//div[@class="v-pw"]/img/@src')memu = zip(ys_name_list, ys_url_list, ys_img_list)return memu# 获取菜品详细信息
def get_details(url):response = requests.get(url, cookies=COOKIES, headers=HEADERS)html = etree.HTML(response.text)infos = html.xpath('/html/body/div[2]/div/div[1]/div[2]/div')details = ''for info in infos[:-1]:title = ''content = ''for i in info.xpath('./div[1]/text()'):title += ifor i in info.xpath('./div[2]//text()'):content += ititle = title.replace('\t', '').replace('\n', '')content = content.replace('\t', '').replace(' ', '').replace('\n\n', '').strip()# print(title, content)details += (title + '\n' + content + '\n')return details# 获取菜品的封面图片
def get_img(url):response = requests.get(url, cookies=COOKIES, headers=HEADERS)img_data = response.contentreturn img_data# 主程序
if __name__ == '__main__':# 每次运行前留一个url不被注释就行# url = 'https://www.xinshipu.com/caipu/112026/'# url = 'https://www.xinshipu.com/caipu/114076/'      # 健脾开胃# url = 'https://www.xinshipu.com/caipu/114485/'      # 虚补养身# url = 'https://www.xinshipu.com/caipu/115230/'      # 防癌抗癌# url = 'https://www.xinshipu.com/caipu/114194/'      # 清热解毒# url = 'https://www.xinshipu.com/caipu/115250/'      # 壮腰健肾# url = 'https://www.xinshipu.com/caipu/115222/'      # 益智补脑# url = 'https://www.xinshipu.com/caipu/114677/'      # 营养滋补# url = 'https://www.xinshipu.com/caipu/115222/'      # 美容养颜# url = 'https://www.xinshipu.com/caipu/114185/'      # 润肺止咳# url = 'https://www.xinshipu.com/caipu/115222/'      # 美容养颜url = 'https://www.xinshipu.com/caipu/114686/'      # 补气补血type = get_type(url)type = get_type(url)print(type)all_page_list = [url]while 1:# 定义详细信息# 1.获取本页菜单所有菜品基础信息menu = get_menu(url)for item in menu:# print(item)cname = item[0]     # 菜品名称detail_url = 'https://www.xinshipu.com' + item[1]       #菜品详情URL# 获取菜品详细信息details = get_details(detail_url)# print(details)img_url = 'https:' + item[2]        # 菜品的封面图片URL# 获取菜品的封面图片img_content = get_img(img_url)# 保存封面图片到本地img_name = getTimeStamp() + '.jpg'# saveImge(img_content, img_name)create_time = getCurrentTime()shipu = dict()shipu['type'] = typeshipu['cname'] = cnameshipu['img_name'] = img_nameshipu['details'] = detailsshipu['create_time'] = create_timeprint(shipu)DBHelper().saveItem(img_content, img_name, shipu)time.sleep(1)# 获取下一页菜单urlnext_page_url = 'https://www.xinshipu.com' + get_next_page(url)if next_page_url not in all_page_list:url = next_page_urlall_page_list.append(url)else:print('该菜谱所有页面的url已获取完毕')break

        篇幅有限,这里仅展示了最核心的源码,涉及到的基础变量配置,数据库操作,工具类的源码这里不做展示 ,如果需要完整源码的话可以通过文章底部个人名片联系我.

5.效果展示

6.拓展

        当我们获取了这些数据之后,可以做一个推荐系统之类的项目用作毕设或者参加比赛啥的,如下是我做的一个基于Django的药膳食谱推荐系统,使用的是基于用户的协同过滤推荐算法。

        如果有需要可以联系我哦!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/299819.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【STM32】存储器和位带映射(bit band mapping)

文章目录 0 前言1 关于地址和存储器2 STM32内部存储器3 位带映射(bit band mapping)4 扩展:IAP 0 前言 最近在研究stm32标准库,对使用宏定义实现位操作的函数非常感兴趣,简单的一句PAout(1) 0;就能实现某个引脚电平的…

基于单片机光伏太阳能跟踪系统设计

**单片机设计介绍,基于单片机光伏太阳能跟踪系统设计 文章目录 一 概要二、功能设计三、 软件设计原理图 五、 程序六、 文章目录 一 概要 基于单片机光伏太阳能跟踪系统的设计,旨在通过单片机技术实现对光伏太阳能设备的自动跟踪,以提高太阳…

InnoDB 数据页结构

1.行格式 1.1 Compact行格式 1.1.1 示意图 1.1.2 准备一下 1)建表 mysql> CREATE TABLE record_format_demo (-> c1 VARCHAR(10),-> c2 VARCHAR(10) NOT NULL,-> c3 CHAR(10),-> c4 VARCHAR(10)-> ) CHARSETascii ROW_FORMATCOM…

ARM、X86、RISC-V三分天下

引入: 简单的介绍一下X86、ARM、RISC-V三种cpu架构的区别和应用场景。 目录 简单概念讲解 1. X86架构 2. ARM架构 3. RISC-V架构 应用场景 X86、ARM和RISC-V是三种不同的CPU架构,它们在设计理念、指令集和应用场景上有一些区别。 简单概念讲解 1. X…

力扣Lc29---- 541. 反转字符串 II(java版)-2024年4月06日

1.题目描述 2.知识点 (1)执行步骤如下: 初始化 s “abcdefg” 和 k 2 将字符串分割成长度为 2k 4 的块。 对每个块中的前 k 2 个字符进行反转。 执行过程 1)第一次循环(i 0) start 0 end Math.min(0…

MPT - 初识账户状态树(World State)

往期回顾 ETH网络中的账户ETH网络中的区块链 通过以上文章,我们了解到ETH网络中的World State是节点根据交易维护的,节点在维护Wrold State时为了方便操作会将用户状态构建成一颗树,称为账户状态树,采用一种叫做MPT的数据结构 MP…

如何申请到免费SSL证书

免费SSL证书主要通过权威CA机构如Lets Encrypt、JoySSL等签发,具备基础的服务器身份验证功能,能有效防止中间人攻击,确保信息从用户的浏览器到服务器间的全程加密传输,保护用户隐私数据不被窃取或篡改。 尽管免费SSL证书可能存在有…

腾讯云添加域名后不生效

问题原因 添加域名后不生效可能是因为没有加CDN域名解析 解决步骤

ISWH卧式不锈钢管道离心泵

ISWH卧式不锈钢管道离心泵是一种设计精良的泵类产品,它采用先进的水力模型,结合高质量的不锈钢材料,确保了泵在输送流体时的高效率和长久耐用性。这种泵通常用于输送清水或其他类似于水的液体,特别是在需要避免腐蚀或污染的场合&a…

跨境金融区块链服务平台

跨境金融服务是因企业及个人跨境经营、交易、投资、往来等活动而产生的资金使用、调拨、配置等需求,而提供的金融服务。近年来,随着我国经济的快速稳步增长和全球化经济一体化的不断深入发展,跨境金融业务增长迅速,监管也开始转化…

2024年【安全员-C证】最新解析及安全员-C证实操考试视频

题库来源:安全生产模拟考试一点通公众号小程序 安全员-C证最新解析是安全生产模拟考试一点通生成的,安全员-C证证模拟考试题库是根据安全员-C证最新版教材汇编出安全员-C证仿真模拟考试。2024年【安全员-C证】最新解析及安全员-C证实操考试视频 1、【多…

各主流电商数据采集机器人|电商数据采集API接口(淘宝/京东/1688)抓取效率提升100%

业务痛点 某电商代运营公司帮助新手电商在京东平台进行开店、创业,需要获取平台上大量的商品信息,以作为帮助客户分析选品趋势,爆款打造的依据。 商家或客服人员通常需要整理、分析的商品数据量巨大。客服每天需要频繁点击、下载大量商品信…

tomcat 结构目录

bin 启动,关闭和其他脚本。这些 .sh文件(对于Unix系统)是这些.bat文件的功能副本(对于Windows系统)。由于Win32命令行缺少某些功能,因此此处包含一些其他文件。比如说:windows下启动tomcat用的是…

文档管理系统解决方案(word原件)

1.系统概述 1.1.需求描述 1.2.需求分析 1.3.重难点分析 1.4.重难点解决措施 2.系统架构设计 2.1.系统架构图 2.2.关键技术 数据备份技术 3.系统功能设计 3.1.功能清单列表 3.2.基础数据管理 3.3.位置管理 3.4.文档使用 3.5.文档管理 软件全套资料包获取方式①:软件项…

[C#]winform使用OpenCvSharp实现透视变换功能支持自定义选位置和删除位置

【透视变换基本原理】 OpenCvSharp 是一个.NET环境下对OpenCV原生库的封装,它提供了大量的计算机视觉和图像处理的功能。要使用OpenCvSharp实现透视变换(Perspective Transformation),你首先需要理解透视变换的原理和它在图像处理…

院内感染的相关因素分析(Boruta联合SHAP分析2)R

院内感染的相关因素分析(Boruta联合SHAP分析2)R 和鲸社区一键运行代码 院内感染是指住院患者在医疗机构内发生的感染,是医院管理中常见且严重的问题。院内感染不仅会延长患者住院时间,增加医疗费用,还会严重威胁患者生…

大语言模型落地的关键技术:RAG

1、什么是RAG? RAG 是检索增强生成(Retrieval-Augmented Generation)的简称,是当前最火热的大语言模型应用落地的关键技术,主要用于提高语言模型的效果和准确性。它结合了两种主要的NLP方法:检索&#xff…

如何使用CSS构建一个瀑布流布局

如何使用CSS构建一个瀑布流布局 瀑布流布局是一种常见的网页布局方式,其中元素以不同的大小排列,且行与列之间没有不均匀的间隙。在瀑布流布局中,即使某一行或列中的元素较短,下一个元素也会占据空间。 如何实现瀑布流布局 实现…

【Frida】【Android】 工具篇:查壳工具大赏

🛫 系列文章导航 【Frida】【Android】01_手把手教你环境搭建 https://blog.csdn.net/kinghzking/article/details/136986950【Frida】【Android】02_JAVA层HOOK https://blog.csdn.net/kinghzking/article/details/137008446【Frida】【Android】03_RPC https://bl…

深入浅出 -- 系统架构之负载均衡Nginx反向代理

一、Nginx反向代理-负载均衡 首先通过SpringBootFreemarker快速搭建一个WEB项目:springboot-web-nginx,然后在该项目中,创建一个IndexNginxController.java文件,逻辑如下: Controller public class IndexNginxControl…