Python爬虫:简单爬取粤菜菜谱

项目场景:

简单爬取粤菜菜谱。


实现思路:

  1. 访问主页,获取每个菜品的菜名、图片、详情页面网址。
    主页

  2. 访问上一步中获得的所有详情页面,获取工艺、口味、时间、主料、辅料信息。
    详情页面

  3. 清洗所获得的数据。

  4. 保存至本地文件。


实现过程:

  1. 获取菜品详情的网址、菜名、图片网址:
from bs4 import BeautifulSoup
import requests
import chardet
import pandas as pd
import re# 构造请求头
ua = {'User-Agent': 'Mozilla/5.0 (Windows NT 6.1; Win64; x64) Chrome/65.0.3325.181'}
# 构造网址
url = ''
# 发起请求
rqg = requests.get(url, headers=ua)
# 调整编码
rqg.encoding = chardet.detect(rqg.content)['encoding']
# 初始化HTML
html = rqg.content.decode('utf-8')
# 生成BeautifulSoup对象
soup = BeautifulSoup(html, "lxml")
# print(soup)

在主页中需要获取信息的地方右键检查,以获取菜品封面图片为例:
检查

这样就定位到了图片网址,其中还包括了详情页面的网址:
定位
以同样的方式在主页定位菜名:
定位

菜品(详情页面)网址菜名菜品图片网址
定位方法<a> 标签及其类名<a> 标签类名 + <strong> 标签类名<a> 标签及其类名
保存至urls 列表titles 列表imgs 列表
urls,titles,imgs = [],[],[]# 提取菜品网址
for tag in soup.find_all("a", attrs={'class': 'list_s2_item_img'}):urls.append(tag['href'])# 提取菜名
for tag in soup.select('.list_s2_item_info .title'):titles.append(tag.text)# 提取图片网址
com = re.compile(r'background:url\((.*?)\).*?')
for tag in soup.find_all("a", attrs={'class': 'list_s2_item_img'}):res = re.findall(com, tag['style'])imgs.append(re.findall(com, tag['style'])[0])

打印详情页面网址、菜名、图片网址,检查一下是否成功得到了想要的数据。
打印

  1. 从菜品详情页提取工艺、口味、制作时长、食材:

对元素的定位方法同上一步相似,但要注意对字符串中空格的清除;特别地,因为爬取到的主料与辅料都是多个字符串,因此需要拼接(这里只保留了食材的种类,把主料与辅料拼接到一起,忽略食材的用量)。如果有需要的话,还需要对制作时长进行单位的转换。

process,flavor,cost,ingredients = [],[],[],[]for u in urls:# 发起请求r = requests.get(u, headers=ua)# 调整编码r.encoding = chardet.detect(r.content)['encoding']# 初始化HTMLh = r.content.decode('utf-8')# 生成BeautifulSoup对象s = BeautifulSoup(h, "lxml")# print(s)# 提取工艺# 获取所有class属性为info2_item info2_item1的div标签tag = s.find_all("div", attrs={'class': 'info2_item info2_item1'})temp = tag[0].textprocess.append(temp[3:].replace('\n',''))# 提取口味# 获取所有class属性为info2_item info2_item2的div标签tag = s.find_all("div", attrs={'class': 'info2_item info2_item2'})temp = tag[0].textflavor.append(temp[3:].replace('\n',''))# 提取制作时间# 获取所有class属性为info2_item info2_item3的div标签tag = s.find_all("div", attrs={'class': 'info2_item info2_item3'})temp = tag[0].textcost.append(temp[3:].replace('\n',''))# 提取主料与辅料temp = []com = re.compile(r'<strong><a .*?>(.*?)</a>(.*?)</strong>')for tag in s.find_all("div", attrs={'class': 'recipe_ingredients'}):item = re.findall(com, str(tag))for i in range(len(item)):# print(item[i])# temp.append(item[i][0])temp.append(item[i][0].replace(' ',''))		# 删去空格# 对食材作字符串拼接igd = ''for item in temp:igd = igd + item + '、'ingredients.append(igd[:-1])
  1. 保存至本地文件:

先把数据一起放到 DataFrame 里看看:

df = pd.DataFrame([urls,imgs,titles,process,flavor,cost,ingredients], index=None)
df

检查数据

按照(我)对数据的使用习惯,需要对这个DataFrame做个转置:

df = df.T
df.columns = ['url','img','title','process','flavor','cost','ingredient']
df

转置

这样看着舒服多了。然后存入本地 xlsx 文件。我选的 utf8,也可以用 gb2312 或者其他的编码方式。

