赞
踩
本次项目需将 web-Movies 中的 movies.txt 文件导入 NEO4J 图形数据库中,并计算共同评论某几部电影最多的用户集合。项目大致分三步进行:提取 txt 文件——爬取电影名称——导入neo4j图形数据库——用Java连接数据库对其进行操作。
本项目可通过输入产品 id 或电影名称进行查询。
本次项目在 window10 操作系统下进行,电脑内存为 16G,需用到的软件有 vscode、neo4j desktop、IntelliJ IDEA。
NEO4J 官网的最新版为 4.2 版本,jdk 要求为 jdk11,而 jdk11 在虚拟内存管理方面存在 bug,使用 jdk11 完成大量数据的导入会有 Java Heap Space 报错,所以本项目使用 Neo4j 3.5 和 jdk1.8。
在系统环境变量中添加NEO4J_HOME变量,变量值为neo4j下载的根目录。用cmd进入neo4j目录下的bin目录,使用如下命令完成 neo4j 服务的安装以及打开:
neo4j install-service
neo4j start
本项目需用到 review 文件中的 productId、userId、profileName 三项数据,利用 python 中的 xlwt 对文件进行提取和写入。
需要注意的是,如果要对全部文档进行提取,需考虑各编译器的内存读入因素,建议先将文档切割。此外,由于 xls 每个 sheet 最多只有 65000+行,所以在写入数据时需注意更换 sheet,或者换成存csv。
数据提取和写入的主要代码如下:
import xlwt filename="movies\movies.txt" movies=open(filename,"r",encoding="utf-8") workbook = xlwt.Workbook(encoding = 'utf-8') worksheet = workbook.add_sheet("movies") worksheet.write(0,0,"productId") worksheet.write(0,1,"userId") worksheet.write(0,2,"profileName") cnt=1 try: line=movies.readline()#逐行读取 except: continue line=str(line) if "product/productId" in line: try: productId=line.split(": ")[1]#获取产品 id worksheet.write(cnt,0,productId) except: continue elif "review/userId" in line: try: userId=line.split(": ")[1]#获取用户 id worksheet.write(cnt,1,userId) except: continue elif "review/profileName" in line: try: profileName=line.split(": ")[1]#获取用户昵称 worksheet.write(cnt,2,profileName) cnt=cnt+1 except: cnt=cnt+1 continue workbook.save("reviews.xls") movies.close()
由此,可以得到一个包括 productId、userId、profileName 的 excel 表,另存为 csv 后可用于数据库的导入。
已经得到 productId 后,本项目还需获得另一个产品属性——电影名称,原始文件review.txt中缺少此项,本项目只能通过productId对Amazon网页进行爬虫获取电影名,获得的电影名与productId写入excel文件。关键代码如下(并不全面):
from selenium import webdriver
import pandas as pd
import xlwt
import threading
url = 'https://www.amazon.com/dp/'
#################################################################
#输入文件的路径,同一个文件夹的数据只需要输入文件名即可 #
#注意 excel 表格只能有一列的 asin 信息,而且第一行必须是字符串“asin”(无引号)#
################################################################
df=pd.read_excel('D:\\数据仓库\\data\\test.xlsx')
workbook = xlwt.Workbook(encoding = 'utf-8')
nm =
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。