import requests
from bs4 import BeautifulSoup
import csv
data=[]#建立空列表
#总结URL规律:常见食物分类有十个大类,每个大类下有十页菜单
for i in range(1,11):#设置大类取值范围
for n in range(1,11):#设置菜单取值范围
#设置url
url='https://www.boohee.com/food/group/{}?page={}'.format(i,n)
#每个URL的请求头相同
headers={
'User-Agent':'Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.110 Safari/537.36',
'Cookie':'acw_tc=0a5510c216404957518707856e485b09255a6ea4bb231f15cf45ed2cbaf32a; Hm_lvt_7263598dfd4db0dc29539a51f116b23a=1639284592,1639894206,1639919094,1640495752; Hm_lpvt_7263598dfd4db0dc29539a51f116b23a=1640496180'
}
res=requests.get(url=url,headers=headers)#请求URL
bs=BeautifulSoup(res.text,'html.parser')#解析URL,别忘了text
#提取大类时选择列表上方的大类,可与URL形成对应
category=bs.find('div',class_='widget-food-list pull-right').find('h3').text.strip()
#先寻找能代表总表的tag,再寻求往下细分
tag_zong=bs.find('ul',class_='food-list').find_all('li',class_='item clearfix')#ul代表总表,所有事物信息分布在li中
for tag in tag_zong:
name=tag.find('div',class_='text-box pull-left').find('h4').find('a')['title']#提取食物名称
calorie=tag.find('div',class_='text-box pull-left').find('p').text[3:]#提取热量值,通过切片去掉多余信息
link='https://www.boohee.com'+tag.find('div','img-box pull-left').find('a')['href']#提取链接
#建立字典
dict={
'食物分类':category,
'食物名称':name,
'食物热量':calorie,
'食物链接':link
}
print(dict)
data.append(dict)#添加列表
#存储数据
with open('薄荷健康.csv','w',encoding='utf-8',newline='') as w:
header=['食物分类','食物名称','食物热量','食物链接']
writer=csv.DictWriter(w,fieldnames=header)
writer.writeheader()
writer.writerows(data)