毕业设计-利用nutch中Outlink类的方法获取数据库属性值

来源:互联网 发布:元数据与主数据区别 编辑:程序博客网 时间:2024/06/13 11:49

今天重新思考了下,对于系统后续工作非常重要的三个数据库属性值的获取方法:

Product(product_id,product_name,product_url)

User(user_id,user_name,user_role,user_url)

Discussion(discuss_id,discuss_content,discuss_url,product_id,user_id,purchase_date)


为了获取足够的页面信息,nutch要抓取到三种类型的页面:review、userreview、repay

review页面为抓取起始页,是某个商品的全部评论页http://club.jd.com/review/560573-0-1-0.html。

560573-0-1-0中数字含义依次是:商品id——未知——评论的页数(目前为第一页)——评论类型(0为全部评价;1为差评;2为中评;3为好评;4为有晒单,即有照片)

userreview页面是某一个用户对目前他购买商品的所有评论的页面,这里含有不只一种商品的评价,url例如http://club.jd.com/userreview/13276568-1-1.html

13276568-1-2中数字含义是:用户id——未知——评论的页数(目前为第二页)

repay是某个用户对某个商品的评论页,一般只有一条评论,url例如:http://club.jd.com/repay/560573_ad853f2b-154c-455a-9a3f-e33c2ba21542_1.html

后面数字的含义尚不清楚- -


获取三个数据库的属性值依赖于不同页面的外链锚文本,具体说明如下:



1 Product

商品数据库的构建是为用户及评论数据库构建做重要准备。因为nutch抓取网页需要一个起始url,限于目前菜鸟级的技术水平和京东恼人的前端设计,我准备以某商品的“全部评论”页作为起始url:http://club.jd.com/review/560573-0-1-0.html。以此作为起始的最大的好处在于简单,而且可以避开ajax造成的所有评论页的url相同,nutch无法抓取的结果。

在这个页面的url中,我们可以很容易的获取product_id的值,即在“review/”之后和“-0”之前截取“560573”。

有了product_id后,我们可以自行构建product_url:http://item.jd.com/560573.html,只需在“item.jd.com/”后添加id。

考虑了product_name的获取方法,但未曾尝试:例如该产品名字为乐扣乐扣礼盒装2件套LLG214S001,在面包屑导航的位置出现了一次,它本身是一个锚文本。我们利用outlink.getToUrl方法获取该锚文本下的url(即为product_url)以进行判断。如果该url满足“item AND product_id",则该url的”getAnchor“一定是一个商品名。至此我们便获取了Product数据库的全部属性值。


2 User

用户数据库的建立便依赖于商品”全部评价“页面的抓取情况,方法与product_name获取方法一致。

user_id即为某用户全部评论页面url中的数字,比如http://club.jd.com/userreview/13276568-1-1.html中的13276568。

user_name是起始页中的外链,点击用户名锚文本可以链接到userreview页面,所以也利用”userreview“为依据判断该外链的url是否为用户评价页,如果是则该外链的锚文本是user_name。

user_role的获取略微麻烦一点。在userreview页面的外链中,”金牌会员“可以链接到会员帮助页http://help.jd.com/help/question-57.html。所以我们首先要进入userreview页面,然后在这里的外链中找到带有”question-57“的url,来获取Anchor,锚文本是user_role。

user_url就是带有userreview的url,很容易得到。


3 Discussion

discuss_id比较复杂,比如这是某个用户对于我们乐扣产品的一个评论的页面url,http://club.jd.com/repay/560573_ad853f2b-154c-455a-9a3f-e33c2ba21542_1.html,比较繁琐。考虑以product_id+user_id共同组成讨论的id比较好,或者干脆不需要这个属性。

discuss_url就是上一段中带有”repay“的网址,也很容易获取。

product_id,是repay和下划线之间的数字;user_id获取比较麻烦,在repay页面中user_name是一个锚文本,可以指向userreview页面,我们可以从userreview页面的url(http://club.jd.com/userreview/13276568-1-1.html)中获取user_id。

purchase_date本身是起始页中的外链锚文本,点击日期可以进入repay页面,方法同上。

discuss_content的值也可以有相应办法进行获取,评论内容出现在三个不同页面上:userreview、repay、起始页review,我们需要认真考虑的是从哪个入口获得评论的内容。为了方便抓取考虑,选择repay页比较合适。因为repay页中只出现惟一一个评论,即为该用户对于该产品的评论。


运用上述方法的语句片段为:

string pagecontent = segments.getParseText(detail).getText();//得到内容        Outlink[] outlink = segments.getParseData(detail).getOutlinks();//得到外链
if (outlink[j].getToUrl().indexOf("site/users/view")>0){//找到讨论的用户    disscant = outlink[j].getAnchor();

—————————————————————————————————————————————————————————————————————————————

再好好认真研究一下nutch源代码中的Outlink类及FetchedSegments吧~








原创粉丝点击