利用python爬虫抓取虎扑PUBG论坛帖子并制作词云图
作为一个PUBG迷,刷论坛是每天必不可少的事,上面有很多技术贴和职业比赛的帖子,突发奇想,想知道论坛里谈论最多的是什么,便做了一个爬虫爬取了论坛上最新的帖子标题和部分回复,然后利用jieba与wordcloud进行分词然后做了一个词云图。
爬虫的构建与数据的爬取
首先导入制作爬虫需要的包:
from bs4 import BeautifulSoup
import requests
import pandas as pd
import chardet
import numpy as np
生成爬虫的函数:
'''
creat beautifulsoup
'''
def creat_bs(url):result = requests.get(url)e=chardet.detect(result.content)['encoding']#set the code of request object to the webpage's coderesult.encoding=ec = result.contentsoup=BeautifulSoup(c,'lxml')return soup
这里利用了chardet.detect
自动检测所获取网页内容的编码并转化,防止request识别错误。
接着构建所要获取网页的集合函数:
'''
build urls group
'''
def build_urls(prefix,suffix):urls=[]for item in suffix:url=prefix+itemurls.append(url)return urls
接下来便可以开始获取论坛帖子标题与帖子链接,首先观察一下PUBG论坛首页的html代码:
可以看到我们要爬取的帖子标题所在的<b></b>
标签,但是html的常识告诉我,这个标签表示加粗,从左边的网页显示也可以看出字体被加粗了。我们再往下看:
没有加粗的标题并没有<b></b>
标签。看清了网页的代码,便可以开始编写爬虫了:
'''
acquire all the page titles and links and save it
'''
def find_title_link(soup):titles=[]links=[]try:contanier=soup.find('div',{'class':'container_padd'})ajaxtable=contanier.find('form',{'id':'ajaxtable'})page_list=ajaxtable.find_all('li')for page in page_list:titlelink=page.find('a',{'class':'truetit'})if titlelink.text==None: title=titlelink.find('b').textelse:title=titlelink.textif np.random.uniform(0,1)>0.90:link=titlelink.get('href')titles.append(title)links.append(link)except:print 'have none value'return titles,links
首先寻找未加粗标题,如果没有标题,则寻找加粗标题。另外由于帖子数量太多,便按10%的概率储存帖子地址。为了避免未搜寻到标签等异常产生,使用了try-except
忽略所有异常。
接着,编写爬取回复的函数,同样,先看看网页代码构架:
可以看到,主楼是由<div></div>
并且class='floor'
的标签所包含,但其id='tpc'
,而普通回复是由同样的标签包含,但其id
为回复用户的编码。由于爬取主楼出现一些奇怪的错误,最后决定就不爬取主楼只爬取回复:
'''
acquire reply in every topic of 10 page
'''
def find_reply(soup):replys=[]try:details=soup.find('div',{'class':'hp-wrap details'})form=details.find('form')floors=form.find_all('div',{'class':'floor'})for floor in floors:table=floor.find('table',{'class':'case'})if floor.id!='tpc':if table.find('p')!=None:reply=table.find('p').textelse:reply=table.find('td').textreplys.append(reply)elif floor.id=='tpc':continueexcept:return Nonereturn replys
构建完函数后,便可以开始爬取数据了,首先创建爬取页面的url集合,这次我选择了前30页贴子进行爬取:
'''
acquire information from hupu pubg bbs
'''
url='https://bbs.hupu.com/pubg'
page_suffix=['','-2','-3','-4','-5','-6','-7','-8','-9','-10','-11','-12',
'-13','-14','-15','-16','-17','-18','-19','-20','-21','-22','-23','-24',
'-25','-26','-27','-28','-29','-30']
urls=build_urls(url,page_suffix)
爬取标题与链接:
title_group=[]
link_group=[]
for url in urls:soup=creat_bs(url)titles,links=find_title_link(soup)for title in titles:title_group.append(title)for link in links:link_group.append(link)
接着爬取所选帖子的第一页回复:
reply_urls=build_urls('https://bbs.hupu.com',link_group)
reply_group=[]
for url in reply_urls:soup=creat_bs(url) replys=find_reply(soup)if replys!=None:for reply in replys:reply_group.append(reply)
爬取完毕后,综合所有数据并保存:
'''
creat wordlist and save as txt
'''
wordlist=str()
for title in title_group:wordlist+=titlefor reply in reply_group:wordlist+=replydef savetxt(wordlist):f=open('wordlist.txt','wb')f.write(wordlist.encode('utf8'))f.close()
savetxt(wordlist)
由于使用beautifulsoup解析网页内容时会自动将数据转码成unicode
形式,所以如果是中文网页在输出时要转码成utf-8
,不然就是乱码了。
好了,网页爬取部分已经完成,接下来就可以开始词云图的制作了。
词云图的制作
首先我们使用第三方库jieba进行中文的分词。导入jieba包:
'''
using jieba to splice words in title group
'''
import jieba
为了使其分词更加准确,我们可以导入自己设置的分词词典,尤其是在论坛的回复中,经常会有一些别称或者俗语等,利用普通的分词规则很难准确区分,这时自制的分词词典就很有用了:
jieba.load_userdict('user_dict.txt')
可以看看我设置的词典,由于时间关系,只是写了一些印象深刻的词:
后面的数字代表词频,虽然我也不知道具体是什么意思,就随便设置了数字。
接着进行分词:
wordlist_af_jieba=jieba.cut_for_search(wordlist)
wl_space_split=' '.join(wordlist_af_jieba)
分词完后,便可以开始制作词云图了,导入所需包:
from wordcloud import WordCloud,STOPWORDS
import matplotlib.pyplot as plt
首先设置停止词,去掉一些连词或者语气词等,这里我们可以上网下载中文常用停止词词典:
stopwords=set(STOPWORDS)
fstop=open('stopwords.txt','r')
for eachWord in fstop:stopwords.add(eachWord.decode('utf-8'))
最后,制作词云图:
wc=WordCloud(font_path=r'C:\Windows\Fonts\STHUPO.ttf', background_color='black',max_words=200,width=700,height=1000,stopwords=stopwords,max_font_size=100,random_state=30)
wc.generate(wl_space_split)
wc.to_file('hupu_pubg2.png')
plt.imshow(wc,interpolation='bilinear')
plt.axis('off')
由于是中文,我们需要使用font_path
设置中文可用的字体。max_words
设置显示的最大词数,max_font_size
设置词最大的大小,random_state
设置颜色的随机程度。
输出图像:
还不错,从图像中可以看到游戏名当之无愧成了高频词汇,还有包括4AM战队,PCPI比赛,加速器,决赛圈等热词。但是很遗憾不知道是因为中文分词的原因还是词云图制作的原因,所有和数字有关的词全都被剔除了,所以少了很多和17有关的热词。具体原因还有待挖掘。
利用python爬虫抓取虎扑PUBG论坛帖子并制作词云图相关推荐
- python爬虫爬取虎扑湖人论坛专区帖子数据,并存入MongoDB数据库中
今天就带大家从头到尾一步一步带着大家爬取虎扑论坛帖子的数据,里面涉及到的一些知识,我会给出学习的连接,大家可以自行去学习查看. 前期准备 首先我们打开虎扑NBA论坛,我选择的是湖人专区(小湖迷一个). ...
- [python 爬虫]Python爬虫抓取虎扑论坛帖子图片
自从可以实现抓取文字了,自然要尝试更多的类型,比如图片.我是一个有逛虎扑论坛习惯的人,经常会发现有些帖子的图片挺好看的想保存下来,但是如果人为保存的话,一个帖子至少都有二三十张,这将是一个庞大的工作量 ...
- 利用Python爬虫抓取小说网站全部文章
我们先来选定爬取目标,我爬取的网站是https://www.17k.com/ ,一些大型的网站(如起点.豆瓣等)做了反爬虫的部署,这会大大增加我们抓取的难度,所以尽量还是选一些不那么热门的网站. 爬虫 ...
- 利用Python爬虫抓取猫眼电影排行(BeautifulSoup方式初试手,欢迎改进)
from bs4 import BeautifulSoup import requests import json import time from requests.exceptions impor ...
- Python学习教程:Python爬虫抓取技术的门道
Python学习教程:Python爬虫抓取技术的门道 web是一个开放的平台,这也奠定了web从90年代初诞生直至今日将近30年来蓬勃的发展.然而,正所谓成也萧何败也萧何,开放的特性.搜索引擎以及简单 ...
- Python爬虫抓取东方财富网股票数据并实现MySQL数据库存储(转)
Python爬虫可以说是好玩又好用了.现想利用Python爬取网页股票数据保存到本地csv数据文件中,同时想把股票数据保存到MySQL数据库中.需求有了,剩下的就是实现了. 在开始之前,保证已经安装好 ...
- Python爬虫抓取东方财富网股票数据并实现MySQL数据库存储
前言 本文的文字及图片来源于网络,仅供学习.交流使用,不具有任何商业用途,如有问题请及时联系我们以作处理. PS:如有需要Python学习资料的小伙伴可以加点击下方链接自行获取 python免费学习资 ...
- python中plguba_Python量化交易进阶讲堂-爬虫抓取东方财富网股吧帖子
欢迎大家订阅<Python实战-构建基于股票的量化交易系统>小册子,小册子会陆续推出与小册内容相关的专栏文章,对涉及到的知识点进行更全面的扩展介绍.本篇专栏为小册子内容的加推篇!!! 前言 ...
- python爬虫抓取网站技巧总结
不知道为啥要说是黑幕了??哈哈哈-..以后再理解吧 python爬虫抓取网站的一些总结技巧 学用python也有3个多月了,用得最多的还是各类爬虫脚本:写过抓代理本机验证的脚本,写过在discuz论坛 ...
最新文章
- 上拉电阻下拉电阻高阻态
- 常用的130个vim命令
- zookeeper3.4.6安装
- window server 安装与卸载
- 大数据时代的3V3高
- 关于苹果, 有多少事可以重提
- 使用java理解程序逻辑(16)
- Keras——用Keras搭建自编码神经网络(AutoEncoder)
- 高精度算法 万字详解(C++)
- [Publish AAR To Maven] 使用 Gradle 发布 AAR 到 Maven 仓库
- gitee错误: remote gite already exists.
- LM2596/LM2596S多路降压稳压DC-DC开关电源芯片详解(第二部分:电路设计)(12V转5V、12V转3.3V、任意电压转任意电压)
- workerman执行busy,http请求不返回导致阻塞
- AP 计算机 一次完美的逆袭
- python 期货策略_Python版商品期货跨期布林对冲策略 (教学)
- windows快速回到桌面快捷键
- Aspose.Slides for .NET V23 Crack
- u盘出现该项目不在计算机中怎么办,怎么解决U盘使用过程中出现的各种问题
- Redis基本命令大全
- R语言有RStan的多维验证性因子分析(CFA)