标签:cookies temp alt life 输出 reset 问题 operator default
代码已放置
─foot_meishijie
│ app.py
│
├─.idea
│ │ .gitignore
│ │ foot_meishijie.iml
│ │ misc.xml
│ │ modules.xml
│ │ vcs.xml
│ │ workspace.xml
│ │
│ └─inspectionProfiles
│ profiles_settings.xml
│
├─get_caipu
│ analyze_url.py
│ get_url.py
│ get_data.py
│ test.py
│
├─static
│ │ 美食数据分析.docx
│ │ 美食数据分析.md
│ │ 美食数据分析.pdf
│ │
│ ├─css
│ │ cyclopedia.css
│ │ font-awesome.min.css
│ │ header.css
│ │ index.css
│ │ reset.css
│ │ show.css
│ │ swiper-bundle.min.css
│ │
│ ├─img
│ │ │ 宫保鸡丁.jpg
│ │ │ 水煮肉片.jpg
│ │ │ 酱爆鸡丁.jpg
│ │ │
│ │ └─caixi
│ │ 川菜.jpg
│ │ 徽菜.jpg
│ │ 浙菜.jpg
│ │ 湘菜.jpg
│ │ 粤菜.jpg
│ │ 苏菜.jpg
│ │ 闽菜.jpg
│ │ 鲁菜.jpg
│ │
│ └─js
│ autoload.js
│ echarts.min.js
│ jquery-ui.js
│ jquery.js
│ marked.min.js
│ swiper-bundle.min.js
│
├─templates
│ │ about.html
│ │ cyclopedia.html
│ │ index.html
│ │ show.html
│ │
│ ├─echarts
│ │ bar.html
│ │ pie.html
│ │
│ └─wordcount
│ ingredient1.html
│ ingredient2.html
│
└─visual
bar_make.py
pie_make.py
get_visual.py
stop_word.txt
test.py
wordcount.py
爬虫
requests拿取+xpath解析+re清洗+mysql存储
分析
pyecharts制作+mysql分析
可视化
html+css+javascript+flask+博客园小玩偶+swiper轮播图
MySQL表中需要拥有对应两张表和MySQL配置
三步运行
①运行项目文件夹下get_caipu文件夹下的get_data.py文件拿数据
②运行项目文件夹下visual文件夹下的get_visual.py文件生成所有图表加上分析
③运行项目文件夹下app.py文件,进行可视化展示
1.拿链接地址存放
想法:先拿到所有的url链接
原因:拿到菜系字段,还需要拿到菜系url,获取其中的菜系字段
实施:使用request请求和xpath提取链接,存放mysql表中
2.拿数据存放
想法:拿所有数据
原因:有些数据不够完美
实施:使用xpath拿到想要的数据,然后使用re清洗部分数据
CREATE TABLE `url` (
`id` INT NOT NULL AUTO_INCREMENT,
`dishes_system` VARCHAR ( 255 ),
`url` VARCHAR ( 255 ),
PRIMARY KEY ( `id` )
)
import re
?
import pymysql
import requests
from lxml import etree
?
"""此程序用于拿取需要爬取的所有url,存于MySQL数据库当中"""
?
‘‘‘
第一步:
爬取网页需要用到的,需要执行多次
‘‘‘
?
?
def get_url(url):
# 步骤:
# 1.模拟浏览器头部信息
headers = {
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) "
"Chrome/91.0.4455.2 Safari/537.36 "
}
cookie = {
‘Cookie‘: ‘MSCookieKey=c2c74a02aa8c4d493a717aab3c849a40.; UM_distinctid=17922cf98f0a12-0edd0fab18db9-6e52772c-144000-17922cf98f1f8c; CNZZDATA1259001544=240567737-1619786531-https%253A%252F%252Fso.meishi.cc%252F%7C1619786531; Hm_lvt_01dd6a7c493607e115255b7e72de5f40=1620391059,1620431749,1620446522,1620446626; Hm_lpvt_01dd6a7c493607e115255b7e72de5f40=1620446633‘}
# 2.请求,返回页面数据
try:
response = requests.get(url, headers=headers, cookies=cookie)
# 针对于重定向网址
if response.url == url:
html = response.text
return html
except requests.exceptions.ConnectionError:
requests.status_code = "Connection refused"
?
?
‘‘‘
第二步:
获取中华类别的所有菜系链接
category:是每一大类别的超链接,也是首页
‘‘‘
?
?
def get_category():
# 步骤
# 1.运行get_url方法,拿到最初网址https://www.meishij.net/caipufenlei/
html = get_url("https://www.meishij.net/caipufenlei/")
# 2.使用xpath定位元素
list = etree.HTML(html)
category_url = list.xpath(‘/html/body/div[2]/div[1]/div[5]/ul/li/a/@href‘)
# 3.循环
for i in range(len(category_url)):
url = ‘https://www.meishij.net‘ + str(category_url[i]) + ‘?order=-fav_num‘
# 4.将列表中不完整的链接加入
category_url[i] = url
i += 1
# 5.输出查看(已经注释)
# print(url)
# print(category_url)
# 6.返回菜谱分类列表
return category_url
?
?
‘‘‘
第三步:详情页
‘‘‘
?
# 用于存放其中一系列所有的详情页地址
all_url = []
?
?
def detail_page(html):
list = etree.HTML(html)
# 详情页的地址
detail = list.xpath(‘//div[@class="list_s2_item"]/div/a[1]/@href‘)
for i in range(len(detail)):
all_url.append(detail[i])
i += 1
?
?
‘‘‘
第四步:翻页
获取最后的详情页
‘‘‘
?
?
def next_page(url):
next_url = [url]
# 解析这个网页
# html=get_url(url)