python爬取下厨房每周最受欢迎菜谱

1、分析过程

1、进入网页——下厨房,右键->检查->Network->All,刷新网页点击第0个请求,再点击response。按下ctrl+f查找任意一个菜名,如能在response中找到,则数据放在html里。则可返回观察网页源代码,点击Elements。

注:如果在response中找不到数据,则数据应在XHR里,那么就要使用另一种方式抓取数据,本文只介绍在html里抓取数据

python应用界面下拉菜单选择 python获取下拉菜单内容_爬虫

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=的数值即可实现翻页。

python应用界面下拉菜单选择 python获取下拉菜单内容_数据_02

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)) #打印

代码写到这里可进行编译(编译结果部分截图):

python应用界面下拉菜单选择 python获取下拉菜单内容_数据_03

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') #保存

python应用界面下拉菜单选择 python获取下拉菜单内容_数据_04

  • 存储为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) #添加数据

python应用界面下拉菜单选择 python获取下拉菜单内容_解析数据_05

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,新手小白,多多指教。