从零实现爬虫和情感分类模型(一)
文 | Giant
编 | NLP情报局
日常生活中,我们去吃饭、观影会提前上网刷评论,然后再选择好评高的餐厅或电影。
看新闻时,我们也会点击感兴趣的新闻类别(体育、财经等),再结合标题有选择地阅读。
情感分析、新闻归类都是自然语言处理—文本分类任务的经典应用。本文我们将从0实现一个餐厅评论评分系统。具体分4个模块介绍:
python怎么装最方便?
如何用python实现爬虫?
数据处理三剑客使用技巧
如何实现情感分类模型?
开源代码:
https://github.com/yechens/RestaurantCrawler
python怎么装最方便?
python是一种非常流行的编程语言,语法简洁却功能强大,安装方式很多。Mac和Ubuntu等系统已经预装好了最新版本的python。
但我还是强烈推荐你安装Anaconda套装。它是一个开源的python发行版本,包含180多个工具包,其中很多工具包对于机器学习研究非常重要。一次安装可以“一劳永逸”。
进入Anaconda官网的下载页面,可以根据你的系统下载最新版本的conda。如果想下载历史版本,可以参考[1]。
之后根据中文提示一步步安装即可,非常方便。
安装完成后,进入系统终端(Windows下称“命令提示符”),用conda创建一个虚拟环境,这样可以和系统中原有的python环境相隔离。
conda create -n py36 python=3.6 # 创建指定py版本的虚拟环境
conda env list # 查看虚拟环境
source activate py36 # 激活
这里我们创建了一个python3.6版本的虚拟环境,然后激活进入:
python最基础的环境搭建到这儿全部完成啦。
如何用python实现爬虫
我们的目标是实现一个餐厅评分系统,核心数据是各大餐厅的评论语料。如何获得呢?
最简单的方法,是去各大点评网站上查看餐厅的评论信息,然后手工复制、粘贴到Excel。但这样费时费力,效率极低。能不能让计算机帮助我们自动搜集各个店铺的评论数据呢?
当然可以!这就是网络爬虫。
整个互联网相当于一张大图,各个网站是图中的节点。爬虫正是模拟人的行为,利用计算机自动遍历各个节点,访问页面并抓取信息。这里的信息包括图片、文字、视频、脚本等等。此外,我们要记载哪个网页下载过了,以免重复。
相比真实用户访问,爬虫有2个明显优势:
自动进行,无需人工干预
并发量大,访问效率高
而读者之所以经常听到爬虫和python挂钩,是因为脚本语言python非常适合写爬虫代码。
有多简单呢?核心只有三行代码:
import requests
r = requests.get(url="http://www.baidu.com")
content = r.content
requests库会自动向我们指定的网页链接(百度)发起http请求,并将爬取结果返回到变量content中。
爬虫背后涉及了浏览器的工作原理。对此感兴趣的读者,可以阅读参考文献[2]。
这“两行代码”是最简单的一种情况,爬取到的内容也只是百度首页的源码;但实际开发爬虫的核心内容,已经呈现在这两行代码里了。
Scrapy简介
在本项目中,我使用了一个比requests库稍复杂的工具Scrapy,它是python最火的爬虫框架,结构化的设计可以让开发人员方便的自定义项目需求。
框架核心内容可以用这张图来概述,图中包括Scrapy5大组件:
Scrapy Engine(引擎)
爬虫的“大脑”,是整个爬虫的调度中心
Scheduler(调度器)
初始的爬取URL和后续在页面中获取的待爬取的URL将放入调度器中,等待爬取。
同时调度器会自动去除已经下载过的URL。
Downloader(下载器)
获取指定页面的数据并提供给引擎和spider
Spiders(爬虫类)
用户编写的分析爬取结果(response)并从中提取内容的类
Items(实体类)
处理Spiders提取出来的内容(items)
典型处理包括:清洗、验证、持久化(存入数据库)
Scrapy主体内容先介绍到这,参考文献[3]、[4]、[5]为读者准备了学习这个框架的更多资料。
爬取餐厅评论
接下来进入实战环节:利用python、Scrapy实现各大城市餐厅评论信息的自动爬取。
借助之前下载的conda工具,进入虚拟环境后我们用一行代码完成scrapy安装:
conda install scrapy
为了方便演示,这儿只爬取杭州、北京等5大城市各1000家餐馆的200条评论,一共约100w条数据。想爬取更多内容,读者略微修改开源代码中的内容即可。
创建项目
我们先创建一个新的Scrapy项目:
scrapy startproject MeiTuanRestaurant
该命令将会创建包含以下内容的MeiTuanRestaurant目录:
scrapy.cfg: 项目的配置文件
MeiTuanRestaurant/: 项目的python模块。之后您将在此加入代码
MeiTuanRestaurant/items.py: 项目中的item文件
MeiTuanRestaurant/pipelines.py: 项目中的pipelines文件
MeiTuanRestaurant/settings.py: 项目的设置文件
MeiTuanRestaurant/spiders/: 放置spider代码的目录
cd进入MeiTuanRestaurant目录,随后我们在spiders目录下创建一个存放“爬虫类”的py文件:
scrapy genspider meituan meituan.com
meituan.py中生成了爬虫类MeituanSpider,我们在其中指定需要爬取的页面入口、解析爬取结果并存放到数据库中等操作。
我在meituan.py做了简单的修改,并定义了一些新函数。
函数参数“response”中存储了页面解析后的结果,我们可以从中提取出想要的内容,例如当前页面(page)、评论信息等。
完善爬虫
随后,我们指定好爬取的页面url,并填写函数内容。本项目中,我们通过构造api接口,提取json格式的数据。
此外,我们需要在settings.py中进行相关配置,常见操作有将爬虫伪装成浏览器、设置下载延时、配置数据库等等。
item.py中建立了评论的对象类,包含了样本的所有属性。例如一条评论可以有城市、标题、内容、星级4个特征。
启动爬虫
打开终端进入项目所在路径(MeiTuanRestaurant路径下),运行以下命令:
scrapy crawl meituan
启动后可以看到爬虫开始卖力爬取各个餐厅的评论信息啦。
数据持久化
为了将爬取到的内容及时保存,我把评论数据存储到非结构化数据库mongodb中。
如果觉得速度太慢,还可以尝试分布式架构(如scrapy-redis),加快爬虫爬取速度。
总结
本文实现了“从零实现爬虫和情感分类模型”的第一部分:搭建环境、实现爬虫。单机约2-3天可以完成百万级的评论信息自动爬取(如果遇到ip被封,需要设置代理池继续伪装爬虫)。
在下一篇文章中,我们将分析数据处理和模型训练的实用技巧!
[1] Anaconda历史版本: https://repo.continuum.io/archive/
[2] 图解浏览器的基本工作原理: https://zhuanlan.zhihu.com/p/47407398
[3] Scrapy官方文档: https://scrapy.org/
[4] 《Python爬虫开发与项目实战》: https://www.jqhtml.com/down/716.html
[5] 构建单机千万级别的微博爬虫系统: https://github.com/LiuXingMing/SinaSpider
说个正事哈
由于微信平台算法改版,公号内容将不再以时间排序展示,如果大家想第一时间看到我们的推送,强烈建议星标我们和给我们多点点【在看】。星标具体步骤为:
(1)点击页面最上方“深度学习自然语言处理”,进入公众号主页。
(2)点击右上角的小点点,在弹出页面点击“设为星标”,就可以啦。
感谢支持,比心。
投稿或交流学习,备注:昵称-学校(公司)-方向,进入DL&NLP交流群。
方向有很多:机器学习、深度学习,python,情感分析、意见挖掘、句法分析、机器翻译、人机对话、知识图谱、语音识别等。
记得备注呦
推荐两个专辑给大家:
专辑 | 李宏毅人类语言处理2020笔记
专辑 | NLP论文解读
专辑 | 情感分析
整理不易,还望给个在看!
从零实现爬虫和情感分类模型(一)相关推荐
- 基于Java的亚马逊“手机”评论爬虫的情感分类分析
本项目主要内容说明 首先从亚马逊中文网站爬取了关于"手机"的评论,然后对其进行情感分类.使用用户标记的星级作为情感类别,将这些评论分为了3类(与星级对应关系为1-{1,2},2-{ ...
- CV:基于Keras利用CNN主流架构之mini_XCEPTION训练情感分类模型hdf5并保存到指定文件夹下
CV:基于Keras利用CNN主流架构之mini_XCEPTION训练情感分类模型hdf5并保存到指定文件夹下 目录 图示过程 核心代码 图示过程 核心代码 def mini_XCEPTION(inp ...
- 情感分类模型介绍CNN、RNN、LSTM、栈式双向LSTM
情感分类模型介绍CNN.RNN.LSTM.栈式双向LSTM 1.文本卷积神经网络(CNN) 卷积神经网络经常用来处理具有类似网格拓扑结构(grid-like topology)的数据.例如,图像可以视 ...
- 《学术小白的实战之路》01 LDA-Word2Vec-TF-IDF组合特征的机器学习情感分类模型研究
书山有路勤为径,学海无涯苦作舟 三更灯火五更鸡,正是男儿读书时 一.传统的机器学习分类模型 1.1 对文本的数据进行分词 数据样式 自定义分词词典.去除停用词,分词 #---------------- ...
- 改进BERT的中文评论情感分类模型
摘要 为了改善现有基于深度学习网络的中文评论情感分类方法,同时提高中文评论情感分类的正确率和效率,基于Tensorflow框架,对传统BERT模型进行改进,以Nlpcc2013和Nlpcc2014公开 ...
- python 多分类情感_文本情感分类(一):传统模型
前言:四五月份的时候,我参加了两个数据挖掘相关的竞赛,分别是物电学院举办的"亮剑杯",以及第三届 "泰迪杯"全国大学生数据挖掘竞赛.很碰巧的是,两个比赛中,都有 ...
- python 多分类情感词典_基于情感词典的文本情感分类
基于情感词典的文本情感分类 传统的基于情感词典的文本情感分类,是对人的记忆和判断思维的最简单的模拟,如上图.我们首先通过学习来记忆一些基本词汇,如否定词语有"不",积极词语有&qu ...
- PaddlePaddle文本卷积实现情感分类和微博女友情绪监控AI
本期文章我们将使用文本卷积和StackLSTM层来实现一个情感分类网络,这样你就可以拥有一个属于自己的情感监控AI啦,甚至通过微博的接口来监控你女朋友的情绪.而要实现这一切,你不需要别的什么东西,你只 ...
- SIGIR 2021 | 基于不确定性正则化与迭代网络剪枝的终身情感分类方法
导读 终身学习能力对于情感分类器处理网络上连续的意见信息流而言至关重要.然而,执行终身学习对于深度神经网络来说是困难的,因为持续地训练可用信息会不可避免地会导致灾难性遗忘.发表在信息检索领域顶会 SI ...
- PaddlePaddle︱开发文档中学习情感分类(CNN、LSTM、双向LSTM)、语义角色标注
PaddlePaddle出教程啦,教程一部分写的很详细,值得学习. 一期涉及新手入门.识别数字.图像分类.词向量.情感分析.语义角色标注.机器翻译.个性化推荐. 二期会有更多的图像内容. 随便,帮国产 ...
最新文章
- mysql 存储过程out,in,inout分别表示什么
- Kerberos验证过程
- 你遇到的面试官是「伯乐」吗?
- MySQL8怎么设置时区为东八区_mysql时区设置为东八区
- signature=267d7b238718fa0d900b4fd94e068fe9,Modelowanie widm NMR kwadrupolowych jąder
- Java jni 底层_JAVA语言语言调用底层语言的技术JNI解析
- Android.mk中call all-subdir-makefiles和call all-makefiles-under,$(LOCAL_PATH)的区别
- 字符串转数组和数组转字符串
- GridView的dataformatstring设置
- 固定成本、可变成本、沉没成本、机会成本、边际成本
- 如何使用robots.txt及其详解
- 记录错误:cv2.error: OpenCV(4.4.0) C:\Users\appveyor\AppData\Local\Temp\1\pip-req-build-h4wtvo23\opencv\m
- APP微信支付报错《商户号该产品权限未开通,请前往商户平台产品中心检查后重试》
- python 正则 匹配任意字符串_python中正则匹配
- mysql group by个数_mysql 统计 group by 之后的 group 的个数
- Hadoop客户端环境准备(附IDEA免费激活码及补丁破解教程)
- Kerberos在linux安装部署
- 计算机上午指令系统是指,计算机指令系统是指( )。
- 《强化学习周刊》第47期:MEDAL、RL4Rec、H-GRAIL 非情景强化学习
- 计算:代理一个游戏需要多少成本
热门文章
- BZOJ.4842.[NEERC2016]Delight for a Cat(费用流)
- SPring cloud (3)A Ribbon 负载均衡 配置初步
- selenium BY定位
- 软考解析:2017年下半年下午试卷
- hdu_5894_hannnnah_j’s Biological Test(打表找规律)
- Json格式类的转换相关代码--转载
- 聚焦索引与非聚焦索引及其查询效率 (MS SQL SERVER)
- 设置NumericStepper控件不可用状态的字体颜色。
- 调用天气接口获取天气预报
- Hadoop伪集群部署