查看原文
其他

可盐可甜,“粽”有所爱,快来pick你最爱的粽子吧!

爬虫俱乐部 Stata and Python数据分析 2022-03-15

本文作者寇晓璇,中南财经政法大学统计与数学学院

本文编辑:刘子艳

技术总编:戴   雯

Stata&Python云端课程来啦!

好雨知时节,当春乃发生。为了感谢大家长久以来的支持和信任,爬虫俱乐部为大家送福利啦!!!Stata&Python特惠课程双双上线腾讯课堂~原价2400元的Python编程培训课程,现在仅需100元,详情请查看推文《Python云端课程福利大放送!0基础也能学~》。关于Stata,爬虫俱乐部推出了系列课程,内容包括字符串函数、正则表达式、爬虫专题和文本分析,可以随心搭配,价格美丽,物超所值,更多信息可查看Stata系列推文《与春天有个约会,爬虫俱乐部重磅推出正则表达式网络课程!》《与春天有个约会,爬虫俱乐部重磅推出基本字符串函数网络课程》等。变的是价格,不变的是课程质量和答疑服务。对报名有任何疑问欢迎在公众号后台和腾讯课堂留言哦!




方块三角圆


又是一年一度的端午节,小编在这里祝所有粉丝端午节快乐!说到端午节,粽子可是必不可少的美食。小小粽子,将思念细致包裹,让味道与记忆重逢,棱角里,总有历史的传承,软糯间,藏着森林的清香。今天小编就带大家爬取美食天下网站中与粽子相关的菜谱,了解一下粽子的制作原料,看看什么馅的粽子最受欢迎吧~

01



抓取菜谱——粽子篇


