推荐系统的学习历程(三)

项目申报之后,要做的就是发表一篇学术论文。其实我对这个毫无压力,因为我已经做过了实验,我只需要将实验结果写到论文里面即可。

但是,我的老师突然告诉我,我申报了服装推荐系统,那我的实验也得是服装的。换句话说,我的数据必须是服装数据。

大数据时代,最值钱的东西就是数据。最难弄到手的也是数据。服装评分数据,淘宝、天猫、京东一大把。但是数据的可信度不高,无论里面的评论有多少水军,电商网站总是不会把关键数据放出来。

只能硬着头皮做了。

这个时候又有个问题,数据怎么得到手?只能用python爬虫啊。我又花了不少时间学习爬虫,终于学会了用正则表达式去解析网页。老师叫我用市面上的爬虫软件去爬取。但是这些软件都很不好用,特别是动态页面。我想爬取服装的评论,评论是分页的,虽然大部分爬虫软件都克服这个问题。但是最大的问题是,爬虫软件需要商品的地址,注意,是每一个商品的地址。也就是说我要爬取2000件衣服的数据,那我就要输入2000个网址。

我觉得过于繁琐,于是自己编写了一个爬虫,只需要输入某一个服装浏览页面,就可以把这一页所有的服装评论爬下来。

import json
import re
import requests
import html
import time
import json

def crawl_page(page):

    url="https://list.jd.com/list.html?cat=1315,1343,1355&ev=exbrand_165551&page="+str(page)+"&sort=sort_rank_asc&trans=1&JL=6_0_0#J_main"
    res=requests.get(url)
    body=res.text

    pattern=re.compile("var attrList = (.*?)var other_exts",re.S)
    ID_pattern=re.compile("[, ](\d.*?):\{")
    m=pattern.findall(body)
    ID=ID_pattern.findall(m[0])


    for item in ID:
        crawl_mark(item)


def crawl_mark(item):
    page=0
    str1="https://sclub.jd.com/comment/productPageComments.action?callback=fetchJSON_comment98vv7&productId="
    str1=str1+item
    str1=str1+"&score=0&sortType=5&page="
    str1=str1+str(page)+"&pageSize=10&isShadowSku=0&rid=0&fold=1"
    url=str1
    res=requests.get(url)
    body=res.text

    pattern=re.compile("{\"id.*?\"topped\"(.*?)afterDays",re.S)
    m=pattern.findall(body)
    maxpage_pattern=re.compile("maxPage\":(.*?),",re.S)
    content_pattern=re.compile("guid.*?content\":\"(.*?)\"",re.S)
    nick_pattern=re.compile("isReplyGrade.*?nickname\":\"(.*?)\"",re.S)
    score_pattern=re.compile("replyCount2.*?score\":(.*?),",re.S)
    level_pattern=re.compile("userLevelName\":\"(.*?)\"")

    maxpage=maxpage_pattern.findall(body)

    fo=open("data.txt","a")
    ft=open("test.txt","a",encoding="utf-8")
    output2={}
    for page in range(0,int(maxpage[0])):
        str1="https://sclub.jd.com/comment/productPageComments.action?callback=fetchJSON_comment98vv3&productId="
        str1=str1+item
        str1=str1+"&score=0&sortType=5&page="
        str1=str1+str(page)+"&pageSize=10&isShadowSku=0&rid=0&fold=1"
        url=str1
        res=requests.get(url)
        body=res.text
        
        output1=[]
        for div in m:
            content=content_pattern.search(div).group(1)
            nick=nick_pattern.search(div).group(1)
            score=score_pattern.search(div).group(1)
            level=level_pattern.search(div).group(1)
            user=[score,level]
            output2.setdefault(nick,user)


        count=1

    for key in output2:
        if count<4:
            count=count+1       
            fo.write(item+" "+key+" "+output2[key][0]+" "+output2[key][1]+"\n")  
        else:
            count=1
            ft.write(item+" "+key+" "+output2[key][0]+" "+output2[key][1]+"\n")
         
  
if __name__=='__main__':
    for i in range(1,6):
        crawl_page(i)

又是繁琐的环境配置。但是当这个爬虫跑起来的时候,我有一种自己做的东西比市面上500块一个月的爬虫软件还要好用的优越感。这种感觉又让我充满了自信。

获取了这些数据之后我做了实验,发现这些数据应该是处理过的,而且用户水军很多(不知道这一点能不能发论文呢)。

但是还是用这个数据的实验结果写了篇协同过滤算法改进的论文。

也正是这篇论文的完成,意味着我在机器学习上面的研究可以暂时告一段落了,也正是这个时候我才有时间好好的总结一下过去的学习。接下来我准备ACM9月份的省赛。大三的时候我又会回过头来继续研究。希望那个时候我身上有个奖牌吧。

推荐系统是一种能够根据用户历史行为、兴趣偏好等信息,向用户推荐可能感兴趣的商品、新闻、音乐等内容的系统。推荐系统的发展历程可以分为以下几个阶段: 1. 基于内容的推荐系统(1990年代初期):这种系统是根据物品的属性和用户过去的行为,推荐与用户过去喜欢的内容相似的物品。这种方法的缺点是容易出现“信息过滤泡”,即用户很难发现新的、未知的信息。 2. 协同过滤推荐系统(1990年代中期):这种方法是根据用户的历史行为和兴趣,找到具有相似兴趣的其他用户,然后向当前用户推荐这些用户喜欢的物品。这种方法的缺点是对于新用户或者用户行为较少的情况下,推荐效果不佳。 3. 混合推荐系统(2000年代初期):这种方法结合了基于内容和协同过滤的方法,既考虑了物品的属性,也考虑了用户行为和兴趣,提高了推荐的准确性。 4. 基于图的推荐系统(2000年代中后期):这种方法是将用户和物品之间的关系看作一个图,然后根据图的结构和节点之间的关系,进行推荐。这种方法在社交网络等领域应用广泛。 5. 深度学习推荐系统(2010年代中期至今):这种方法使用深度学习技术,对用户行为和物品属性进行建模,提高了推荐的准确性和覆盖率。其中,基于神经网络的推荐系统,如Google的Wide & Deep模型和Facebook的DSSM模型等,应用广泛。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值