chapter 14 数据获取到话题提取: 爬虫(Requests/ bs4/ RegExp)
! pip list | grep -i request
# Rrequests 库是基于 urllib的,但是更好用。
requests 2.25.1 requests-oauthlib 1.3.0 requests-unixsocket 0.2.0
# (1) 从网页复制
# https://www.ip138.com/useragent/
# Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.164 Safari/537.36
# (2) 从网页F12 复制
# 打开百度,F12键-network,再F5刷新,随便选择一个加载内容,点header - Request,看其中内的 User-Agent:
UserAgent="Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.164 Safari/537.36"
# 政策-最新: http://www.gov.cn/zhengce/zuixin.htm
url= "http://www.gov.cn/zhengce/content/2021-11/03/content_5648645.htm"
import requests
headers={
"User-Agent": UserAgent
}
# 发起请求
r=requests.get(url, headers=headers)
#print(r.text)# 主要内容乱码
#打印编码方式
print(r.encoding) #ISO-8859-1
# 而原网页正文写的是 charset="utf-8"
# 重新设置编码方式
r.encoding="urf-8"
print(r.encoding) #urf-8
#print(r.text) #正常打印
# 但是包含html标记,不需要它们。
ISO-8859-1 urf-8
# 要么保存为 html
with open("dustbin/test.html", 'w', encoding='utf8') as f:
f.write(r.text)
# 要么解析其中的文本,保存为csv文件,见下文。
上面的例子其实降低了我们的效率,单个网址我们直接用浏览器看反而更高效。
我们希望看到一个列表(部门,标题,链接),大致判断感兴趣的内容,再点开看细节。怎么获得这样的列表呢?
目标 最新政策 list 的爬取 url="http://www.gov.cn/zhengce/zuixin.htm"
import re
pattern=re.compile("\d+")
rs1=re.match(pattern, "是数字吗0123") # match是从头匹配
print(rs1)
rs2=re.match(pattern, "456text78")
print(rs2)
print(rs2.group()) #使用 .group() 获取匹配的内容
None <re.Match object; span=(0, 3), match='456'> 456
# 如果想匹配中间的,可以用 re.search
rs1=re.search(pattern, "是数字吗0123")
print(rs1)
print(rs1.group())
print(rs1.span()) #使用 .span() 获取匹配的起始位置
<re.Match object; span=(4, 8), match='0123'> 0123 (4, 8)
str1="是数字吗0123"
span=rs1.span()
print(rs1.span()) #(4, 8)
str1[span[0]:span[1]] #'0123'
(4, 8)
'0123'
# 使用数字分割字符串
rs3=re.split(pattern, "这是123一个1漂亮的3鼠标")
print(rs3)
['这是', '一个', '漂亮的', '鼠标']
# 把所有的数字都提取出来
re.findall(pattern, "这是123一个1漂亮的3鼠标")
['123', '1', '3']
python的两个解析html的库: lxml 和 BeautifulSoup。
# $ pip3 install beautifulsoup4 -i https://pypi.douban.com/simple/
# $ pip3 list | grep -i soup
#beautifulsoup4 4.10.0
# $ pip3 list | grep -i xml
#defusedxml 0.7.1
#lxml 4.6.3
# 下载html信息
url= "http://www.gov.cn/zhengce/content/2021-11/03/content_5648645.htm"
import requests
headers={
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.164 Safari/537.36"
}
r=requests.get(url, headers=headers)
# 重新设置编码方式
r.encoding="urf-8"
# 解析html信息
from bs4 import BeautifulSoup
soup = BeautifulSoup(r.text, 'lxml', from_encoding='utf8') #指定使用 lxml 库作为解析库,比自带的标准库快
#print(soup)
/home/wangjl/anaconda3/lib/python3.7/site-packages/bs4/__init__.py:223: UserWarning: You provided Unicode markup but also provided a value for from_encoding. Your from_encoding will be ignored. warnings.warn("You provided Unicode markup but also provided a value for from_encoding. Your from_encoding will be ignored.")
# 获取标题
print(soup.title) #带着 html 标签
print(soup.title.string) #去标签
print(soup.title.get_text()) #或者
<title>国务院关于2020年度国家科学技术奖励的决定(国发〔2021〕22号)_政府信息公开专栏</title> 国务院关于2020年度国家科学技术奖励的决定(国发〔2021〕22号)_政府信息公开专栏 国务院关于2020年度国家科学技术奖励的决定(国发〔2021〕22号)_政府信息公开专栏
# 获取段落
print(soup.p.string)
# 怎么获取全部的段落?
texts=soup.find_all('p')
for text in texts:
if text.string == None: #过滤空白段
continue
print(text.string)
国务院关于2020年度 国务院关于2020年度 国家科学技术奖励的决定 国发〔2021〕22号 各省、自治区、直辖市人民政府,国务院各部委、各直属机构: 为深入贯彻落实习近平新时代中国特色社会主义思想,全面贯彻党的十九大和十九届二中、三中、四中、五中全会精神,坚定实施科教兴国战略、人才强国战略和创新驱动发展战略,国务院决定,对为我国科学技术进步、经济社会发展、国防现代化建设作出突出贡献的科学技术人员和组织给予奖励。 根据《国家科学技术奖励条例》的规定,经国家科学技术奖励评审委员会评审、国家科学技术奖励委员会审定和科技部审核,国务院批准并报请国家主席习近平签署,授予顾诵芬院士、王大中院士国家最高科学技术奖;国务院批准,授予“纳米限域催化”等2项成果国家自然科学奖一等奖,授予“面心立方材料弹塑性力学行为及原子层次机理研究”等44项成果国家自然科学奖二等奖,授予“超高清视频多态基元编解码关键技术”等3项成果国家技术发明奖一等奖,授予“良种牛羊卵子高效利用快繁关键技术”等58项成果国家技术发明奖二等奖,授予“嫦娥四号工程”等2项成果国家科学技术进步奖特等奖,授予“400万吨/年煤间接液化成套技术创新开发及产业化”等18项成果国家科学技术进步奖一等奖,授予“厘米级型谱化移动测量装备关键技术及规模化工程应用”等137项成果国家科学技术进步奖二等奖,授予苏·欧瑞莉教授等8名外国专家和国际热带农业中心中华人民共和国国际科学技术合作奖。 全国科学技术工作者要向顾诵芬院士、王大中院士及全体获奖者学习,不忘初心、牢记使命,秉持国家利益和人民利益至上,继承和发扬老一辈科学家胸怀祖国、服务人民的优秀品质,主动肩负起历史重任,坚持创新在我国现代化建设全局中的核心地位,把科技自立自强作为国家发展的战略支撑,以与时俱进的精神、革故鼎新的勇气、坚忍不拔的定力,面向世界科技前沿、面向经济主战场、面向国家重大需求、面向人民生命健康,加快建设科技强国,为夺取全面建设社会主义现代化国家新胜利、实现中华民族伟大复兴作出新的更大贡献。 国务院 2021年10月19日 (此件公开发布)
# 获取链接
link=soup.find_all('a')[-1] #最后的一个链接
link.get('href')
'http://www.gov.cn/home/2014-02/18/content_5046260.htm'
import requests, csv, re
from bs4 import BeautifulSoup
#下载
url="http://www.gov.cn/zhengce/zuixin.htm"
user_agent="Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.164 Safari/537.36"
policies=requests.get(url, headers={"User-Agent": user_agent})
policies.encoding='utf-8'
#解析
p=BeautifulSoup(policies.text, 'lxml')
# 用正则表达式匹配所有包含 content 的单词的a标签
contents =p.find_all("a", href=re.compile('content'))
# 定义一个空列表
rows=[]
#设计一个for循环,提取每个链接汇总的标题
for content in contents:
href=content.get('href')
row=(content.string[0:4], content.string, href)
rows.append(row)
# 定义表头
header=["发文部门", "标题", "链接"]
# 保存文件;原文 encoding='gb18030'
with open("dustbin/policies.csv", 'w', encoding='utf8') as f:
writer=csv.writer(f)
writer.writerow(header)
writer.writerows( rows)
print("==done==")
==done==
# check
!head -n 3 dustbin/policies.csv
当爬取的内容很多时,看着很花时间。能否快速了解几万字的核心内容呢?
# 百度搜 段子,找到一个全是文本段子的网站。
import requests, csv, re
from bs4 import BeautifulSoup
user_agent="Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.164 Safari/537.36"
# 定义一个空列表
rows=[]
urls=[]
for i in range(1, 10):
url="http://www.duanziku.com/gaoxiaoduanzi/gxdz{}.html".format(i)
webpage=requests.get(url, headers={"User-Agent": user_agent})
webpage.encoding='utf-8'
#解析
p=BeautifulSoup(webpage.text, 'lxml')
# 用正则表达式匹配所有包含 gaoxiaoduanzi 的单词的a标签
contents =p.find_all("a", href=re.compile('gaoxiaoduanzi.*\d+\.html$'))
#设计一个for循环,提取标题和链接
for content in contents:
href=content.get('href')
if(content.string==None):
continue
row=(content.string, href)
if href in urls:
continue;
else:
urls.append(href)
if len(urls)<5:
print(row)
rows.append(row)
len(rows)
('少小离家老大回,安能辨我是雌雄', 'http://www.duanziku.com/gaoxiaoduanzi/1532571462.html') ('据说女人很喜欢这个笑话', 'http://www.duanziku.com/gaoxiaoduanzi/1532050935.html') ('小明,你出去!(四)', 'http://www.duanziku.com/gaoxiaoduanzi/1532047928.html') ('小明,你出去!(三)', 'http://www.duanziku.com/gaoxiaoduanzi/1532007455.html')
65
def getJoke(url):
webpage=requests.get(url, headers={"User-Agent": user_agent})
webpage.encoding='utf-8'
p=BeautifulSoup(webpage.text, 'lxml')
contents =p.find("span", style="font-size:16px;")
if contents==None:
return;
contents=contents.text
# 去掉换行
w=re.sub("\r\n", "", contents)
# 切分文本
contents2 = re.split("\n+", w)
# 保存
db=[]
for joke in contents2:
if joke=="":
continue
joke = re.sub("\d{1,2}[\.\、]", "", joke) #去掉首数字
db.append(joke)
return db
# test
getJoke( rows[0][1])[0:3]
['大学时不喜欢读书,跟上铺的哥们说,我最羡慕那些徒步旅行的驴友,想去那里就去那,真想来一次说走就走的徒步旅行,只可惜自己没钱买装备。上铺那哥们表示,他可以友情赞助我装备。然后,送给我一个碗……', '前两天跟我们组印度同事说认识他之后对印度有所改观,他大惊失色说“千万别,印度人里我是凤毛麟角,所有其他人都是傻哔。”', '当代人的肥胖问题需要得到重视了。据调查,地铁上每三次为孕妇让座的行为中,就有一次对方不是孕妇。']
def getJoke2(url):
webpage=requests.get(url, headers={"User-Agent": user_agent})
webpage.encoding='utf-8'
p=BeautifulSoup(webpage.text, 'lxml')
p=p.find("table")
if p==None:
return;
contents =p.find_all("p")
if contents==None:
print("broken page:", url)
return;
db=[]
for text in contents:
text2=re.sub("\s+","", text.text)
if len(text2)<10 or re.match("[0-9]",text2)==None:
#pass
continue
joke =text2
joke = re.sub("\d{1,2}[\.\、]", "", joke) #去掉首数字
db.append(joke)
return db
getJoke2( rows[6][1])[0:3]
['某人求领导办事儿,拿出五张美女照片任其选一张:您中意哪个?领导看了看没说话,那人急了:您表个态呀!领导坏笑:你说穷人见到地上有五张百元大钞会捡哪张?', '楼主在外地,准备偷偷回去给老婆一个惊喜,就没告诉老婆自己买机票飞回去,到家已经半夜,开了房门借着昏暗的床头灯,发现老婆抱着一个男的在睡觉。我看了看,默默的走过去,扒下他的裤子,然后给他换了个尿片。', '一女生养了一只兔子,那个兔子这几天一直不吃萝卜,女生担心兔子生病,询问医生,医生回答:“兔子从来不吃有腥味的东西。”']
import random
import time
jokes=[]
for i in range(0, len(rows)):
#print(i, len(jokes))
url=rows[i][1]
# 获取页面并解析出文本
time.sleep(0.5 + 2.5*random.random())
db=getJoke( url )
if db==None:
db=getJoke2( url )
if db==None or len(db)==0:
print("broken:", url )
continue
for joke in db:
if joke not in jokes:
jokes.append(joke)
# 总数
print(len(jokes))
broken: http://www.duanziku.com/gaoxiaoduanzi/1532050935.html broken: http://www.duanziku.com/gaoxiaoduanzi/1531978794.html broken: http://www.duanziku.com/gaoxiaoduanzi/1528713026.html broken: http://www.duanziku.com/gaoxiaoduanzi/1448785704.html broken: http://www.duanziku.com/gaoxiaoduanzi/1448785868.html broken: http://www.duanziku.com/gaoxiaoduanzi/1442508453.html broken: http://www.duanziku.com/gaoxiaoduanzi/1418635654.html broken: http://www.duanziku.com/gaoxiaoduanzi/201503232007.html broken: http://www.duanziku.com/gaoxiaoduanzi/1442847901.html broken: http://www.duanziku.com/gaoxiaoduanzi/1462873956.html broken: http://www.duanziku.com/gaoxiaoduanzi/1462626825.html broken: http://www.duanziku.com/gaoxiaoduanzi/1462626987.html broken: http://www.duanziku.com/gaoxiaoduanzi/1497323924.html broken: http://www.duanziku.com/gaoxiaoduanzi/1497323723.html broken: http://www.duanziku.com/gaoxiaoduanzi/1463061982.html broken: http://www.duanziku.com/gaoxiaoduanzi/1462874485.html broken: http://www.duanziku.com/gaoxiaoduanzi/1462874300.html broken: http://www.duanziku.com/gaoxiaoduanzi/1462873770.html broken: http://www.duanziku.com/gaoxiaoduanzi/1462873653.html broken: http://www.duanziku.com/gaoxiaoduanzi/1462803355.html broken: http://www.duanziku.com/gaoxiaoduanzi/1462627240.html broken: http://www.duanziku.com/gaoxiaoduanzi/1461593741.html broken: http://www.duanziku.com/gaoxiaoduanzi/1448786383.html broken: http://www.duanziku.com/gaoxiaoduanzi/1448786182.html broken: http://www.duanziku.com/gaoxiaoduanzi/1442845663.html broken: http://www.duanziku.com/gaoxiaoduanzi/1442510166.html broken: http://www.duanziku.com/gaoxiaoduanzi/1442509891.html broken: http://www.duanziku.com/gaoxiaoduanzi/1442509670.html broken: http://www.duanziku.com/gaoxiaoduanzi/1442507310.html broken: http://www.duanziku.com/gaoxiaoduanzi/1439563999.html broken: http://www.duanziku.com/gaoxiaoduanzi/1438967293.html broken: http://www.duanziku.com/gaoxiaoduanzi/1438965289.html broken: http://www.duanziku.com/gaoxiaoduanzi/1438965012.html broken: http://www.duanziku.com/gaoxiaoduanzi/20150303142501.html broken: http://www.duanziku.com/gaoxiaoduanzi/20150303125028.html broken: http://www.duanziku.com/gaoxiaoduanzi/20150303124811.html 411
# 保存到文件
fw=open("dustbin/jokes.txt", 'w')
for joke in jokes:
fw.write(joke + "\n")
fw.close()
潜在狄利克雷分布(Latent Dirichlet Allocation, LDA)是基于不同的词语共同出现的频率来进行分组的模型。
# 载入文件
fr=open("dustbin/jokes.txt", 'r')
lines=fr.readlines()
line=str(lines) #把数组变成一个字符串
fr.close()
print( len(lines) ) #411
print(len(line)) #23419
# 分词
import jieba
line2=jieba.cut(line)
x=" ".join(line2)
# 保存
with open("dustbin/cutjokes.txt", 'w') as f:
f.write(x);
Building prefix dict from the default dictionary ... Loading model from cache /tmp/jieba.cache
411 23419
Loading model cost 0.451 seconds. Prefix dict has been built successfully.
from sklearn.feature_extraction.text import TfidfVectorizer
# 导入 LDA 模型
from sklearn.decomposition import LatentDirichletAllocation
# 打印提取后的高频词
def print_topics(model, feature_names, n_top_words):
for topic_idx, topic in enumerate(model.components_):
message = "topic #%d:" % topic_idx
message += " ".join([ feature_names[i]
for i in topic.argsort()[:-n_top_words -1:-1]])
print(message)
print()
#定义每个话题提取20个高频词
n_top_words=20
# tfidf 最大特征数 1000
tf=TfidfVectorizer(max_features=1000)
# 载入分词处理过的文本文件
fr=open("dustbin/cutjokes.txt")
#转化训练数据
X_train = tf.fit_transform(fr)
fr.close()
# 指定 LDA 模型提取10个话题
lda=LatentDirichletAllocation(n_components=6)
lda.fit(X_train)
print_topics(lda, tf.get_feature_names_out(), n_top_words )
topic #0:东西 吃饭 妹子 不会 那么 睡觉 回家 损友 但是 不能 世界 真的 一定 起来 同事 媳妇 妈妈 他们 大家 早上 topic #1:东西 吃饭 妹子 不会 那么 睡觉 回家 损友 但是 不能 世界 真的 一定 起来 同事 媳妇 妈妈 他们 大家 早上 topic #2:东西 吃饭 妹子 不会 那么 睡觉 回家 损友 但是 不能 世界 真的 一定 起来 同事 媳妇 妈妈 他们 大家 早上 topic #3:东西 吃饭 妹子 不会 那么 睡觉 回家 损友 但是 不能 世界 真的 一定 起来 同事 媳妇 妈妈 他们 大家 早上 topic #4:老师 小明 一个 自己 我们 时候 什么 然后 不是 老公 因为 滚出去 为什么 老婆 就是 知道 发现 喜欢 哥们 同学 topic #5:东西 吃饭 妹子 不会 那么 睡觉 回家 损友 但是 不能 世界 真的 一定 起来 同事 媳妇 妈妈 他们 大家 早上
for topic_idx, topic in enumerate(lda.components_):
print(topic_idx, ">>>", topic[0:6])
0 >>> [0.1666679 0.16666772 0.16666748 0.1666679 0.16666748 0.16666748] 1 >>> [0.1666679 0.16666772 0.16666748 0.1666679 0.16666748 0.16666748] 2 >>> [0.1666679 0.16666772 0.16666748 0.1666679 0.16666748 0.16666748] 3 >>> [0.1666679 0.16666772 0.16666748 0.1666679 0.16666748 0.16666748] 4 >>> [0.18359249 0.17936037 0.17512861 0.18359249 0.17512861 0.17512861] 5 >>> [0.1666679 0.16666772 0.16666748 0.1666679 0.16666748 0.16666748]
tmp=tf.get_feature_names_out()
tmp
array(['10', '11', '13', '18', '200', '30g', '886', 'dv', 'lz', 'u3000', '一下', '一个', '一二', '一二一', '一些', '一件', '一会', '一会儿', '一位', '一分钱', '一半', '一口', '一句', '一只', '一块', '一声', '一天', '一头', '一定', '一层', '一巴掌', '一张', '一日', '一样', '一次', '一款', '一毛', '一毛钱', '一波', '一点', '一瓶', '一直', '一看', '一眼', '一种', '一脸', '一般', '一起', '一路', '一身', '一辆', '一辈子', '一针', '一顿', '一颗', '三个', '三年级', '三次', '上学', '上来', '上班', '上课', '上铺', '上面', '下午', '下来', '下班', '下课', '下雨', '下面', '不了', '不介意', '不会', '不住', '不到', '不吃', '不够', '不太好', '不太对', '不好', '不好意思', '不弃', '不想', '不敢', '不是', '不用', '不知', '不离', '不能', '不行', '不要', '不要脸', '不过', '不错', '专家', '世上', '世界', '世间', '东西', '东风', '丝袜', '两个', '两人', '两毛', '两瓶', '两种', '严肃', '个人', '中午', '中国', '为了', '为什么', '之前', '之后', '乌龟', '九点', '也好', '书上', '书包', '了解', '事情', '二年级', '二月份', '于是', '五张', '五毛', '亲爱', '人们', '人家', '人民', '人民币', '人物', '人生', '人类', '人缘', '什么', '今天', '今年', '今晚', '介意', '他们', '他家', '以为', '以前', '以后', '会装', '伟大', '传来', '估计', '但是', '位置', '低声', '体育', '体育老师', '何必', '作为', '你们', '倒霉', '做梦', '停止', '停车费', '偶像', '偷偷', '儿子', '允许', '兄弟', '先生', '兔子', '全世界', '全是', '全班', '全部', '八戒', '公交车', '公司', '六年', '关机', '关键', '其中', '其实', '内涵', '再也', '写道', '军训', '农夫', '冬天', '冰棍', '准备', '减肥', '几个', '几天', '几年', '出去', '出去玩', '出差', '出来', '出现', '出门', '出题', '分手', '分钟', '刘邦', '刚刚', '别人', '别的', '到手', '制造', '加油', '动词', '劫匪', '包子', '医生', '十块钱', '千万', '千万别', '半夜', '半天', '卫生巾', '印度', '却是', '历史', '历史课', '厉害', '厕所', '原则', '反应', '反正', '反驳', '发型', '发现', '发现自己', '叔叔', '变得', '变成', '只是', '只有', '只能', '只要', '只见', '可以', '可怜', '可惜', '可能', '司机', '吃掉', '吃面', '吃饭', '各种', '各自', '同事', '同学', '同桌', '同行', '名词', '后悔', '后来', '后面', '听到', '听见', '听说', '吵架', '告诉', '味道', '呼吸', '咋办', '咱们', '哈哈哈', '哥们', '哥哥', '哪些', '哪位', '哪里', '唯一', '啊啊啊', '喜不喜欢', '喜欢', '喝酒', '嘴上', '嘴里', '四个', '回到', '回去', '回复', '回家', '回来', '回答', '因为', '因此', '国旗', '在家', '地上', '地库', '地方', '地狱', '地球', '地说', '坐在', '块钱', '垃圾桶', '声音', '夏天', '外面', '多久', '多少', '多岁', '多年', '多钱', '夜晚', '大叔', '大喊', '大声', '大姐', '大学', '大家', '大惊失色', '大爷', '天天', '天气', '太短', '头发', '奥特曼', '女人', '女儿', '女友', '女士', '女子', '女孩', '女方', '女朋友', '女生', '奴隶', '奶奶', '好人', '好吃', '好多', '好奇', '好好', '好好学习', '如果', '妈呀', '妈妈', '妖怪', '妹妹', '妹子', '妹纸', '姐夫', '姐姐', '姑姑', '姑娘', '姓名', '委屈', '婚礼', '媳妇', '孔子', '孕妇', '孙子', '孙尚香', '孙敬', '孤独', '学会', '学校', '学渣', '学生', '学长', '孩子', '安心', '安静', '完后', '客人', '室友', '害怕', '家里', '容易', '宿舍', '寂寞', '对不起', '对方', '对象', '对面', '将来', '小伙', '小偷', '小区', '小孩', '小强', '小心', '小时', '小时候', '小明', '小混混', '小红', '小花', '尤其', '就是', '就算', '就要', '尼玛', '居然', '工作', '工作人员', '工资', '已经', '希望', '帮忙', '干嘛', '干预', '年轻', '幽幽', '广告', '床上', '开口', '开始', '开学', '开心', '开车', '当成', '当时', '当然', '形容', '很多', '徒步旅行', '得到', '微博', '心里', '忍不住', '忘记', '快到', '快播', '怀孕', '怀里', '怎么', '怎么办', '总代', '总是', '恋爱', '恶心', '情侣', '情况', '想要', '意思', '感冒', '感觉', '成语', '我们', '我会', '我妈', '我家', '我怕', '我爸', '我能', '我要', '或者', '房门', '所以', '所有', '手机', '手里', '打开', '打电话', '打算', '找到', '抓住', '抓起', '报恩', '抱住', '抱怨', '担心', '拖拉机', '拥有', '拿出', '指着', '挺住', '损友', '换个', '掏出', '掐指一算', '排队', '接到', '接着', '接过', '提问', '播音员', '改成', '放假', '放到', '放在', '放大镜', '故意', '数学', '数学老师', '敲诈', '敲门', '新娘', '新生', '新郎', '旁边', '无奈', '无聊', '日本', '早上', '早餐', '早饭', '时候', '时间', '明天', '明白', '明说', '昨天', '昨晚', '是不是', '是因为', '晕倒', '晚上', '智慧', '暧昧', '曾经', '最后', '最少', '最终', '最近', '月饼', '有个', '有些', '有人', '有次', '有点', '有钱', '有钱人', '有鬼', '朋友', '朋友家', '服务员', '本人', '机器', '机场', '机智', '果然', '某人', '校服', '校长', '样子', '桌上', '桌子', '梦想', '梦见', '横着', '欣赏', '正在', '正太', '正常', '每天', '每次', '比如', '比较', '水果', '水里', '永远', '汉子', '汤圆', '汽车', '沉默', '没人', '没想', '没有', '没用', '没累', '没见', '没说', '没钱买', '没钳', '没错', '河捕', '河里', '油井', '油条', '沿着', '法国人', '泡妞', '泡菜坛', '泡起来', '波有', '泥巴', '注定', '注意', '泪水', '洗发水', '洗完', '洗手间', '洗澡', '活得', '流下来', '流口水', '流氓', '流行语', '流量', '流鼻涕', '测试', '浑身', '浑身解数', '浩劫', '浪费', '浮云', '浴室', '浴鬼', '海尔', '消停', '消失', '淫笑', '深呼吸', '深夜', '深沉', '深深', '混混', '混贴', '淹死', '添条', '清朝', '清脆', '渐暗', '渔网', '温暖', '温柔', '温水', '游到', '游回来', '游客', '游戏', '游泳', '游玩', '游走', '溜圈', '滋味', '滚出去', '滚出来', '滚滚', '滚远', '满嘴', '满满', '漂亮', '漆黑', '激动', '濒危', '灌水', '火化', '火灾现场', '火爆', '火警', '灭亡', '灯泡', '烟花', '然后', '煤气罐', '照抄', '熊猫', '爬山', '爱情', '爱迪生', '父亲', '爷爷', '爸爸', '牙齿', '牙龈', '牛腩', '牧师', '物品', '物理', '物理课', '物种', '特二逼', '特别', '特强', '特性', '特恨', '特意', '特技', '特淡定', '特牛', '犀利', '犒劳', '犯法', '犹豫', '狂叫', '狂奔', '狄仁杰', '狠狠', '狼狈', '猛吸', '猝然', '猪大肠', '猪肉', '献给', '猴哥', '王八', '王大哥', '王部', '玛淡', '玩多', '玩游戏', '玩电脑', '环顾四周', '现在', '现实', '玻璃', '珍惜', '班有', '班级', '班里', '理解', '瓶子', '生与死', '生气', '生活', '生病', '用来', '电脑', '电视', '电话', '男人', '男友', '男子', '男孩', '男方', '男朋友', '画蛇添足', '留下', '痛苦', '痴汉', '白日', '的话', '直接', '相亲', '相会', '相册', '省钱', '看不到', '看书', '看到', '看看', '看着', '看见', '看起来', '看过', '真的', '眼睛', '眼神', '眼里', '着急', '睡觉', '知道', '短信', '研究', '硬币', '确定', '碗筷', '碰到', '神马', '科学家', '突出', '突然', '窗外', '等于', '粽子', '精神损失费', '紧紧', '红包', '约会', '纸条', '组个', '终于', '经常', '经过', '结婚', '结果', '结账', '绝对', '继续', '罐子', '美国', '美女', '羡慕', '老公', '老大爷', '老婆', '老子', '老师', '老板', '老爸', '老虎', '老衲', '考试', '而且', '而是', '聊天', '联系方式', '肚子', '股票', '背景', '脑子', '脑子里', '脑袋', '脸上', '脸小红', '脸红', '脸色', '脾气', '自动', '自己', '自拍', '自毙', '自然课', '自由', '自觉', '臭汗', '臭豆腐', '至于', '至今', '至少', '舌头', '舍不得', '花花', '若无其事', '英雄', '萝卜', '萧萧', '落木', '著名', '葵花', '蓝牙', '虚伪', '虽然', '血水', '行为', '行驶', '衣服', '被子', '被窝', '装作', '装备', '裙子', '裤子', '要是', '觉得', '角落里', '警察', '认识', '记得', '许仙', '诗词', '询问', '诧异', '语文课', '说完', '说话', '说道', '读书', '课堂', '谈恋爱', '谢谢', '贝多芬', '贩卖', '购物车', '赚钱', '赫然', '赶紧', '起床', '起来', '超市', '越来越', '趴在', '距离', '跟着', '路上', '路边', '身上', '身后', '身材', '身边', '车上', '车里', '转换成', '轮椅', '轰轰烈烈', '辆车', '输光', '辛苦', '过去', '过夜', '过来', '过硬', '过话', '迎面', '还是', '还有', '还来', '还生', '这个', '这么', '这位', '这句', '这女', '这年头', '这时', '这是', '这条', '这样', '这熊', '这病', '这种', '这要', '这话', '这货', '这趟', '这辈子', '这边', '这里', '进个', '进入', '进化', '进去', '进得', '进新', '进来', '进水', '进行', '进门', '退货', '送给', '选择', '选择性', '递给', '造句', '遇到', '那个', '那么', '那些', '那人', '那年', '那样', '那种', '那里', '邻居', '部长', '醒来', '重点', '金钱', '钞票', '钱包', '银行', '长得', '长痘痘', '长相', '长逝', '门口', '门外', '闭上眼睛', '闭嘴', '闭气', '问题', '闺蜜', '阿姨', '除了', '除皱', '陪葬', '随从', '随便', '隔壁', '难怪', '需要', '青春', '非要', '面前', '韩信', '韩国', '韭菜', '顿时', '领导', '饭店', '饮料', '马上', '马云', '马儿', '马儿跑', '马克思', '马克思主义', '马化腾', '马扎', '马桶', '马路边', '驾崩', '驾照', '驾驶', '骂名', '骨头', '骨感', '高中', '高傲', '高潮', '高等教育', '黄瓜', '龙珠'], dtype=object)
for i in topic.argsort()[:-n_top_words -1:-1]:
print(i, tmp[i])
98 东西 246 吃饭 343 妹子 72 不会 933 那么 747 睡觉 283 回家 472 损友 149 但是 88 不能 96 世界 742 真的 28 一定 865 起来 249 同事 352 媳妇 340 妈妈 140 他们 313 大家 499 早上
爬虫:推荐 Scrapy,是目前最常用的用于开发爬虫的工具之一。
自然语言处理:循环神经网络 RNN。