04. 爬取京东评论以构建词向量——实现中文情绪分类器基础

说明

  要想构建中文情绪分类器,肯定要有合理合法的中文句子及其情感标签。所谓网络爬虫,只要不以牟取利益为目的或侵害他人及企业的合法权益即合理。我们能爬的只能是官网对所有用户都开放的一部分数据。若想详细了解,请参照下文实例:

爬虫究竟是合法还是违法的?

  我们以游客的身份访问京东商城,随意打开一个商品即可查看广大消费者的公开评论。因此我们可以将其中某些商品的部分评论保存为判断中文句子情绪的数据集,星级高的定义为积极句子,反之亦然。

那让我们开始吧!

1. 浏览器的选择

  最好选用Chrome浏览器来查看商品的网址,及发出按星级显示评论输出的请求。因为当我们打开Edge浏览器的开发者工具后,京东商城会自动切换为手机浏览器(网址加m.)模式,无法查看评论详情。备选浏览器可以是360和FireFox。

2. 查找商品评论链接

① Chrome浏览器的方法:

② 360浏览器的方法:

③ Firefox浏览器的方法:

3. 写Python代码爬取自定星数的评论

3-1. 导入包

# 抓取网页内容用的包
import json
import requests

3-2. 定义在指定页面获取评论的函数

# 在指定的 url 处获得评论
def get_comments(url):
    comments = []
    # 打开指定页面
    resp = requests.get(url)
    resp.encoding = 'gbk'

    # 如果200秒没有打开则失败
    if resp.status_code != 200:
        return []

    # 获得内容
    content = resp.text
    if content:
        # 获得括号中的内容
        ind = content.find('(')
        s1 = content[ind+1:-2]
        try:
            # 尝试利用 json 接口读取内容,并做 json 解析
            js = json.loads(s1)
            # 提取 comments 字段的内容
            comment_infos = js['comments']
        except:
            print('error')
            return([])

        # 对每一条评论进行内容部分的抽取
        for comment_info in comment_infos:
            comment_content = comment_info['content']
            str1 = comment_content + '\n'
            comments.append(str1)
    return comments

3-3. 开始爬取

以爬取4星评论为例,刚才得到的链接为:
brtE0s.png

  其中包含"score=0"字句表示的是默认的显示全部星级的评论,"page=0"表示默认显示第1页。我们要想爬取全部为4星的评论信息,需要将"score=0"更改为"score=4",并且将"page=0"改为"page={}"。

good_comments = []

# 接下来,调用上述函数,从这个商品中调取评论星级为4的所有评论

# 评论抓取的来源地址,其中参数包括:
# productID 为商品的 id ,score 为评分,page 为对应的评论翻页的代码,pageSize 为总页数
# 这里我们设定 score=4 表示我们想得到的好评分(情绪)对应的中文评价

good_comment_url_template = 'https://club.jd.com/comment/productPageComments.action?callback=fetchJSON_comment98&productId=12115945&score=4&sortType=5&page={}&pageSize=10&isShadowSku=0&fold=1'

# 对上述网址进行循环,并模拟翻页 200 次
j = 0
for i in range(200):
    good_comments = get_comments(good_comment_url_template)
    print('第{}条记录,总文本长度{}'.format(j, len(good_comments)))
    j += 1

# 将结果存储到 good.txt 文件中
fw = open('./good_4.txt', 'w', encoding='utf-8')
fw.writelines(good_comments)

4. 查看结果

自己看看就好啦,这里放上运行过程的输出:

br0Cpq.png

打赏
文章目录