今天进行微博话题的爬虫练习,并提取关键字进行可视化展示。
了解网页详情
爬微博,如果不进行手动输入,一般只展示几条信息。所以,我们将利用手机客户端的网址连接进行爬取。
进入搜索页面
往下拉页面查看内容
需要登陆。
不过我们可以点击右键,选择inspect(谷歌浏览器)
会出现页面如图
点击toggle device toolbar 则会切换成手机客户端的模式。
接下来我们点击查看network,刷新页面,查看微博手机视图,看是否正常加载信息。
然后点击name中的一条,查看preview。我们想要的留言内容就在data里面。(可以仔细取探索更多内容)
我们需要的网址在headers里面,可以点击复制粘贴下来。
编码
爬取微博内容
import requests
import pandas as pd
def get_weibo_info(url):
headers ={
'User-Agent':'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/55.0.2883.87 Safari/537.36'
}
articles = []
for i in range(1,5):
url = url + str(i) #获取网页信息,也可以.format()的形式
res = requests.get(url,headers=headers)
data = res.json()
articles.extend([rec['mblog'] for rec in data['data']['cards'] if rec.get('mblog')]) #观察得出评论在mblog里,所以只用提取mblog里的
df = pd.DataFrame(articles)
return df
df = get_weibo_info('https://m.weibo.cn/api/container/getIndex?containerid=100103type%3D1%26q%3D%25E5%258F%25B8%25E5%25BE%2592%25E6%25AD%25A3%25E7%25BE%258E&page_type=searchall&page=')
清洗内容
from bs4 import BeautifulSoup
def parseArticle(e):
soup = BeautifulSoup(e,'lxml')
return soup.text #显示tag标签的内容
df['cut'] = df['text'].map(parseArticle).apply(lambda x : list(jieba.cut(x)))
df_cut = df['cut'].tolist()
df_cuts = [j for i in df_cut for j in i if j != ' ']
stopwords = pd.read_csv('停用词.csv',header=0)
stop_list = stopwords['停用词'].tolist() #加载停用词
split_words = list(x for x in df_cuts if x not in stop_list)
可视化文字内容
import matplotlib.pyplot as plt
%matplotlib inline
from wordcloud import WordCloud, ImageColorGenerator
newtxt = ' '.join(split_words)
backgroud_Image = plt.imread('mask.jpg')
w = WordCloud(width=1200,height=1000,mask=backgroud_Image,max_words=100,
font_path='字体管家胖丫儿.ttf',
background_color='white')
wordcloud = w.generate(newtxt)
plt.imshow(wordcloud)
plt.axis('off')
生成图片
R.I.P