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訓練的全部內容,有問題可以評論區留言。