Python爬虫:简单爬取粤菜菜谱
项目场景:
简单爬取粤菜菜谱。
实现思路:
访问主页,获取每个菜品的菜名、图片、详情页面网址。
访问上一步中获得的所有详情页面,获取工艺、口味、时间、主料、辅料信息。
清洗所获得的数据。
保存至本地文件。
实现过程:
- 获取菜品详情的网址、菜名、图片网址:
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])
打印详情页面网址、菜名、图片网址,检查一下是否成功得到了想要的数据。
- 从菜品详情页提取工艺、口味、制作时长、食材:
对元素的定位方法同上一步相似,但要注意对字符串中空格的清除;特别地,因为爬取到的主料与辅料都是多个字符串,因此需要拼接(这里只保留了食材的种类,把主料与辅料拼接到一起,忽略食材的用量)。如果有需要的话,还需要对制作时长进行单位的转换。
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])
- 保存至本地文件:
先把数据一起放到 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 里的数据还不是很干净,但上面的代码已经改了。
Python爬虫:简单爬取粤菜菜谱相关推荐
- python爬虫下载小说_用PYTHON爬虫简单爬取网络小说
用PYTHON爬虫简单爬取网络小说. 这里是17K小说网上,随便找了一本小说,名字是<千万大奖>. 里面主要是三个函数: 1.get_download_url() 用于获取该小说的所有章节 ...
- 用PYTHON爬虫简单爬取网络小说
前言 本文的文字及图片来源于网络,仅供学习.交流使用,不具有任何商业用途,如有问题请及时联系我们以作处理. PS:如有需要Python学习资料的小伙伴可以加点击下方链接自行获取 python免费学习资 ...
- Pycharm + python 爬虫简单爬取网站数据
本文主要介绍简单的写一个爬取网站图片并将图片下载的python爬虫示例. 首先,python爬虫爬取数据,需要先了解工具包requests以及BeautifulSoup requests中文文档:ht ...
- Python爬虫——简单爬取(从网站上爬取一本小说)
从笔下文学网站爬取一本名为<剑来>的小说,作者为烽火戏诸侯 网站网址如下:https://www.bxwxorg.com/ ①通过查看网页源码找规律(在此之前请弄清楚网站允许爬取的部分,就 ...
- python爬虫简单爬取爱思助手壁纸
# 网络安全法最高可获得刑法 print("正则爬取地址") # 访问网址的库 import urllib.request import re name = 1 for i in ...
- python爬取天天基金_「天天基金网每日净值」python爬虫简单爬取天天基金的基金信息和每日净值 - 金橙教程网...
天天基金网每日净值 fROM bs4 import BeautifulSoup import Requests import JSON import js2py import time from el ...
- python爬虫简单爬取天天基金的基金信息和每日净值
from bs4 import BeautifulSoup import requests import json import js2py import time from elasticsearc ...
- python爬取ajax动态内容肯德基门店,Python爬虫如何爬取KFC地址
随着人们生活水平的提高,肯德基这类的快餐消费的十分火爆,成为小朋友和年轻人的最爱,我们到一个地方想要找到肯德基店面,会根据导航获取肯德基地址,那你知道我们也可以使用python爬虫获取KFC地址吗?我 ...
- python爬虫能爬取微信密码吗_爬虫如何爬取微信公众号文章
下篇文章:python爬虫如何爬取微信公众号文章(二) 下下篇连接python爬虫如何实现每天爬取微信公众号的推送文章 因为最近在法院实习,需要一些公众号的数据,然后做成网页展示出来便于查看,之前我倒 ...
最新文章
- Codeforces Round #513
- 《解释的工具:生活中的经济学原理 读书笔记6》
- Lambda表达式在Java 8中的简单应用
- %求余数 rand随机数
- 优酷背后的大数据秘密:资源弹性,可支撑EB级存储
- 嵌入式基于Linux电机控制,基于嵌入式arm+linux平台的直流电机调速控制系统.pdf
- 离散数学知识点总结-命题逻辑
- 初识Python(二)
- jmeter 线程执行顺序_软件接口测试工具Jmeter使用方法详解(一)
- visio哪个版本好用
- Linux 服务器后台运行.jar程序
- 阿里云code的git
- [单片机框架][bsp层][AT32F415][bsp_tim] tim定时器配置和使用
- 【计算机网络】计算机网络的组成
- openssl编程-DH
- 疯子、精神病患者、诗人、哲学家、伟大的思想家—— 尼采的孤独:《最孤独者》...
- 计算机组成原理 存储器
- 原神迷城战线光界篇冰结试炼怎么过
- Edge 浏览器新版来袭,Office 功能首次出现!
- cobar是什么? 能做什么?
热门文章
- Cocos2d-x之多分辨率屏幕适配
- 对进行神经网络的图片进行预处理
- Shellshock Attack Lab
- uboot启动流程概述_2017.09版uboot启动过程分析
- 面对对象方法 Linux,针对面向对象编程的一些想法
- python--利用有道网址编写一个翻译句子的程序
- 《蒋炳楠:ICP备案只要用心,通过其实很简单!》
- 苹果闪存性能测试软件,iPhone 6 TLC/MLC闪存性能测试
- linux扫描软件下载,Linux桌面的4种扫描工具
- [FROM WOJ]#1749 树的统计(zjoi2008)