1.什么是爬虫
可以理解为抓取、解析、存储互联网上原始信息的程序工具,Google、Baidu底层都是爬虫。
2.为什么学Python和爬虫
从2013年毕业入职起,我已在咨询行业呆了4.5年,期间历经了从尽职调查、战略规划、业务转型,到信用风险管理、数据管理等多类项目,也经历了从Analyst到Consultant到Senior再到Manager的角色转变,收获良多。
然而时代在变,市场环境、金融行业、科技融合程度已今非昔比,自身发展需求与职业瓶颈的矛盾越来越突出。在当前的年纪,所有职业路径判断与选择的出发点都是类似的——去往能最大程度积累沉淀自己的地方。每个发展阶段都有黄金选择期,错过了就比较被动。
我意向的行业对数据分析有着相比咨询更高要求,咨询行业侧重于商业逻辑分析,本身的数据分析过程并不复杂。从我自己日常对银行业的数据分析过程看:
数据源:基本是Wind提取+年报研报补漏;
清洗:Excel PivotTable+VBA;
分析:Excel分析工具库(回归分析)+CrystallBall(敏感性分析);
展现:Excel Chart(精细化格式调整)+Think-Cell Chart(快速展现与复杂标记)。
工具的选择:
所以我自己日常的数据处理其实局限在Excel的筛选归类层面,这很好,但应对未来趋势变化,这还不够。在跟行业客户接触过程中,我也看到一些其他的数据分析方式:
某家银行的计划财务部取数还是在业务系统中运行SQL指令;
阿里风控团队也是通过SQL自己取数自己分析;
某行信用卡中心通过SAS取数建模;
我司精算团队用SAS做保险业链梯法计算;
我司风险团队用SAS做零售信贷评分卡建模;
我司RPA团队用BluePrism给各类公司繁复流程操作做机器人流程自动化……
上述这些工具中:
SAS比较复杂,与我的工作关联度较小,但我仍然认为努力获得一张SAS Base/Advanced Programmer证书作为简历上的基础名片蛮有意义。
R语言曾经在Coursera上学过几门课程,对RStudio圆萌的字体印象深刻,使用方便,但场景较少。
综合考虑,我认为未来自己意向发展的行业中,Python+SQL是两大简单强大、使用频率极高的工具。因为真正的商业分析,需要结合自己的取数思路去钻取,企业的一手数据量庞大到无法用一个excel文件去筛选归类,也不可能有一个码农小哥每天服务你,只能自学。
为了自学Python,我选择了相对有意思的切入点——爬虫。因为爬虫的应用场景实在太广了,工作上可以用来做市场分析、市场监控、商机发现,用于各类规划分析项目;生活中,也总能找到自己喜欢的场景,比如有人爬取知乎所有美女头像,有人通过浏览器抓包钻研银行活动。
3.实战——从爬取豆瓣书评影评做起
3.1部署环境(Python+PyCharm+Packages)
用途:Python是主程序,PyCharm是方便撰写代码的IDE(集成开发环境),Packages是撰写爬虫中需要调用的前人写好的各类包/组件
Python2.X和3.X版本选择:差别不大:主要是语法、编码、Print用法、Xrange等函数改变。语法是细枝末节的东西,与其纠结学习2还是3,不如马上开始。但Python3更简单,而且Python2只维护到2020年。
下载Python3.6:https://www.python.org/downloads/release/python-363/,在我的电脑属性中设置环境变量,方便cmd直接打开python
下载PyCharm Community:方便写代码(就像RStudio之于R一样)Http://www.jetbrains.com/pycharm/download/#section=windows,安装后需选择Project Intepreter(项目编译器)的目录是之前安装Python3.6的路径。
安装Packages(本次涉及的有requests, BeautifulSoup4, pandas,其它前置包会自动安装): 如果在命令行下安装(在CMD环境下,而不是Python环境下),用pip install requests命令(pip 是Python的软件包管理系统,Python语言自带的命令行工具,它可以安装和管理第三方软件包。
需注意PyCharm创建了一个Python虚拟机环境,所以Python安装目录下用pip命令安装的packages,在pycharm会提示找不到,解决方法是通过File-Settings-Project右侧的加号查找重新安装,非常方便。
pip安装packages的命令行界面
PyCharm安装packages的图形界面
3.2爬取豆瓣书评
爬虫结构:就像一只虫子的头-身-尾三部分一样,简单爬虫结构包括三部分:1使用requests获得数据+2使用BeautifulSoup解析数据+3使用pandas保存数据
1获得数据:打开我最喜欢的一本书之一《爱因斯坦的梦》,点击下方的全部短评,复制地址栏“https://book.douban.com/subject/1030789/comments/”,导入requests,使用requests.get获取网页源码。
定位到图书短评的URL
2解析数据:导入bs4 ,解析网页数据(Chrome浏览器中右键检查Inspect,找到不同短评的标签叫做
),寻找数据(寻找p comment-content),for循环打印(循环查找所有出现comment-content的地方,出现一条即是一条短评)。
通过Chrome审查功能定位到每条短评的标签位置
3保存数据:导入pandas ,新建list对象,使用to_csv写入
图书短评爬虫代码如下:
importrequests,pandas
frombs4importBeautifulSoup
r = requests.get('https://book.douban.com/subject/1030789/comments/';).text
soup = BeautifulSoup(r,'lxml')
pattern = soup.find_all('p','comment-content')
foriteminpattern:
print(item.string)
comments = []
foriteminpattern:
comments.append(item.string)
df = pandas.DataFrame(comments)
df.to_csv('comments_book.csv',encoding='utf_8_sig')
运行后生成的csv文件如下(可以看到,左右两侧完全一致,免去了手工复制粘贴的繁琐):
3.3爬取豆瓣影评
换一个我喜欢的电影《秋刀鱼之味》。
豆瓣网站是个蛮奇怪的存在,因为影评和书评的页面结构不一样,比如刚才看到书评中短评标签叫做“
”,而电影短评页面标记只有p,没有comment-content。所以代码中需要相应修改解析的位置,但不可避免的仅用p标记,会出来一些不想要的垃圾数据需要进一步清洗。
影评爬虫代码:
importrequests,pandas
frombs4importBeautifulSoup
r = requests.get('https://movie.douban.com/subject/1294433/comments/';).text
soup = BeautifulSoup(r,'lxml')
pattern = soup.find_all('p')#不包括comment-content
foriteminpattern:
print(item.string)
comments = []
foriteminpattern:
comments.append(item.string)
df = pandas.DataFrame(comments)
df.to_csv('comments_film.csv',encoding='utf_8_sig')
再对比爬出的结果和原网页,会发现前三行是无用信息,删去即可,其它短评都爬下来了:
4.总结
这次我试图通过实操步骤,将爬虫的编写方式和应用场景简单化呈现。但背后还会有很多背景知识,比如网页的html(骨架)+css(衣服)+script(动作)结构,比如不同渲染方式网站翻页时URL变化的差异(同步加载HTML渲染URL改变、异步加载Ajax渲染URL不改变)、HTTP的两种请求方式(post、get)…… 这些是给自己知识体系添砖加瓦、补充血肉使其丰满的过程。在抓住主脉络后,包裹四周的知识积累决定了爬虫技术是见习还是资深。
我上面代码第一行不太规范,import理论上应该一个module或package一行,而不是放在一行写、逗号隔开,这一点stackoverflow上有人做过解答:
学习过程中会发现,码农的世界里有很多好玩的东西,比如找package安装方法时看到的这个,只有讲究的人和强迫症一定要在非必要时升级升级再升级:
以及这个:(Pandas本意是Python Data Analysis Library缩写,没想到还有pandas-bamboo的扩展包,可能从熊猫啃竹子衍生来的数据清洗吧)
(感谢DC学院的课程!未完待续)
本文来自企鹅号 - ZY月谈媒体
如有侵权,请联系 cloudcommunity@tencent.com 删除。
本文来自企鹅号 - ZY月谈媒体
如有侵权,请联系 cloudcommunity@tencent.com 删除。