df.to_excel('Cantonese.xlsx', encoding='utf8')

最后可以打开文件看看写入的结果:
xlsx
这里因为之前处理食材数据换行符的时候忘记一起删去空格了,所以这个 xlsx 里的数据还不是很干净,但上面的代码已经改了。

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

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

相关文章

文心一言的魔性作图,我头都笑掉了...

这几天看到网友们用文心一言作的图&#xff0c;看了后我都愣住了。。。 AI 作画 -- 三得利乌龙茶 AI 作画 -- 娃娃菜 AI 作画 -- 车水马龙 AI 作画 -- 驴肉2火烧 AI 作画 -- 唐伯虎点秋香 AI 作画 -- 鱼香肉丝 AI 作画 -- 胸有成竹 AI 作画 -- 夫妻肺片 AI 作画 -- 红烧狮子头 …

使用chrome浏览器插件postman模拟post、get请求

使用chrome浏览器插件postman模拟post、get请求 postman为chrome浏览器的一个插件&#xff0c;用来模拟post请求&#xff0c;get请求等。可以在chrome浏览器里安装插件&#xff08;前提是你得访问了Google应用商店&#xff09;。 如果不能访问Google&#xff0c;那个下载一个p…

chrome浏览器无法开启同步功能 request cancel

找了很多亲测最新100版本可用&#xff01;&#xff01;&#xff01; 步骤 1、从下面链接提取google插件【Chrome-Sync-Helper】 链接: https://pan.baidu.com/s/1FTxrQ-IRjRmYdW5HcNateA 提取码: htga &#xff08;如链接失效&#xff0c;请留言反馈&#xff01;&#xff09; …

Chrome 添加【微信 / QQ】内置浏览器(解决 “请在微信客户端打开链接” 提示)

前言 有些链接&#xff0c;是需要在微信客户端内才能打开的&#xff0c;那么想在 PC 端的浏览器上打开&#xff0c;怎么办呢&#xff1f; UA 不明白的话先不用管&#xff0c;继续往下看。 【安卓QQ内置浏览器UA】 Mozilla/5.0 (Linux; Android 5.0; SM-N9100 Build/LRX21V…

chrome浏览器控制台发送post请求

谷歌浏览器&#xff0c;点击F12&#xff0c;在控制台中输入下面代码&#xff0c;直接回车即可&#xff1a;&#xff08;需要修改一下Admin-Token的值即可&#xff09; 设置访问的Controller路径&#xff0c;“http://127.0.0.1:8090/api/dwStandard/superUploadBigFile” met…

和 if else说再见,SpringBoot 这样做参数校验才足够优雅!

大家好&#xff0c;我是老赵! 一、概述 当我们想提供可靠的 API 接口&#xff0c;对参数的校验&#xff0c;以保证最终数据入库的正确性&#xff0c;是 必不可少 的活。比如下图就是 我们一个项目里 新增一个菜单校验 参数的函数&#xff0c;写了一大堆的 if else 进行校验&…

全球诺贝尔奖得主最多的30所大学

自1901年以来&#xff0c;诺贝尔奖得主全球最多的30所大学&#xff0c;这些大学堪称是真正的世界一流大学。世界一流大学的指标很多&#xff0c;但是有一项重要指标不可缺失&#xff0c;那就是至少有10位以上诺贝尔奖得主。以下是笔者根据维基百科整理的1901年至2018年间&#…

【娜家花园养花小记】

种花的话&#xff0c;看花开花落&#xff0c;经历寒冬酷暑&#xff0c;都是生命的一个体验的过程。月季花很坚强&#xff0c;酷暑来了&#xff0c;寒冬来了&#xff0c;它休眠一下。然后在其他时间呢&#xff0c;它就尽情的拿生命去绽放。种花更多的感受它带给你的快乐。带给你…

一生必看的 100 幅世界名画

智慧与美&#xff0c;是我之最爱。 从早期的叙事性绘画&#xff0c;直至后期更加侧重抒情与抽象的现代派绘画。希望这篇用心的长文&#xff0c;可以成为你开启艺术之们的钥匙。如果有幸有一幅画面&#xff0c;能够触及你内心柔软的角落抑或隐秘的激情&#xff0c;也请你静下心来…

2022-09-11 stonedb-宣讲-第二讲-一条SQL在Tianmu引擎中的运行

摘要: 记录列存储引擎第二讲的绸缪规划。 宣传语: 标题: 一条查询SQL在Tianmu引擎中的代码实现 宣讲语: 你是否只读过数据库理论的书籍, 但是一遇到代码就头疼呢? 你是否只会在理论上和数学公式上推导数据库内核, 但是从没亲自做过数据库内核的实现呢? 你是否对于数据库…

