互联网的数据爆炸式的增长, 而利用 Python 爬虫我们可以获取大量有价值的数据:
1. 爬取数据, 进行市场调研和商业分析
爬取知乎优质答案, 筛选各话题下最优质的内容; 抓取房产网站买卖信息, 分析房价变化趋势, 做不同区域的房价分析; 爬取招聘网站职位信息, 分析各行业人才需求情况及薪资水平.
2. 作为机器学习, 数据挖掘的原始数据
比如你要做一个推荐系统, 那么你可以去爬取更多维度的数据, 做出更好的模型.
3. 爬取优质的资源: 图片, 文本, 视频
爬取商品 (店铺) 评论以及各种图片网站, 获得图片资源以及评论文本数据.
掌握正确的方法, 在短时间内做到能够爬取主流网站的数据, 其实非常容易实现.
但建议你从一开始就要有一个具体的目标, 在目标的驱动下, 你的学习才会更加精准和高效. 这里给你一条平滑的, 零基础快速入门的学习路径:
1. 了解爬虫的基本原理及过程
2.Requests+Xpath 实现通用爬虫套路
3. 了解非结构化数据的存储
4. 应对特殊网站的反爬虫措施
5.Scrapy 与 MongoDB, 进阶分布式
01
了解爬虫的基本原理及过程
大部分爬虫都是按 "发送请求 -- 获得页面 -- 解析页面 -- 抽取并储存内容" 这样的流程来进行, 这其实也是模拟了我们使用浏览器获取网页信息的过程.
简单来说, 我们向服务器发送请求后, 会得到返回的页面, 通过解析页面之后, 我们可以抽取我们想要的那部分信息, 并存储在指定的文档或数据库中.
在这部分你可以简单了解 HTTP 协议及网页基础知识, 比如 POSTGET,html,CSS,JS, 简单了解即可, 不需要系统学习.
02
学习 Python 包并实现基本的爬虫过程
Python 中爬虫相关的包很多: urllib,requests,bs4,scrapy,pyspider 等, 建议你从 requests+Xpath 开始, requests 负责连接网站, 返回网页, Xpath 用于解析网页, 便于抽取数据.
如果你用过 BeautifulSoup, 会发现 Xpath 要省事不少, 一层一层检查元素代码的工作, 全都省略了. 掌握之后, 你会发现爬虫的基本套路都差不多, 一般的静态网站根本不在话下, 小猪, 豆瓣, 糗事百科, 腾讯新闻等基本上都可以上手了.
来看一个爬取豆瓣短评的例子:
选中第一条短评, 右键 -"检查", 即可查看源代码
把短评信息的 XPath 信息复制下来
我们通过定位, 得到了第一条短评的 XPath 信息:
如果我们想爬取很多条短评, 那么自然应该去获取 (复制) 更多这样的 XPath:
观察第 1,2,3 条短评的 XPath, 你会发现规律, 只有 "li" 后面的序号不一样, 恰好与短评的序号相对应. 那如果我们想爬取这个页面所有的短评信息, 那么不要这个序号就好了呀.
通过 XPath 信息, 我们就可以用简单的代码将其爬取下来了:
爬取的该页面所有的短评信息
当然如果你需要爬取异步加载的网站, 可以学习浏览器抓包分析真实请求或者学习 Selenium 来实现自动化爬取, 这样, 知乎, 时光网, 猫途鹰这些动态的网站也基本没问题了.
你还需要了解 Python 的基础知识, 比如:
文件读写操作: 用来读取参数, 保存爬取内容
list(列表),dict(字典): 用来序列化爬取的数据
条件判断(if/else): 解决爬虫中的判断是否执行
循环和迭代(for ......while): 用来循环爬虫步骤
03
非结构化数据的存储
爬回来的数据可以直接用文档形式存在本地, 也可以存入数据库中.
开始数据量不大的时候, 你可以直接通过 Python 的语法或 pandas 的方法将数据存为 text,csv 这样的文件. 还是延续上面的例子:
用 Python 的基础语言实现存储:
用 pandas 的语言来存储:
这两段代码都可将爬下来的短评信息存储起来, 把代码贴在爬取代码后面即可.
存储的该页的短评数据
当然你可能发现爬回来的数据并不是干净的, 可能会有缺失, 错误等等, 你还需要对数据进行清洗, 可以学习 pandas 包, 掌握以下知识点就好:
缺失值处理: 对缺失数据行进行删除或填充
重复值处理: 重复值的判断与删除
空格和异常值处理: 清楚不必要的空格和极端, 异常数据
数据分组: 数据划分, 分别执行函数, 数据重组
04
掌握各种技巧, 应对特殊网站的反爬措施
爬取一个页面的的数据是没问题了, 但是我们通常是要爬取多个页面.
这个时候就要看看在翻页的时候 url 是如何变化了, 还是以短评的页面为例, 我们来看多个页面的 url 有什么不同:
通过前四个页面, 我们就能够发现规律了, 不同的页面, 只是在最后标记了页面的序号. 我们以爬取 5 个页面为例, 写一个循环更新页面地址就好了.
当然, 爬虫过程中也会经历一些绝望啊, 比如被网站封 IP, 比如各种奇怪的验证码, userAgent 访问限制, 各种动态加载等等.
遇到这些反爬虫的手段, 当然还需要一些高级的技巧来应对, 常规的比如访问频率控制, 使用代理 IP 池, 抓包, 验证码的 OCR 处理等等.
比如我们经常发现有的网站翻页后 url 并不变化, 这通常就是异步加载. 我们用开发者工具取分析网页加载信息, 通常能够得到意外的收获.
通过开发者工具分析加载的信息
比如很多时候如果我们发现网页不能通过代码访问, 可以尝试加入 userAgent 信息, 甚至是浏览器的 cookie 信息.
浏览器中的 userAgent 信息
在代码中加入 userAgent 信息
往往网站在高效开发和反爬虫之间会偏向前者, 这也为爬虫提供了空间, 掌握这些应对反爬虫的技巧, 绝大部分的网站已经难不到你了.
05
Scrapy 与 MongoDB, 进阶分布式
掌握前面的技术, 一般量级的数据和代码基本没有问题了, 但是在遇到非常复杂的情况, 可能仍然会力不从心, 这个时候, 强大的 scrapy 框架就非常有用了.
scrapy 是一个功能非常强大的爬虫框架, 它不仅能便捷地构建 request, 还有强大的 selector 能够方便地解析 response, 然而它最让人惊喜的还是它超高的性能, 让你可以将爬虫工程化, 模块化.
分布式爬取租房信息
爬取的数据量大了, 自然会需要数据库, MongoDB 可以方便你去存储大规模的数据. 因为这里要用到的数据库知识其实非常简单, 主要是数据如何入库, 如何进行提取, 在需要的时候再学习就行.
MongoDB 存储职位信息
分布式这个东西, 听起来非常吓人, 但其实就是利用多线程的原理让多个爬虫同时工作, 需要你掌握 Scrapy + MongoDB + Redis 这三种工具.
Scrapy 用于做基本的页面爬取, MongoDB 用于存储爬取的数据, Redis 则用来存储要爬取的网页队列, 也就是任务队列.
这个时候, 你已经可以去写分布式爬虫了.
你看, 这一条学习路径下来, 你已然可以成为老司机了, 非常的顺畅. 所以在一开始的时候, 尽量不要系统地去啃一些东西, 找一个实际的项目(开始可以从豆瓣, 小猪这种简单的入手), 直接开始就好.
因为爬虫这种技术, 既不需要你系统地精通一门语言, 也不需要多么高深的数据库技术, 高效的姿势就是从实际的项目中去学习这些零散的知识点, 你能保证每次学到的都是最需要的那部分.
当然唯一麻烦的是, 在具体的问题中, 如何找到具体需要的那部分学习资源, 如何筛选和甄别, 是很多初学者面临的一个大问题.
不过不用担心, 我们准备了一门非常系统的爬虫课程, 除了为你提供一条清晰的学习路径, 我们甄选了最实用的学习资源以及庞大的主流爬虫案例库. 短时间的学习, 你就能够很好地掌握爬虫这个技能, 获取你想得到的数据.
这门课已经有 3000 + 同学加入, 经过短时间的学习, 不少人都取得了从 0 到 1 的进步, 能够写出自己的爬虫, 爬取大规模数据.
如果你希望在短时间内学会爬虫, 少走弯路
一上来就讲理论, 语法, 编程语言是非常不合理的, 我们会直接从具体的案例入手, 通过实际的操作, 学习具体的知识点. 我们为你规划了一条系统的学习路径, 让你不再面对零散的知识点.
来源: https://yq.aliyun.com/articles/603930