项目场景:

简单爬取粤菜菜谱。


实现思路:

  1. 访问主页,获取每个菜品的菜名、图片、详情页面网址。

  2. 访问上一步中获得的所有详情页面,获取工艺、口味、时间、主料、辅料信息。

  3. 清洗所获得的数据。

  4. 保存至本地文件。


实现过程:

  1. 获取菜品详情的网址、菜名、图片网址:
from bs4 import BeautifulSoup
import requests
import chardet
import pandas as pd
import re# 构造请求头
ua = {'User-Agent': 'Mozilla/5.0 (Windows NT 6.1; Win64; x64) Chrome/65.0.3325.181'}
# 构造网址
url = ''
# 发起请求
rqg = requests.get(url, headers=ua)
# 调整编码
rqg.encoding = chardet.detect(rqg.content)['encoding']
# 初始化HTML
html = rqg.content.decode('utf-8')
# 生成BeautifulSoup对象
soup = BeautifulSoup(html, "lxml")
# print(soup)

在主页中需要获取信息的地方右键检查,以获取菜品封面图片为例:

这样就定位到了图片网址,其中还包括了详情页面的网址:

以同样的方式在主页定位菜名:

菜品(详情页面)网址 菜名 菜品图片网址
定位方法 <a> 标签及其类名 <a> 标签类名 + <strong> 标签类名 <a> 标签及其类名
保存至 urls 列表 titles 列表 imgs 列表
urls,titles,imgs = [],[],[]# 提取菜品网址
for tag in soup.find_all("a", attrs={'class': 'list_s2_item_img'}):urls.append(tag['href'])# 提取菜名
for tag in soup.select('.list_s2_item_info .title'):titles.append(tag.text)# 提取图片网址
com = re.compile(r'background:url\((.*?)\).*?')
for tag in soup.find_all("a", attrs={'class': 'list_s2_item_img'}):res = re.findall(com, tag['style'])imgs.append(re.findall(com, tag['style'])[0])

打印详情页面网址、菜名、图片网址,检查一下是否成功得到了想要的数据。

  1. 从菜品详情页提取工艺、口味、制作时长、食材:

对元素的定位方法同上一步相似,但要注意对字符串中空格的清除;特别地,因为爬取到的主料与辅料都是多个字符串,因此需要拼接(这里只保留了食材的种类,把主料与辅料拼接到一起,忽略食材的用量)。如果有需要的话,还需要对制作时长进行单位的转换。

process,flavor,cost,ingredients = [],[],[],[]for u in urls:# 发起请求r = requests.get(u, headers=ua)# 调整编码r.encoding = chardet.detect(r.content)['encoding']# 初始化HTMLh = r.content.decode('utf-8')# 生成BeautifulSoup对象s = BeautifulSoup(h, "lxml")# print(s)# 提取工艺# 获取所有class属性为info2_item info2_item1的div标签tag = s.find_all("div", attrs={'class': 'info2_item info2_item1'})temp = tag[0].textprocess.append(temp[3:].replace('\n',''))# 提取口味# 获取所有class属性为info2_item info2_item2的div标签tag = s.find_all("div", attrs={'class': 'info2_item info2_item2'})temp = tag[0].textflavor.append(temp[3:].replace('\n',''))# 提取制作时间# 获取所有class属性为info2_item info2_item3的div标签tag = s.find_all("div", attrs={'class': 'info2_item info2_item3'})temp = tag[0].textcost.append(temp[3:].replace('\n',''))# 提取主料与辅料temp = []com = re.compile(r'<strong><a .*?>(.*?)</a>(.*?)</strong>')for tag in s.find_all("div", attrs={'class': 'recipe_ingredients'}):item = re.findall(com, str(tag))for i in range(len(item)):# print(item[i])# temp.append(item[i][0])temp.append(item[i][0].replace(' ',''))       # 删去空格# 对食材作字符串拼接igd = ''for item in temp:igd = igd + item + '、'ingredients.append(igd[:-1])
  1. 保存至本地文件:

先把数据一起放到 DataFrame 里看看:

df = pd.DataFrame([urls,imgs,titles,process,flavor,cost,ingredients], index=None)
df

按照(我)对数据的使用习惯,需要对这个DataFrame做个转置:

df = df.T
df.columns = ['url','img','title','process','flavor','cost','ingredient']
df

这样看着舒服多了。然后存入本地 xlsx 文件。我选的 utf8,也可以用 gb2312 或者其他的编码方式。

df.to_excel('Cantonese.xlsx', encoding='utf8')

最后可以打开文件看看写入的结果:

