随着互联网的数据爆炸式增长, 而利用 Python 爬虫我们可以获取大量有价值的数据:
1. 爬取数据, 进行市场调研和商业分析
爬取知乎优质答案, 筛选各话题下最优质的内容; 抓取房产网站买卖信息, 分析房价变化趋势, 做不同区域的房价分析; 爬取招聘网站职位信息, 分析各行业人才需求情况及薪资水平.
2. 作为机器学习, 数据挖掘的原始数据
比如你要做一个推荐系统, 那么你可以去爬取更多维度的数据, 做出更好的模型.
3. 爬取优质的资源: 图片, 文本, 视频
爬取商品的评论以及各种图片网站, 获得图片资源以及评论文本数据.
掌握正确的方法, 在短时间内做到能够爬取主流网站的数据, 其实非常容易实现.
首先我们来了解爬虫的基本原理及过程
大部分爬虫都是按 "发送请求 -- 获得页面 -- 解析页面 -- 抽取并储存内容" 这样的流程来进行, 这其实也是模拟了我们使用浏览器获取网页信息的过程.
简单来说, 我们向服务器发送请求后, 会得到返回的页面, 通过解析页面之后, 我们可以抽取我们想要的那部分信息, 并存储在指定的文档或数据库中.
在这部分你可以简单了解 HTTP 协议及网页基础知识, 比如 POSTGET,html,CSS,JS, 简单了解即可, 不需要系统学习.
学习 Python 包并实现基本的爬虫过程
Python 中爬虫相关的包很多: urllib,requests,bs4,scrapy,pyspider 等, 建议你从 requests+Xpath 开始, requests 负责连接网站, 返回网页, Xpath 用于解析网页, 便于抽取数据.
如果你用过 BeautifulSoup, 会发现 Xpath 要省事不少, 一层一层检查元素代码的工作, 全都省略了. 掌握之后, 你会发现爬虫的基本套路都差不多, 一般的静态网站根本不在话下, 小猪, 豆瓣, 糗事百科, 腾讯新闻等基本上都可以上手了.
存数据
首先, 我们来说存数据, 是因为在初期学习的时候, 接触的少, 也不需要太过于关注, 随着学习的慢慢深入, 我们需要保存大批量的数据的时候, 就需要去学习数据库的相关知识了!
初期, 我们抓到需要的内容后, 只需要保存到本地, 无非保存到文档, 表格 (excel) 等等几个方法, 这里大家只需要掌握 with 语句就基本可以保证需求了. 大概是这样的:
- with open(路径以及文件名, 保存模式) as f:
- f.write(数据)# 如果是文本可直接写入, 如果是其他文件, 数据为二进制模式更好
当然保存到 excel 表格或者 word 文档需要用到 xlwt 库(excel),python-docx 库(word), 这个在网上很多, 大家可以自行去学习.
取数据
说了这么多, 我们来说说主题. 怎么来抓取我们想要的数据呢? 我们一步步的来!
一般所谓的取网页内容, 指的是通过 Python 脚本实现访问某个 URL 地址 (请求数据), 然后获得其所返回的内容(HTML 源码, Json 格式的字符串等). 然后通过解析规则(页面解析), 分析出我们需要的数据并取(内容匹配) 出来.
在 python 中实现爬虫非常方便, 有大量的库可以满足我们的需求, 比如先用 requests 库取一个 url(网页)的源码
- import requests# 导入库
- url = '你的目标网址'
- response = requests.get(url) #请求数据
- print(response.text) #打印出数据的文本内容
这几行代码就可以获得网页的源代码, 但是有时候这里面会有乱码, 为什么呢?
因为中文网站中包含中文, 而终端不支持 gbk 编码, 所以我们在打印时需要把中文从 gbk 格式转为终端支持的编码, 一般为 utf-8 编码.
所以我们在打印 response 之前, 需要对它进行编码的指定(我们可以直接指定代码显示的编码格式为网页本身的编码格式, 比如 utf-8, 网页编码格式一般都在源代码中的 < meta > 标签下的 charset 属性中指定). 加上一行即可.
response.encode = 'utf-8' #指定编码格式
至此, 我们已经获取了网页的源代码, 接下来就是在乱七八糟的源代码中找到我们需要的内容, 这里就需要用到各种匹配方式了, 常用的几种方式有: 正则表达式(re 库),bs4(Beautifulsoup4 库),xpath(lxml 库)!
建议大家从正则开始学习, 最后一定要看看 xpath, 这个在爬虫框架 scrapy 中用的很多!
通过各种匹配方式找到我们的内容后(注意: 一般匹配出来的是列表), 就到了上面所说的存数据的阶段了, 这就完成了一个简单的爬虫!
当然了, 在我们具体写代码的时候, 会发现很多上面没有说到的内容, 比如
获取源代码的时候遇到反爬, 根本获取不到数据
有的网站需要登录后才可以拿到内容
遇到验证码
获取到内容后写入文件出错
怎样来设计循环, 获取大批量的内容甚至整站爬虫
剩下的我们再来慢慢的研究.
总结
Python 爬虫这种技术, 既不需要你系统地精通一门语言, 也不需要多么高深的数据库技术, 高效的姿势就是从实际的项目中去学习这些零散的知识点, 你能保证每次学到的都是最需要的那部分.
当然唯一麻烦的是, 在具体的问题中, 如何找到具体需要的那部分学习资源, 如何筛选和甄别, 是很多初学者面临的一个大问题.
来源: http://developer.51cto.com/art/201806/576999.htm