需求
爬取星巴克产品以及图片,星巴克菜单
- 网页分析: 首先,需要分析星巴克官方网站的结构,了解菜单栏的位置、布局以及菜单项的标签或类名等信息。
- 发送 HTTP 请求: 使用 Python 的 requests 模块发送 HTTP GET 请求,获取星巴克网页的 HTML 内容。
- 解析 HTML: 使用一个 HTML 解析库(如 BeautifulSoup)解析网页的 HTML 内容,以便从中提取出菜单栏的数据。
- 定位菜单栏元素: 使用解析库的选择器功能(如 CSS 选择器或 XPath)定位菜单栏所在的 HTML 元素。
- 提取菜单数据: 从菜单栏元素中提取菜单项的信息,可能包括菜单项名称、图片等。
- 数据存储: 将提取的菜单数据存储到适合的数据结构中。
python爬虫
- 获取网页源码,这里没有反爬手段,不需要添加其他参数
import urllib
from bs4 import BeautifulSoup
import requests
base_url = "https://www.starbucks.com.cn/menu/"
response = urllib.request.urlopen(base_url)
content = response.read().decode('utf-8')
soup = BeautifulSoup(content, 'lxml')
import os
save_path = "./practice_071_星巴克/"
if not os.path.exists(save_path): os.makedirs(save_path)
name_list = soup.select('ul[class="grid padded-3 product"]')
for name in name_list:
submenu_pic = name.select('li div')
submenu_name = name.select('li strong')
for pic_url,name in zip(submenu_pic, submenu_name):
suffix = pic_url["style"].split('("')[-1].split('")')[0]
picture_url = 'https://www.starbucks.com.cn' + suffix
picture_name = name.get_text() + ".jpg"
picture_name = picture_name.strip().replace("/", 'or')
src_response = urllib.request.urlopen(picture_url)
pic_content = src_response.read()
with open(os.path.join(save_path,picture_name), 'wb') as fp:
fp.write(pic_content)
print("{} 完成,地址为 {}".format(picture_name, picture_url))
menu_list = soup.find('div', class_="wrapper fluid margin page-menu-list").find_all('li')
for name in menu_list:
suffix = name.find('div')["style"].split('("')[-1].split('")')[0]
picture_url = 'https://www.starbucks.com.cn' + suffix
picture_name = name.find("strong").get_text() + ".jpg"
picture_name = picture_name.strip().replace("/", 'or')
urllib.request.urlretrieve(url=picture_url, filename=os.path.join(save_path,picture_name))
print("{} 完成,地址为 {}".format(picture_name, picture_url))
爬取结果