众所周知,怪物猎人世界这一款游戏,是一款模拟仿真按摩游戏。
在一个拥有各种强大生物的新大陆上,由于自然资源紧张,各种怪物之间的矛盾频发,此时玩家所扮演的按摩师,需要通过自己精湛的按摩技巧和装备工具,以及强大的aibo的帮助下,使用修脚,撮背,加特林特技按摩等技术,使怪物达到爽翻的状态,成功之后,怪物会休息,并发自内心的感谢玩家并赠送龙玉等物品。
最终达到人、怪物、动物的和谐发展,这是一款非常具有正能量的游戏。
其中某些怪物由于太舒服了还会高兴的表演甩尾,“龙车”,“如来神掌”等绝技,以表达对按摩师的感谢。
龙车
如来神掌
额…应该是这张
真正的如来神掌
那么,问题来了,目标是神奇怪物大师的技师们,是怎么选择自己的武器呢?,这篇文章,笔者带你揭晓,到底哪把武器才是技师们的最爱。
与我上篇的blog一致
本次爬取的方法比较简单,不需要安装seletium,只需要有BeautifulSoup和requests package就行。
BeautifulSoup 安装方法参考blog:
BeautifulSoup 安装方法
首先,我们要明确我们爬取的对象,那就是著名水贴聚集地----贴吧
我们的目标,就是找到贴吧帖子的主题,并统计其中出现武器的频率,作为我们统计热度的参考。
这篇中,贴子主题、链接、发帖人、发帖时间、发帖数量等数据的爬取参考知乎作者Echo的文章
https://zhuanlan.zhihu.com/p/26722495
详细爬取思路可进入原作者文章查看,本文就简单的介绍一下。
首先,1 爬取需要所需要数量帖子的url
base_url = 'https://tieba.baidu.com/f?kw=%E6%80%AA%E7%89%A9%E7%8C%8E%E4%BA%BA%E4%B8%96%E7%95%8C&ie=utf-8'
deep = 3
url_list = []
for i in range(0,deep):
url_list.append(base_url + '&pn=' + str(i*50))
2 再使用此函数获取url内的html,用于BS4解析
def get_html(url):
try:
r = requests.get(url, timeout = 30)
r.raise_for_status()
r.encoding = "utf-8"
return r.text
except:
return "error"
3 使用BS4解析url,找到标题,链接,发帖人,时间以及回复数量
def get_content(url):
comments = []
html = get_html(url)
soup = BeautifulSoup(html, 'lxml')
# 找到每一个主题贴
liTags = soup.find_all('li', attrs={'class': ' j_thread_list clearfix'})
# print (liTags)
for li in liTags:
# 初始化一个字典用存储
comment = {}
try:
comment['title'] = li.find(
'a', attrs={'class':'j_th_tit'}).text.strip()
comment['link'] = "http://tie.baidu.com/" + \
li.find('a', attrs = {'class':'j_th_tit'})['href']
comment['name'] = li.find(
'span', attrs = {'class': 'tb_icon_author'}).text.strip()
comment['time'] = li.find(
'span', attrs = {'class':'pull-right is_show_create_time'}).text.strip()
comment['replyNum'] = li.find(
'span', attrs={'class': 'threadlist_rep_num center_text'}).text.strip()
comments.append(comment)
except:
print ('Some problem happened!')
return comments
4 将爬取结果存入文件
def out2file(dict):
with open('TB.txt','a+',encoding='utf-8') as f:
for comment in dict:
f.write('标题: {} \t 链接:{} \t 发帖人:{} \t 发帖时间:{} \t 回复数量: {} \n'.format(
comment['title'], comment['link'], comment['name'], comment['time'], comment['replyNum']))
至此,我们已经爬取了指定页数的“标题,链接,发帖人,时间以及回复数量”信息,而接下来的目标,就是解析主题贴主题中的关键字,再进行统计。
5 初始化要使用的全局变量,其中weapons里,记录了所有武器的官方称呼和俗称(可能不全)
def data_init():
global weapons
global weapon_count
# all weapon
weapons = ['单手剑|片手剑', '双手剑|双刀|双剑', '大剑|重剑', \
'太刀', '锤|锤子', '狩猎笛|笛子', '长枪', '铳枪', \
'斩击斧|剑斧', '充能斧|盾斧', '操虫棍|棍|棍子', \
'弓', '轻弩', '重弩']
# init weapon count
for weapon in weapons:
weapon_count.update({weapon: 0})
print(weapon_count)
6 使用re解析帖子主题,统计关键字并打印
def keyword_count(dict,page):
global weapons
global weapon_count
for weapon in weapons:
count = 0;
for comment in dict:
count = count + len(re.findall(weapon, comment['title']))
weapon_count.update({weapon : (weapon_count[weapon]+count)})
print("第%d页结果汇总:" % (page+1))
print(weapon_count)
至此,我们的目的已经达到了,笔者测试了一下,结果如图
可以发现,太刀和弓武器是猎人技师们最爱的工具了,而锤、重弩、铳枪、单手剑的提及率很低,甚至斩击斧是0,这可能是笔者关键词设置的不够多,或者是玩这个武器的都是hard core player吧。
PS:锤子用的人这么少吗?斜坡神教已经没落了吗?
本次练手的小项目就到这里了,感谢echo作者提供的灵感,欢迎大家进行测试和指出文中的错误~
最后祝愿各位技师,猫车一路顺风。
下一个练手小项目应该不会是爬虫,向下一个阶段(数据分析,语言处理或者特征目标检测)进发.
源码github链接:https://github.com/gangyu0716/spider_project
作者blog地址:https://blog.csdn.net/nurke