python爬取下厨房每周最受欢迎菜谱
1、分析过程
1、进入网页——下厨房,右键->检查->Network->All,刷新网页点击第0个请求,再点击response。按下ctrl+f查找任意一个菜名,如能在response中找到,则数据放在html里。则可返回观察网页源代码,点击Elements。
注:如果在response中找不到数据,则数据应在XHR里,那么就要使用另一种方式抓取数据,本文只介绍在html里抓取数据
2、在Elements里找到我们需要抓取的数据(菜名、用料、链接),可以在菜名这里点击右键检查快速找到,可以发现菜名和链接放在标签
[p class=’‘name’’]里,用料则放在标签 [p class=“ing ellipsis”] 里。根据菜名的路径、URL的路径、食材的路径,我们可以找到这三者的最小共同父级标签,是:[div class=“recipe recipe-215-horizontal pure-g image-link display-block”]。 菜名和食材我们可以通过提取标签里的文本(text)得到,链接我们可以提取标签里的herf与https://www.xiachufang.com/做拼接获得。本周最受欢迎菜谱里一共有20页,观察网址我们发现,只需要通过改变链接末尾的page=的数值即可实现翻页。
2、代码实现
1、模块导入
#没有模块的请先下载相关模块,可以在终端输入 **pip install 模块名** 下载,或者在pycharm软件中点击
File->Setting->project->python interpreter 里下载。
#使用request来获取数据,使用BeautifulSoup来解析数据,使用csv或者openpyxl来存储数据。
import requests,csv,openpyxl
from bs4 import BeautifulSoup
2、获取解析数据
#获取所有目标url,本周最受欢迎菜谱里一共有20页,观察网址我们发现,只需要通过改变链接末尾的page=的数值即可实现翻页。
headers = {
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/88.0.4324.96 Safari/537.36'} #添加request headers,伪装成浏览器登录,若不添加则会被浏览器认出来是爬虫,而有的浏览器会限制爬虫,比如下厨房。
foods_list = [] #存储食物数据
for i in range(1,21):
url = 'https://www.xiachufang.com/explore/?page='+str(i) #通过改变i的数值达到爬取所有网页的目的
res = requests.get(url,headers=headers) #获取数据
soup = BeautifulSoup(res.text,'html.parser') #解析数据
inf = soup.find_all('div',class_="recipe recipe-215-horizontal pure-g image-link display-block") #找到最小父级共同标签
for food in inf:
food_name = food.find('img')['alt'] #菜名
food_ingredients = food.find('p',class_='ing ellipsis').text #食材
food_href = 'https://www.xiachufang.com/'+ food.find('a')['href'] #链接
foods_list.append([food_name,food_href,food_ingredients]) #把获取的数据添加到列表
print('菜名:\t%s\n用料:\t%s链接:\t%s\n'%(food_name,food_ingredients,food_href)) #打印
代码写到这里可进行编译(编译结果部分截图):
3、数据存储
- 存储为xlsx格式
#使用xlsx存储,需要导入openxlsx模块
wb = openpyxl.Workbook() #创建工作薄
sheet = wb.active #获取工作薄活动表
sheet.title = 'menu' #命名
headers = ['菜品','链接','用料'] #表头
sheet.append(headers)
for food in foods_list:
sheet.append(food) #添加数据
wb.save('xiachufang.xlsx') #保存
- 存储为csv格式
#使用csv保存,需要导入csv模块。
#调用open()函数打开csv文件,参数为: 文件名'下厨房.csv',写入模式 'w',newline='',encoding='utf-8'。
with open('下厨房.csv','w',newline='',encoding='utf-8')as file:
header = ['菜品','链接','用料'] #表头
writer = csv.writer(file) #创建writer对象
writer.writerow(header) #添加表头
for food in foods_list:
writer.writerow(food) #添加数据
4、完整代码
import requests,pprint,csv,openpyxl
from bs4 import BeautifulSoup
headers = {
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/88.0.4324.96 Safari/537.36'} #添加request headers,伪装成浏览器登录,若不添加则会被浏览器认出来是爬虫,而有的浏览器会限制爬虫,比如下厨房。
foods_list = [] #存储食物数据
for i in range(1,21):
url = 'https://www.xiachufang.com/explore/?page='+str(i) #通过改变i的数值达到爬取所有网页的目的
res = requests.get(url,headers=headers) #获取数据
soup = BeautifulSoup(res.text,'html.parser') #解析数据
inf = soup.find_all('div',class_="recipe recipe-215-horizontal pure-g image-link display-block") #找到最小父级共同标签
for food in inf:
food_name = food.find('img')['alt'] # 菜名
food_ingredients = food.find('p', class_='ing ellipsis').text # 食材
food_href = 'https://www.xiachufang.com/' + food.find('a')['href'] # 链接
foods_list.append([food_name, food_href, food_ingredients]) # 把获取的数据添加到列表
print('菜名:\t%s\n用料:%s链接:\t%s\n' % (food_name, food_ingredients, food_href)) # 打印
wb = openpyxl.Workbook() #创建工作薄
sheet = wb.active #获取工作薄活动表
sheet.title = 'menu' #命名
headers = ['菜品','链接','用料'] #表头
sheet.append(headers)
for food in foods_list:
sheet.append(food) #添加数据
wb.save('xiachufang.xlsx') #保存
3、总结
代码及xlsx,提取码:3xx2
over,新手小白,多多指教。