Python爬虫实例——菜单推荐

Python爬虫——获取菜单推荐

1.准备工作

一台已经装有python的desktop;

安装本次爬取所需要的库文件bs4、requests、random库。

2.考虑爬虫代码框架

(1)需要爬取菜单页面方法;

(2)需要打印获取内容方法;

(3)需要输入关键字的方法;

(4)需要爬取制作流程的方法。

3.爬取菜单页面

def getmenu(url):
  try:
     r = requests.get(url)  //request方法获取整个食品网站的页面信息
     r.raise_for_status()   //异常状态反馈
     r.encoding='utf-8'     //转换菜单页面编码方式
     m=r.text
     menu=[]  

     html = BeautifulSoup(m,'html.parser')  //BeautifulSoup库对于解析页面方面特别方便,这次实验也采用改库解析页面信息
     for i in html.find_all('div',attrs={'class':'pic'}):  //find_all 方法根据标签找到菜单存储的标签
        menu.append(i.img.attrs['alt'])  //获取菜名
     for i in html.find_all('div',attrs={'class':'pic'}):
        makeurl=i.a.attrs['href']  //获取制作方法所在的页面链接
     return  menu,makeurl  //返回获取的信息


  except:
     print ('exception')

4.爬取制作流程的方法

def getmake(url):
  try:
    r = requests.get(url)
    r.raise_for_status()
    r.encoding='utf-8'
    m=r.text
    make=[]

    html = BeautifulSoup(m,'html.parser')
    for i in html.find_all('div',attrs={'class':'cp-show-main-step-item'})://BeautifulSoup库方法find_all方法根据标签查找内容
        make.append(i.div.string)  //append就不赘述了,各种编程语言都有
    return make


  except:
    print ('exception')

5.注意

(1)你可以也注意到了爬取页面的方法和爬取制作方法时,我都采用try-exception的形式,这是避免爬取过程中出现问题,能过及时反馈和查找原因,大家在编写爬虫的时候也尽量采用该方法。

(2)在获取内容的时候需要进行页面分析

根据标签查找相应的内容。

6.代码展示

# -*- coding:utf-8 -*-
import  requests
from bs4 import BeautifulSoup
import  sys
import random

reload(sys)
sys.setdefaultencoding( "utf-8" )

def getmenu(url):
  try:
    r = requests.get(url)
    r.raise_for_status()
    r.encoding='utf-8'
    m=r.text
    menu=[]

    html = BeautifulSoup(m,'html.parser')
    for i in html.find_all('div',attrs={'class':'pic'}):
        menu.append(i.img.attrs['alt'])
    for i in html.find_all('div',attrs={'class':'pic'}):
        makeurl=i.a.attrs['href']
    return  menu,makeurl


  except:
    print ('exception')



def getmake(url):
  try:
    r = requests.get(url)
    r.raise_for_status()
    r.encoding='utf-8'
    m=r.text
    make=[]

    html = BeautifulSoup(m,'html.parser')
    for i in html.find_all('div',attrs={'class':'cp-show-main-step-item'}):
        make.append(i.div.string)
    return make


  except:
    print ('exception')


def  printmenu(getpage):
     m=random.randint(1,10)
     if getpage[m] in getpage:
           print (getpage[m])



def  choosemenu():
    choose= input('请输入你要获取的菜单推荐内容:')
    flag= input('是否需要具体的做法:1,需要;2,不需要:\n')
    return choose,flag

def main():
    m=choosemenu()
    choose=m[0]
    flag=m[1]
    url = "http://www.chinacaipu.com/index/search?keyword="+choose
    getpage=getmenu(url)[0]
    printmenu(getpage)

    makeurl=getmenu(url)[1]

    make=getmake(makeurl)

    if flag == '1' :
        print ("具体的做法如下所示:\n")
        for i in make :
              print i




main()

写在最后

这次只是简单的实现,更多的靠大家去自己去编写。

编写的过程中,最主要的是能够找到藏在页面HTML中的信息,需要多多练习。

posted @ 2017-08-10 08:54  站在远方望童年  阅读(1050)  评论(0)    收藏  举报