Chapter1 关于“万方论文”的论文爬取与数据清洗
tips1:爬取数据
【背景】此爬虫是爬取万方自己设定的主题相关文献的
“title”、“abstract”、“link”、”author“、”date“、”keywords“、”link“等信息
【准备内容】爬虫原链接为 https://github.com/EachenKuang/wanfangSpider 项目上修改版。
修改内容如下:将所爬取内容进行了处理。同时将原本应该存入txt文件中结果存在了一个wanfang.sqlite数据库中。可以直接下载SQLiteStudio打开此数据库并且导出sql文件转存入mysql等数据库,使用更加方便。
因此我也上传了github仓库,链接:https://github.com/snowlixue/wanFangSpider-dataPretreatment
【操作提示】
start_urls = [ 'http://s.wanfangdata.com.cn/Paper.aspx?q=的&f=top&p=1']
修改其中“的”为你所要爬取的主题。
在pipelines.py文件中修改所要存储的属性信息。
tips2:转存入mysql
【导入mySQL】爬取完成之后,用SQLiteStudio导出sql/csv文件,之后转存入mysql数据库。我用的Navicat客户端。这里要注意的是需要在Navicat中建好含有这些字段的表,然后表后右击导入sql/csv文件。之后加入自增的id字段。(否则数据清洗一定会出错)
tips3:数据清洗
【删除null值和空格】1.数据导入后title会有很多空格,需要删除。2.由于abstract、title、keywrods很重要,这里采取直接删除其中任一为null的行。3.对id列删除重建,使其可以重新从1自增排序。
import mysql.connector
#连接数据库
conn = mysql.connector.connect(user='root', password='root', database='test')
cursor = conn.cursor()
sql_select = "select * from cnkiinfotest"
try:
cursor.execute(sql_select)
result = cursor.fetchall()
for row in result:
id = row[0]
print(id)
# 清除title、abstract、keywords任意为null的项
if row[1] == None or row[5] == None or row[6] == None:
cursor.execute("delete from cnkiinfotest where id = %d" % (row[0]))
conn.commit()
# 将title内无用空格去除
print(row[1].strip())
cursor.execute("UPDATE cnkiinfotest SET title = \'%s\' WHERE id = %d" %(row[1].strip(),row[0]))
conn.commit()
"""
if row[1] != '':
title = row[1]
print("title:" + title.strip())
if row[5] != '':
abstracts = row[5]
print("abstract" + abstracts)
if row[6] != '':
keywords = row[6]
print("keyword:" + keywords)
# 打印结果
"""
except:
print("Error: unable to fecth data")
#清理后,id删除重做
cursor.execute("ALTER TABLE cnkiinfotest DROP id")
conn.commit()
cursor.execute("ALTER TABLE cnkiinfotest ADD id mediumint(6) PRIMARY KEY NOT NULL AUTO_INCREMENT FIRST")
conn.commit()
conn.close()
conn = mysql.connector.connect(user='root', password='root', database='test')
在这里修改user和password信息。
tips4:导出语料库
语料库是为了word2vec训练词向量准备,这里采用abstract制作语料库。其中需要进行分词,然后按行写入txt
import mysql.connector
import jieba
conn = mysql.connector.connect(user='root', password='root', database='test')
cursor = conn.cursor()
f = open("./abstract.txt", "w", encoding='UTF-8')
#将abstract写入txt,为训练词向量准备
try:
cursor.execute("select * from cnkiinfotest")
results = cursor.fetchall()
for row in results:
print("abstract"+row[5])
wordlist = jieba.cut(row[5])
for word in wordlist:
f.write(word)
f.write(" ")
f.write("\n")
except:
print("something wrong,can't featch all")
conn.close()
tip5:
完成以上所有步骤后就可以对abstract.txt进行模型训练,并且生成词向量了。
这里代码参照了 https://github.com/NLPchina/Word2VEC_java
在项目下新建library文件夹,将abstract.txt存入其中,修改Learn.java文件
public static void main(String[] args) throws IOException {
Learn learn = new Learn();
long start = System.currentTimeMillis();
learn.learnFile(new File("library/abstract.txt"));
System.out.println("use time " + (System.currentTimeMillis() - start));
learn.saveModel(new File("library/javaVector"));
}
以上就本次爬虫加model训练的全部内容,有问题可以评论区留言。