「上帝粒子」发现10周年

来源&#xff1a;FUTURE | 远见 选编&#xff1a;闵青云 2012年7月4日&#xff0c;欧洲核子研究中心&#xff08;CERN&#xff09;宣布发现了「上帝粒子」&#xff08;希格斯玻色子&#xff09;。希格斯玻色子是粒子物理学标准模型预言的一种玻色子&#xff0c;正是它的存在&…

全球诺贝尔奖得主最多的30所大学排名

上一篇&#xff1a;再见了阿里巴巴&#xff0c;希望以后不再有福报 100多年来&#xff0c;诺贝尔奖&#xff0c;尤其是自然科学领域的几种奖项&#xff0c;始终是全球范围内最受瞩目的科学荣誉。我们为您盘点1901-2019年全球诺贝尔获得者&#xff08;包括毕业生及职员&#xff…

SignalPlus 2023宏观经济展望:洞见机遇,迎接挑战

1. 2022 年市场回顾 (Markets in Review) 虽然理由不尽相同&#xff0c;但对于宏观资产和加密资产而言&#xff0c; 2022 年都是值得铭记的一年&#xff0c;Luna、FTX、Genesis 等机构的崩塌对加密货币生态系造成了灾难性的破坏&#xff0c;同时宏观市场也见证了一个强硬的美联…

python-微信自动发送信息2

《《由于女朋友最近打算考编&#xff0c;作为一名合格的男票肯定要天天督促啦。》》 实现目标&#xff1a;利用python实现微信自动发送教育学or心理学题目 实现思路&#xff1a; 1.从本地读取教育学心理学题目&#xff0c;并随机抽取一题。 2.使用python自带模块os.system模…

20145237 《Java程序设计》第七周学习总结

20145237 《Java程序设计》第七周学习总结 教材学习内容总结 第十三章 一、认识时间与日期 1.时间的度量 在正式认识Java提供了哪些时间处理API之前&#xff0c;得先来了解一些时间、日期的历史问题&#xff0c;这样你才会知道&#xff0c;时间日期确实是个很复杂的问题&…

GAMES101-现代计算机图形学入门-闫令琪 - lecture2 线性代数基础 - 课后笔记

向量的点乘 在图形学中&#xff0c;点乘的作用&#xff1a; 能够计算两个向量之间的角度&#xff0c;例如计算曲面和曲线之间的角度&#xff0c;用于计算两个方向向量之间距离有多近&#xff0c;越近其cos值越大&#xff0c;越小则越远&#xff0c;值为-1~1.能够将一个向量投影…

20155304 2016-2017-2 《Java程序设计》第七周学习总结

20155304 2016-2017-2 《Java程序设计》第七周学习总结 教材学习内容总结 1.时间的度量&#xff1a; 格林威治标准时间&#xff08;GMT&#xff09;通过观察太阳而得&#xff0c;其正午是太阳抵达天空最高点之时&#xff0c;因地球的公转与自传&#xff0c;会造成越来越大的时间…

ChineseGLUE:为中文NLP模型定制的自然语言理解基准

机器之心整理 参与&#xff1a;张倩、郑丽慧 GLUE 是一个用于评估通用 NLP 模型的基准&#xff0c;其排行榜可以在一定程度上反映 NLP 模型性能的高低。然而&#xff0c;现有的 GLUE 基准针对的是英文任务&#xff0c;无法评价 NLP 模型处理中文的能力。为了填补这一空白&…

全球诺贝尔奖得主最多的30所大学排名!

Datawhale分享 信息&#xff1a;诺贝尔奖&#xff0c;整理&#xff1a;图灵人工智能 100多年来&#xff0c;诺贝尔奖&#xff0c;尤其是自然科学领域的几种奖项&#xff0c;始终是全球范围内最受瞩目的科学荣誉。我们为您盘点1901-2019年全球诺贝尔获得者&#xff08;包括毕业…

GAMES101-现代计算机图形学入门-闫令琪 - lecture13 光线追踪1(Ray Tracing 1 - Whitted-Style Ray Tracing) - 课后笔记

光线追踪1 &#xff08;Ray Tracing 1 - Whitted-Style Ray Tracing&#xff09; 课程一共分为四个大的板块&#xff0c;目前已经学习了光栅化和几何&#xff0c;可以实现图1和2的效果&#xff0c;下面要来学习第三个大的板块&#xff0c;光线追踪。 为什么要使用光线追踪&…