简单的爬虫 从营养健康网爬取食物热量和营养成分等信息

最近所做课题需要获得大量的食物信息,但很难找到相关匹配的数据库。由于本人的专业不是偏算法的,所以对于爬虫这方面的知识是一片空白。在结合拜读了一些博主有关于爬虫的文章,以及自己实际的测试爬虫过程遇到的一些问题,最后写下这篇小小的感想。由于本人知识有限,如有错误,欢迎各位大佬赐教。个人的学习记录分享,仅供参考学习。

一、爬取分析
在浏览了一些有关于食物的网站后,发现一个比较符合本人项目要求的网站。
在这里插入图片描述
网址:http://db.foodmate.net/yingyang/type_0%3A1%3A0_1.html

首先我们先打开浏览器的开发者工具,查看分析html代码是否直接带有所需的信息。
在这里插入图片描述
这个网站的html代码刚好就带有我们所需的食物信息,所以可以考虑直接从代码上爬取这些信息。
下面给出实现的参考代码:

from urllib.parse import urlencode
import requests
from lxml import etree
import openpyxl

#  创建Excel表并写入数据
book=openpyxl.Workbook()
sh=book.active
sh.title='食物信息'
sh['A1'] = '食物名称'
sh['B1'] = '热量(千卡)'
sh['C1'] = '硫胺素(毫克)'
sh['D1'] = '钙(毫克)'
sh['E1'] = '蛋白质(克)'
sh['F1'] = '核黄素(毫克)'
sh['G1'] = '镁(毫克)'
sh['H1'] = '脂肪(克)'
sh['I1'] = '烟酸(毫克)'
sh['J1'] = '铁(毫克)'
sh['K1'] = '碳水化合物(克)'
sh['L1'] = '维生素C(毫克)'
sh['M1'] = '锰(毫克)'
sh['N1'] = '膳食纤维(克)'
sh['O1'] = '维生素E(毫克)'
sh['P1'] = '锌(毫克)'
sh['Q1'] = '维生素A(微克)'
sh['R1'] = '胆固醇(毫克)'
sh['S1'] = '铜(毫克)'
sh['T1'] = '胡罗卜素(微克)'
sh['U1'] = '钾(毫克)'
sh['V1'] = '磷(毫克)'
sh['W1'] = '视黄醇当量(微克)'
sh['X1'] = '钠(毫克)'
sh['Y1'] = '硒(微克)'
sh['Z1'] = '网址'

row=2
ua = "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/42.0.2311.135 Safari/537.36 Edge/12.10240"
#如url = "http://db.foodmate.net/yingyang/type_0%3A6%3A0_6.html"
#多页爬取
food=[]
nutrient=[]
number=[]
address=[]
for i in range(21,22): #食物种类
    for j in range(0,50): #食物种类下各种食物
        url = "http://db.foodmate.net/yingyang/type_0%3A" + str(i) +"%3A" + str(j) +"_"+str(i) +".html"#网址
        with requests.request('GET',url,headers = {'User-agent':ua}) as res:
            content = res.text          #获取HTML的内容
            html = etree.HTML(content)  #分析HTML,返回DOM根节点
            name = html.xpath("//*[@id='rightlist']/center/font/b/text()")#食物名称
            information_name = html.xpath( "//*[@id='rightlist']/div/div/text()") #营养素
            information_number = html.xpath( "//*[@id='rightlist']/div/text()")  #含量
            for j in range(0,len(information_name)):
                sh.cell(row,j+2).value=str(information_number[j])
            for m in range(0,len(name)):
                sh.cell(row,26).value=str(url)
                sh.cell(row,1).value=str(name[m])
            row+=1
            print(1)
            #food.append(name)
            #nutrient.append(information_name)
            #number.append(information_number)   
            #address.append(url)
            
book.save('药食及其他.xlsx')
#print(food)
#print(nutrient)
#print(number)
#print(address)

该参考代码是实现爬取“药食及其他”的数据爬取并输出一个Excel表格。如果想要爬取其他的只需要修改“食物种类对应网址与现在对应的不同即可,一般都是有规律的,这里的是只需要修改代码中的:for i in range(21,22): #食物种类”里面的对应数字即可。如果该页面下的种类下各种食物:for j in range(0,50): #食物种类下各种食物 里面的数字即可。最后输出的表格如下:
在这里插入图片描述

  • 4
    点赞
  • 52
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值