8.词云制作
在项目文件中有一个 read.txt 文件,里面也有说明项目的模块划分。
spider.py 为爬虫文件,爬取我们需要的数据,逻辑为:创建 csv,创建 url 后遍历访问,提取数据,写入 csv。
在获得的 csv 有一个问题,打开看会是乱码,设置为 utf8,gbk 都不能正常在 wps 显示,但用 txt 打开是正常显示,经过测试,在 ui 界面显示也正常,这是因为在食材中有一些表情字符,获得后的 csv 不需要任何处理:
接下来制作 ui 界面,使用了 page 工具来生成界面代码,关于这个工具安装配置参考:
小编这里是设计好的,就再简单介绍一下:
从左侧 “Widget Toolbar” 控件栏,选择相应控件到中间窗口即可,对于按钮控件,我们需要添加触发命令,点击 “生成菜单” 就会运行相应逻辑。
选中 “菜单生成” 控件,再选中 “Attribute Editor” 栏的 “Attribute” ,在 “command” 写入触发函数名,“text” “tooltip” 分别为文本显示,提示标签:
设计好后,先保存,小编的保存文件名为 ui,它是保存为 ui.tcl 文件,现在把界面代码也保存:
分别点击 “Save” 保存这两个文件,会保存在与 ui.tcl 的同一目录。
“python GUI” 是界面逻辑,保存后的文件名为 ui.py,不需要动。
“Support Module” 是触发事件代码,我们相应的逻辑就是在这里面添加:
打开 ui_support.py
,找到设置的 “command”,即为函数名:
clean 函数为点击【清除】按钮后,把文本框清除:
creat_menu 函数为点击【生成菜谱】按钮后的逻辑,从 csv 中随机抽取三菜一汤显示在文本框,显示词云在标签栏。
其主要为:读取 csv,DataFrame 转化为 list,合并【三菜一汤】,制作菜单的文本,保存食材词,菜单文本框插入,词云生成,插入词云:
这样所有逻辑都完成了,运行 ui_support.py
即可开始菜谱生成啦~
spider.py
import requests
import csv
from lxml import etree
from fake_useragent import UserAgent
def create_csv():
‘’’
创建 foods.csv, soups.csv
‘’’
head = [‘name’,‘food’,‘score’,‘link’]
csvs = [‘foods.csv’,‘soups.csv’]
for c in csvs:
with open(c,‘w’,encoding=‘gbk’,newline=‘’) as f:
writer = csv.writer(f)
writer.writerow(head)
def get_html(url,kind):
‘’’
请求 html
‘’’
headers = {
‘User-Agent’ : UserAgent().random,
‘Cookie’ : ‘bid=SUKKdKjF; sensorsdata2015jssdkcross=%7B%22distinct_id%22%3A%22171a785835191-0292964d820ab7-4313f6a-921600-171a78583520%22%2C%22%24device_id%22%3A%22171a785835191-0292964d820ab7-4313f6a-921600-171a78583520%22%2C%22props%22%3A%7B%22%24latest_referrer%22%3A%22%22%2C%22%24latest_referrer_host%22%3A%22%22%2C%22%24latest_traffic_source_type%22%3A%22%E7%9B%B4%E6%8E%A5%E6%B5%81%E9%87%8F%22%2C%22%24latest_search_keyword%22%3A%22%E6%9C%AA%E5%8F%96%E5%88%B0%E5%80%BC_%E7%9B%B4%E6%8E%A5%E6%89%93%E5%BC%80%22%7D%7D; __utmz=177678124.1587653477.1.1.utmcsr=(direct)|utmccn=(direct)|utmcmd=(none); __gads=ID=e0150cd671284025:T=1587653477:S=ALNI_Mbm6h5yX4RCMFDKDV9SBCRwZXLwFg; Hm_lvt_ecd4feb5c351cc02583045a5813b5142=1587653477,1587700573; __utma=177678124.702716191.1587653477.1587653477.1587700573.2; __utmc=177678124; __utmb=177678124.44.10.1587700573; Hm_lpvt_ecd4feb5c351cc02583045a5813b5142=1587703641’,
‘Host’ : ‘www.xiachufang.com’,
‘Referer’ : kind.split(‘?’)[0]
}
response = requests.get(url,headers=headers)
if response.status_code == 200:
return response
else:
return
def get_infos(response):
‘’’
提取数据
‘’’
infos = []
html = etree.HTML(response.text)
menus = html.xpath(‘//ul[@class=“list”]/li’)[:20]
for menu in menus:
name = menu.xpath(‘./div/div/p[1]/a/text()’)[0].replace(‘\n’,‘’).replace(’ ‘,’')
food = menu.xpath(‘./div/div/p[@class=“ing ellipsis”]’)[0]
food = food.xpath(‘string(.)’).replace(‘\n’,‘’).replace(’ ‘,’')
score = menu.xpath(‘./div/div/p[3]/span[1]/text()’)[0]
link = menu.xpath(‘./div/div/p[1]/a/@href’)[0]
link = ‘http://www.xiachufang.com’ + link
infos.append([name,food,score,link])
return infos
def write_to_csv(infos,file):
‘’’
写入 csv
‘’’
with open(file,‘a+’,encoding=‘utf8’,newline=‘’) as f:
writer = csv.writer(f)
for info in infos:
writer.writerow(info)
if name == ‘main’:
count = 1
create_csv()
kind_urls = [‘http://www.xiachufang.com/category/40076/’,
‘http://www.xiachufang.com/category/40077/’,
‘http://www.xiachufang.com/category/40078/’,
‘http://www.xiachufang.com/category/20130/’]
for kind in kind_urls:
kind += ‘?page={}’
urls = [kind.format(str(i)) for i in range(1,12)]
for url in urls:
response = get_html(url,kind)
if response == None:
continue
infos = get_infos(response)
判断是否为【汤羹】url,写入对应的 csv
if ‘20130’ not in url:
file = ‘foods.csv’
else:
file = ‘soups.csv’
write_to_csv(infos,file)
print(‘已爬取 %d 页菜谱’ % count)
count += 1
ui_support.py
#! /usr/bin/env python
-- coding: utf-8 --
Support module generated by PAGE version 5.1
in conjunction with Tcl version 8.6
Apr 24, 2020 07:03:52 PM CST platform: Windows NT
import sys
try:
import Tkinter as tk
except ImportError:
import tkinter as tk
try:
import ttk
py3 = False
except ImportError:
import tkinter.ttk as ttk
py3 = True
def init(top, gui, *args, **kwargs):
global w, top_level, root
w = gui
top_level = top
root = top
def clean():
‘’’
此处为点击【清除】按钮后的逻辑
点击清除文本框以及词云
‘’’
w.Text1.delete(‘1.0’, ‘end’)
sys.stdout.flush()
def creat_menu():
‘’’
此处为点击【生成菜谱】按钮后的逻辑
从 csv 中随机抽取三菜一汤
显示在文本框
显示词云在标签栏
‘’’
import pandas as pd
import numpy as np
import wordcloud
menu_df = pd.read_csv(‘foods.csv’, encoding=‘utf8’)
soup_df = pd.read_csv(‘soups.csv’, encoding=‘utf8’)
DataFrame 转化为 list
menus = menu_df.sample(3)
menus = np.array(menus)
menus = menus.tolist()
soup = soup_df.sample()
soup = np.array(soup)
soup = soup.tolist()
合并【三菜一汤】
menus.extend(soup)
制作菜单的文本,保存食材词
text = ‘’
word = ‘、’
for i in range(len(menus)):
txt = ‘’‘菜名:{}\n食材:{}\n评分:{}\n制作方法:{}\n\n’‘’
学好 Python 不论是就业还是做副业赚钱都不错,但要学会 Python 还是要有一个学习规划。最后大家分享一份全套的 Python 学习资料,给那些想学习 Python 的小伙伴们一点帮助!
一、Python所有方向的学习路线
Python所有方向路线就是把Python常用的技术点做整理,形成各个领域的知识点汇总,它的用处就在于,你可以按照上面的知识点去找对应的学习资源,保证自己学得较为全面。
二、学习软件
工欲善其事必先利其器。学习Python常用的开发软件都在这里了,给大家节省了很多时间。
三、全套PDF电子书
书籍的好处就在于权威和体系健全,刚开始学习的时候你可以只看视频或者听某个人讲课,但等你学完之后,你觉得你掌握了,这时候建议还是得去看一下书籍,看权威技术书籍也是每个程序员必经之路。
四、入门学习视频
我们在看视频学习的时候,不能光动眼动脑不动手,比较科学的学习方法是在理解之后运用它们,这时候练手项目就很适合了。
五、实战案例
光学理论是没用的,要学会跟着一起敲,要动手实操,才能将自己的所学运用到实际当中去,这时候可以搞点实战案例来学习。
六、面试资料
我们学习Python必然是为了找到高薪的工作,下面这些面试题是来自阿里、腾讯、字节等一线互联网大厂最新的面试资料,并且有阿里大佬给出了权威的解答,刷完这一套面试资料相信大家都能找到满意的工作。