龙空技术网

如何利用python实现用户评论挖掘并分析

IT世界圈 187

前言:

现在各位老铁们对“python自动评论”大体比较着重,兄弟们都需要学习一些“python自动评论”的相关内容。那么小编在网摘上网罗了一些对于“python自动评论””的相关知识,希望大家能喜欢,各位老铁们快快来学习一下吧!

1、利用函数nextpage获取所需的id

顾名思义,这是一个“翻下一页”的函数。可以通过读取url中的id进行自动翻页,利用该函数对股票代码进行获取。

以沪深股市为例,在当前页面按F12(Fn+F12),在Elements界面查看,找到下一页的id,即可通过正则表达式获得股票代码数据。

注意:使用该函数时,需要download selenium module并在环境变量中配置 Chrome 驱动

url =

import refrom selenium import webdriverfrom selenium.webdriver.support.wait import WebDriverWaitfrom selenium.webdriver.support import expected_conditions as ECfrom selenium.webdriver.common.by import Bydef nextpage(url, pages_num, rule): page = 0 codes = '' codes = [] driver = webdriver.Chrome() driver.get(url) while page < pages_num: WebDriverWait(driver, 15, 0.5).until(EC.presence_of_element_located((By.ID, "table_wrapper"))) code = re.findall(rule, driver.page_source, flags=re.S) codes = code[:] + codes driver.find_element_by_id('main-table_next').click() # selenium的find id用法,找到包含“下一页”的id去点击 page = page + 1 time.sleep(random.uniform(0.3,1)) # sleep一个随机浮点数 driver.quit() return codes

这里的input有三个变量:

url=包含id的网页;pages_num=需要翻页的数量;rule=正则表达式的规则

通畅在翻页时可利用time.sleep函数进行暂停,然后利用set函数对得到的股票代码去重,避免重复爬取。那么在实现股票代码获取的时候可以用如下代码:

# crawl the relevant pages of stocksurl = ''pages_num = 277items = nextpage(url, pages_num, '/us/(.*?).html') # 从页面中获取股票代码items = list(set(items)) # 去重,避免重复爬取print('There are %s items relevant to the us.' % len(items))

这样,通过nextpage和正则处理后,所有原url列表中的股票代码都获取了下来,从而可以为下一步用户评论的获取做准备。

小编准备了一份Python学习资料,给那些正在学习Python的同学,或者准备学习Python的同学,关注,转发,私信小编“01”即可免费获取!

2、通过函数crawl,实现股票评论HTML文件获取

这里要用到的module为urllib,ssl

下面的例子展示了crawl函数爬取所需的HTML。用这种方法批处理时,需要进行try/except判断,然后再把fail的url print出来,把不成功的原因找出来。

注意:访问不要过于频繁,使用sleep()适当暂停!批量获取前先单个测试,并在爬取过程中及时记录成功与否状态。

import sslfrom urllib import requestdef crawl(url): # try: page = request.urlopen(url,context=context,timeout=5) html = page.read().decode('utf-8') return htmlfor item in items: item_url = '' + item + '.html' print(item_url) try: item_html = crawl(item_url) file_name = './us_pages/' + item + '.html' with open(file_name,'w',encoding='utf-8') as f: f.write(item_html) print(item, 'success') except: print(item, 'failed', item_url) continue time.sleep(random.uniform(0.3,1)) # sleep一个随机浮点数

3、利用函数cleantext得到并清洗评论

用第三个自己编写的cleantext函数进行评论文本获取和清洗,可以为下一步的分词和分析做准备。cleantext函数用的正则表达式的方法与nextpage中的方法类似,就是从HTML文件中利用正则规则提取评论文本,然后对contents进行re.sub()处理,从而实现清洗评论文本的效果:

def cleantext(html): result = '' contents = re.findall('.html" title="(.*?)">',html) for content in contents: content = re.sub('<|>', '', content, flags=re.S) result += content + '\n' return result #clean for titles of commentsfiles = glob.glob('./us_pages/*.html') # 获取爬取的html文件,返回listall_stocks = open('all_us_stocks.txt','w', encoding='utf-8') # 将所有comments页面清洗结果存于该文件,以备后续分析for file in files: print('process', file) with open(file,'r',encoding='utf-8') as f: content = f.read() stock = cleantext(content) all_stocks.write(stock)all_stocks.close()

以沪深股票为例,部分评论文本效果如下:

4、利用分词和关键词提取制作词云图

首先使用jieba module分词,主要函数:jieba.cut(),然后使用jieba.analyse.extract_tags()提取关键词及hidf权重,接着使用WordCloud库制作词云图,其中 generate_from_frequencies()函数可以自定义词语权重,即使用jieba计算的h-idf信息,词云图背景可自定义

import jieba.posseg as psegimport jieba.analyse as alefrom wordcloud import WordCloud,ImageColorGeneratorfrom scipy.misc import imreadfilename = './all_xsb_stocks.txt'font_path = './siyuan.ttf' # 指定汉字字体位置,否则中文无法显示pic_path = './cup.jpg'# step 1. 抽取关键词with open(filename,'r',encoding='utf-8') as f: content = f.read()keywords = ale.extract_tags(content, topK=100, withWeight=True, allowPOS=()) #keywords = ale.textrank(content, topK=100, withWeight=True)d = {}for kw in keywords: #print(kw) d[kw[0]] = kw[1]# step 2. 绘制词云pic = imread(pic_path) #读取图片pic_color = ImageColorGenerator(pic)wc = WordCloud(scale = 4, font_path=font_path, mask=pic, color_func=pic_color, background_color='white')wc.fit_words(d)wc.to_file('./uk_tags.png')

仍然以沪深股市为例,出图效果如下:

下面这个是港股的,可以看出基本为繁体字:

新三板,关注“科技”,“智能”,“生物”:

美股基本上就是英文的公告和评论了:

英股的评论基本上是中文,也不知道为何这么多人觉得英股“垃圾”

但是这个关键词提取方法也存在一定的缺陷,比如频率较高但是不那么重要的词往往占了前几名。

标签: #python自动评论