首先,进入美食天下官网(https://www.meishichina.com),在右上角搜索框搜索“粽子”。进入粽子页面后,上方点击 菜谱,即可查看到有关粽子的全部菜谱,这些菜谱就是接下来要分析的目标。我们可以观察到菜谱的每页网址都具有以下规律,因此可以建立循环,进行多网页菜谱抓取。
https://home.meishichina.com/search/recipe/%E7%B2%BD%E5%AD%90/https://home.meishichina.com/search/recipe/%E7%B2%BD%E5%AD%90/page/2/https://home.meishichina.com/search/recipe/%E7%B2%BD%E5%AD%90/page/3/https://home.meishichina.com/search/recipe/%E7%B2%BD%E5%AD%90/page/4/……首先,创建文件夹、更改工作路径。
clear allcap mkdir "D:\Stata\美食天下\爬虫"cd "D:\Stata\美食天下\爬虫"然后,使用forvalues循环抓取多个网页源代码,利用正则表达式对网页源代码进行处理。我们发现使用 copy命令不能成功获取到网页源代码,所以这里使用的是命令行工具 curl
*提取多个网页标题链接、标题、原料forvalues p = 1/50 { !"C:\eSupport\Stata16\64位\curl.exe" "https://home.meishichina.com/search/recipe/%E7%B2%BD%E5%AD%90/page/`p'/" -o temp.txt clear all infix strL v 1-10000 using temp.txt, clear keep if strpos(v, `"<h4><a href=""') | strpos(v, `"<p class="subcontent">"') if _N == 0 { continue, break } replace v = ustrregexra(v, `"<h4><a href=""', "", .) split v, p(`"" target="_blank">"') drop v gen v3 = v1[_n+1] if mod(_n, 2) == 1 keep if mod(_n, 2) == 1 replace v2 = ustrregexra(v2, "<.*?>", "", .) replace v3 = ustrregexra(v3, "<.*?>", "", .) rename _all (url title raw) compress
save `p', replace}最后,将抓取到的多个页面数据汇总到一个文件中。
clear allfs *.dtaforeach f in `r(files)'{ append using `f'} save 菜谱.dta, replace所有代码运行完成后,所有菜谱的链接标题原料都被抓取下来了(下图仅展示部分抓取结果)。

02



寻找最受欢迎的粽子


每逢粽子节,都是“甜粽派”和“咸粽派”相争之时。甜粽派表示,包裹着花生、蜜枣等各种甜馅料儿,再裹着粽叶的清香,吃前蘸一点蜂蜜,大大咬一口,简直人间美味;咸粽派则表示,装满莲子、香菇、卤肉……用筷子一戳,粽子里的肉香自然而然地飘散出来,一口咬下去,口感、嚼劲十足。那么是甜粽还是咸粽更受欢迎呢?接下来,根据第一步抓取到的url,我们使用Stata中的 Python接口进行二次爬虫,分别爬取每个菜谱的点赞、收藏、评论数,看看究竟是哪种口味的粽子最受欢迎~
pythonimport csvfrom selenium import webdriverimport timeimport pandas as pd
def get_data(url): brower = webdriver.Chrome() # 创建浏览器对象 brower.get(url) # 打开要访问的页面 time.sleep(5) dzrs = brower.find_elements_by_xpath('//a[@title="点赞"]/span')[0].text scrs = brower.find_elements_by_xpath('//a[@title="收藏"]/span')[0].text plrs = brower.find_elements_by_xpath('//a[@title="评论"]/span')[0].text return dzrs,scrs,plrs brower.quit()
with open('C:/Users/Coco/Desktop/美食天下/comment.csv','a',newline='') as f: writer = csv.writer(f) writer.writerow(['粽子口味','点赞人数','收藏人数','评论人数'])
def write_data(comment): with open('C:/Users/Coco/Desktop/美食天下/comment.csv','a',newline='') as f: writer = csv.writer(f) writer.writerow(comment)
df = pd.read_stata('C:/Users/Coco/Desktop/美食天下/爬虫/菜谱.dta')url_list = list(df['url'])title_list = list(df['title'])
comment_list = []comment_dict = {}
for url_title in zip(url_list,title_list): comment_dict['title'] = url_title[1] comment_dict['dzrs'],comment_dict['scrs'],comment_dict['plrs'] = get_data(url_title[0]) print(comment_dict) comment = list(comment_dict.values()) write_data(comment)end这样一来,所有粽子菜谱的标题、点赞、收藏、评论数这四列信息都被保存到csv文件中了。(下图仅展示部分结果)

    接下来,进一步对获取到的信息进行整理、排序,并用正则表达式提取粽子口味。

*导入抓取到的数据clearcd "C:\Users\Coco\Desktop\美食天下"import delimited comment.csv, encoding(GB18030) format 粽子口味 %-60s
*保存收藏、点赞、评论数最多的粽子gsort -收藏人数keep if 收藏人数>750replace 粽子口味 = ustrregexs(0) if ustrregexm(粽子口味, "[\u4e00-\u9fa5]+$")replace 粽子口味 = ustrregexra(粽子口味, "(.*?)", "", .)drop if 粽子口味 == "包粽子"
order 粽子口味 收藏人数 点赞人数 评论人数format 粽子口味 %-20s
*可视化graph hbar 收藏人数 点赞人数 评论人数, over(粽子口味, sort(1) descending) ///title(粽子口味受欢迎度) ///subtitle(——基于收藏人数、点赞人数、评论人数) ///legend(row(1) ring(1) position(6) label(1 "收藏人数") label(2 "点赞人数") label(3 "评论人数")) ///ylabel(0(300)3600, tposition(inside) labsize(*0.8) angle(0)) ///ytitle("人数", tstyle(smbody)) ///blabel(bar, size(vsmall) format(%4.0f)) graph export "taste.png", replace我们得到最受欢迎的粽子有以下几种,其中位列榜首的是肉粽子,果然还是肉肉最能俘获人心呀!咸粽一骑绝尘,以多变馅料和丰富想象,把单一的甜粽甩在后面。但粽子不论甜咸,团圆就是最好的馅!

03



奇葩口味粽子一览


除常见的甜粽子与咸粽子外,还有很多口味的粽子十分吸引眼球,下面就为大家盘点几种特殊口味的粽子吧~

金蚝粽子皇

金蚝在煮至的过程中,蚝油丝丝渗透到糯米中,它的鲜味和肉香与粘糯的米融和,让所有食材的味道得以提升,香味复合性的释放,让这款粽子的味道鲜美到极致。轻咬一口,粽子的清香、鲜肉的咸香、金蚝的甘香很有层次的在舌尖上弥漫铺展……咖啡粽子

锅包虾球粽子

北方粽子——油饼卷糕
菠萝叶粽子
粽子叶,除竹叶外,在山东的山区还有一种,就是菠萝叶,但不是水果菠萝的叶子,是一种树的叶子,价格比粽叶稍贵。

04



粽子制作原料汇总


糯米、蜜枣、卤肉、蛋黄……粽子的制作原料多种多样,接下来,让我们对抓取到的粽子原料进行处理,通过词云图来展示一下吧!
clear allcd C:\Users\Coco\Desktop\美食天下
*原料拆分use ".\爬虫\菜谱.dta", cleardrop url titlereplace raw = ustrregexra(raw, "原料:|。", "", .)split raw, p("、")drop raw
*分类汇总stack raw1 - raw21, into(raw) cleardrop _stackdrop if raw==""bysort raw: gen frequency = _Ngsort -frequencyduplicates dropsave word, replace
*绘制词云图clearcd C:\Users\Coco\Desktop\美食天下use word.dta, clearkeep in 1/100wordcloud raw frequency using 词云图.html, replace /// size(15 80) range(3480 2160) shellout 词云图.html这样一来,制作粽子的原料就十分清晰可见了,除主料糯米粽叶外,蜜枣红豆五花肉生抽白糖等也是粽子制作过程中必不可少的食材。

    粽子口味虽多,原料虽丰富,但思念只有一种。最后,再次祝大家端午节安康,多吃粽子!

:本文完整代码及相关文件可通过后台发送“ 粽子 ”获取~最后,我们为大家揭秘雪球网(https://xueqiu.com/)最新所展示的沪深证券和港股关注人数增长Top10。欢迎大家点赞、转发、评论哟~

对我们的推文累计打赏超过1000元,我们即可给您开具发票,发票类别为“咨询费”。用心做事,不负您的支持!

往期推文推荐 

  好玩有趣的手绘图形库——cutecharts

  爬虫实战|摩尔庄园微博话题讨论

  一季度财报出炉,哪些公司最烧钱?

  一季度财报出炉,哪些公司最赚钱?

  技能篇 | 图片合并大法

  批量空气质量数据文件合并分析

  Stata17之日期时间新功能

  Stata17之Lasso新功能

        爱奇艺视频弹幕爬取之《小舍得》         数据可视化利器——Matplotlib

  从第七次人口普查看中国人口变化|Stata与Python交互绘图

  200万投资者关注!!哪家公司这么牛?

  
带你领略一天天气之变化

  利用pyecharts看微博粉丝地区分布

  零值太多怎么办?解锁Stata17新命令ziologit

  Stata17新功能之Python API  小罗肥归升级啦|解锁Stata17之新命令xtmlogit  
速度大比拼之Stata17有多快?

初识PyStata

辞旧迎新——Stata17之Do-file编辑器优化

Stata17新亮点——解放表格输出生产力

 【爬虫+可视化】链家网北京租房信息

  手把手教你如何获取股票数据和可视化

  Countvalues——数数的超级小帮手

          frame框架进阶篇

  下拉选择框如何变成“小猫咪” | selenium小技巧

  Python中的运算符知多少?

  快来get缺失值的正确打开方式

关于我们 


微信公众号“Stata and Python数据分析”分享实用的Stata、Python等软件的数据处理知识,欢迎转载、打赏。我们是由李春涛教授领导下的研究生及本科生组成的大数据处理和分析团队。



此外,欢迎大家踊跃投稿,介绍一些关于Stata和Python的数据处理和分析技巧。

投稿邮箱:statatraining@163.com投稿要求:
1)必须原创,禁止抄袭;
2)必须准确,详细,有例子,有截图;
注意事项:
1)所有投稿都会经过本公众号运营团队成员的审核,审核通过才可录用,一经录用,会在该推文里为作者署名,并有赏金分成。
2)邮件请注明投稿,邮件名称为“投稿+推文名称”。
3)应广大读者要求,现开通有偿问答服务,如果大家遇到有关数据处理、分析等问题,可以在公众号中提出,只需支付少量赏金,我们会在后期的推文里给予解答。

您可能也对以下帖子感兴趣

文章有问题?点此查看未经处理的缓存