这里因为之前处理食材数据换行符的时候忘记一起删去空格了,所以这个 xlsx 里的数据还不是很干净,但上面的代码已经改了。

Python爬虫:简单爬取粤菜菜谱相关推荐

  1. python爬虫下载小说_用PYTHON爬虫简单爬取网络小说

    用PYTHON爬虫简单爬取网络小说. 这里是17K小说网上,随便找了一本小说,名字是<千万大奖>. 里面主要是三个函数: 1.get_download_url() 用于获取该小说的所有章节 ...

  2. 用PYTHON爬虫简单爬取网络小说

    前言 本文的文字及图片来源于网络,仅供学习.交流使用,不具有任何商业用途,如有问题请及时联系我们以作处理. PS:如有需要Python学习资料的小伙伴可以加点击下方链接自行获取 python免费学习资 ...

  3. Pycharm + python 爬虫简单爬取网站数据

    本文主要介绍简单的写一个爬取网站图片并将图片下载的python爬虫示例. 首先,python爬虫爬取数据,需要先了解工具包requests以及BeautifulSoup requests中文文档:ht ...

  4. Python爬虫——简单爬取(从网站上爬取一本小说)

    从笔下文学网站爬取一本名为<剑来>的小说,作者为烽火戏诸侯 网站网址如下:https://www.bxwxorg.com/ ①通过查看网页源码找规律(在此之前请弄清楚网站允许爬取的部分,就 ...

  5. python爬虫简单爬取爱思助手壁纸

    # 网络安全法最高可获得刑法 print("正则爬取地址") # 访问网址的库 import urllib.request import re name = 1 for i in ...

  6. python爬取天天基金_「天天基金网每日净值」python爬虫简单爬取天天基金的基金信息和每日净值 - 金橙教程网...

    天天基金网每日净值 fROM bs4 import BeautifulSoup import Requests import JSON import js2py import time from el ...

  7. python爬虫简单爬取天天基金的基金信息和每日净值

    from bs4 import BeautifulSoup import requests import json import js2py import time from elasticsearc ...

  8. python爬取ajax动态内容肯德基门店,Python爬虫如何爬取KFC地址

    随着人们生活水平的提高,肯德基这类的快餐消费的十分火爆,成为小朋友和年轻人的最爱,我们到一个地方想要找到肯德基店面,会根据导航获取肯德基地址,那你知道我们也可以使用python爬虫获取KFC地址吗?我 ...

  9. python爬虫能爬取微信密码吗_爬虫如何爬取微信公众号文章

    下篇文章:python爬虫如何爬取微信公众号文章(二) 下下篇连接python爬虫如何实现每天爬取微信公众号的推送文章 因为最近在法院实习,需要一些公众号的数据,然后做成网页展示出来便于查看,之前我倒 ...

最新文章

  1. Codeforces Round #513
  2. 《解释的工具:生活中的经济学原理 读书笔记6》
  3. Lambda表达式在Java 8中的简单应用
  4. %求余数 rand随机数
  5. 优酷背后的大数据秘密:资源弹性,可支撑EB级存储
  6. 嵌入式基于Linux电机控制,基于嵌入式arm+linux平台的直流电机调速控制系统.pdf
  7. 离散数学知识点总结-命题逻辑
  8. 初识Python(二)
  9. jmeter 线程执行顺序_软件接口测试工具Jmeter使用方法详解(一)
  10. visio哪个版本好用
  11. Linux 服务器后台运行.jar程序
  12. 阿里云code的git
  13. [单片机框架][bsp层][AT32F415][bsp_tim] tim定时器配置和使用
  14. 【计算机网络】计算机网络的组成
  15. openssl编程-DH
  16. 疯子、精神病患者、诗人、哲学家、伟大的思想家—— 尼采的孤独:《最孤独者》...
  17. 计算机组成原理 存储器
  18. 原神迷城战线光界篇冰结试炼怎么过
  19. Edge 浏览器新版来袭,Office 功能首次出现!
  20. cobar是什么? 能做什么?

热门文章

  1. Cocos2d-x之多分辨率屏幕适配
  2. 对进行神经网络的图片进行预处理
  3. Shellshock Attack Lab
  4. uboot启动流程概述_2017.09版uboot启动过程分析
  5. 面对对象方法 Linux,针对面向对象编程的一些想法
  6. python--利用有道网址编写一个翻译句子的程序
  7. 《蒋炳楠:ICP备案只要用心,通过其实很简单!》
  8. 苹果闪存性能测试软件,iPhone 6 TLC/MLC闪存性能测试
  9. linux扫描软件下载,Linux桌面的4种扫描工具
  10. [FROM WOJ]#1749 树的统计(zjoi2008)