前端时间闲的无聊, 对 Python 兴趣徒增. 学习这事儿吧, 光看没用, 还是要是实战, 顺手搜了一些写的不错的开源库, 也看了些博客. 总结一些, 分享给大家.
学 Python, 想必大家都是从爬虫开始的吧. 毕竟网上类似的资源很丰富, 开源项目也非常多.
Python 学习网络爬虫主要分 3 个大的版块: 抓取, 分析, 存储
当我们在浏览器中输入一个 url 后回车, 后台会发生什么? 比如说你输入 http://www.tuotiao.com, 你就会看到头条站首页.
简单来说这段过程发生了以下四个步骤:
查找域名对应的 IP 地址.
向 IP 对应的服务器发送请求.
服务器响应请求, 发回网页内容.
浏览器解析网页内容.
网络爬虫要做的, 简单来说, 就是实现浏览器的功能. 通过指定 url, 直接返回给用户所需要的数据, 而不需要一步步人工去操纵浏览器获取.
抓取这一步, 你要明确要得到的内容是什么? 是 html 源码, 还是 Json 格式的字符串等. 将得到内容逐一解析就好. 具体的如何解析, 以及如何处理数据, 文章后面提供了非常详细的且功能强大的开源库列表.
当然了, 爬去别人家的数据, 很有可能会遭遇反爬虫机制的, 怎么办? 使用代理.
适用情况: 限制 IP 地址情况, 也可解决由于 "频繁点击" 而需要输入验证码登陆的情况.
这种情况最好的办法就是维护一个代理 IP 池, 网上有很多免费的代理 IP, 良莠不齐, 可以通过筛选找到能用的.
对于 "频繁点击" 的情况, 我们还可以通过限制爬虫访问网站的频率来避免被网站禁掉.
有些网站会检查你是不是真的浏览器访问, 还是机器自动访问的. 这种情况, 加上 User-Agent, 表明你是浏览器访问即可. 有时还会检查是否带 Referer 信息还会检查你的 Referer 是否合法, 一般再加上 Referer. 也就是伪装成浏览器, 或者反 "反盗链".
对于网站有验证码的情况, 我们有三种办法:
使用代理, 更新 IP.
使用 cookie 登陆.
验证码识别.
接下来我们重点聊聊验证码识别.
可以利用开源的 Tesseract-OCR 系统进行验证码图片的下载及识别, 将识别的字符传到爬虫系统进行模拟登陆. 当然也可以将验证码图片上传到打码平台上进行识别. 如果不成功, 可以再次更新验证码识别, 直到成功为止.
好了, 爬虫就简单聊到这儿, 有兴趣的朋友可以去网上搜索更详细的内容.
文末附上本文重点: 实用 Python 库大全.
网络
urllib - 网络库 (stdlib).
requests - 网络库.
grab - 网络库 (基于 pycurl).
pycurl - 网络库 (绑定 libcurl).
urllib3 - Python HTTP 库, 安全连接池, 支持文件 post, 可用性高.
httplib2 - 网络库.
RoboBrowser - 一个简单的, 极具 Python 风格的 Python 库, 无需独立的浏览器即可浏览网页.
MechanicalSoup - 一个与网站自动交互 Python 库.
mechanize - 有状态, 可编程的 web 浏览库.
socket - 底层网络接口 (stdlib).
网络爬虫框架
grab - 网络爬虫框架 (基于 pycurl/multicur).
scrapy - 网络爬虫框架.
pyspider - 一个强大的爬虫系统.
cola - 一个分布式爬虫框架.
HTML/XML 解析器
lxml - C 语言编写高效 HTML/ XML 处理库. 支持 XPath.
CSSselect - 解析 DOM 树和 CSS 选择器.
pyquery - 解析 DOM 树和 jQuery 选择器.
BeautifulSoup - 低效 HTML/ XML 处理库, 纯 Python 实现.
html5lib - 根据 WHATWG 规范生成 HTML/ XML 文档的 DOM. 该规范被用在现在所有的浏览器上.
feedparser - 解析 RSS/ATOM feeds.
MarkupSafe - 为 XML/HTML/XHTML 提供了安全转义的字符串.
文本处理
用于解析和操作简单文本的库.
difflib - (Python 标准库) 帮助进行差异化比较.
Levenshtein - 快速计算 Levenshtein 距离和字符串相似度.
fuzzywuzzy - 模糊字符串匹配.
esmre - 正则表达式加速器.
ftfy - 自动整理 Unicode 文本, 减少碎片化.
自然语言处理
处理人类语言问题的库.
NLTK - 编写 Python 程序来处理人类语言数据的最好平台.
Pattern - Python 的网络挖掘模块. 他有自然语言处理工具, 机器学习以及其它.
TextBlob - 为深入自然语言处理任务提供了一致的 API. 是基于 NLTK 以及 Pattern 的巨人之肩上发展的.
jieba - 中文分词工具.
SnowNLP - 中文文本处理库.
loso - 另一个中文分词库.
浏览器自动化与仿真
selenium - 自动化真正的浏览器 (Chrome 浏览器, 火狐浏览器, Opera 浏览器, IE 浏览器).
Ghost.py - 对 PyQt 的 webkit 的封装 (需要 PyQT).
Spynner - 对 PyQt 的 webkit 的封装 (需要 PyQT).
Splinter - 通用 API 浏览器模拟器 (selenium web 驱动, Django 客户端, Zope).
多重处理
threading - Python 标准库的线程运行. 对于 I/O 密集型任务很有效. 对于 CPU 绑定的任务没用, 因为 python GIL.
multiprocessing - 标准的 Python 库运行多进程.
celery - 基于分布式消息传递的异步任务队列 / 作业队列.
concurrent-futures - concurrent-futures 模块为调用异步执行提供了一个高层次的接口.
异步
异步网络编程库
asyncio - (在 Python 3.4 + 版本以上的 Python 标准库) 异步 I/O, 时间循环, 协同程序和任务.
Twisted - 基于事件驱动的网络引擎框架.
Tornado - 一个网络框架和异步网络库.
pulsar - Python 事件驱动的并发框架.
diesel - Python 的基于绿色事件的 I/O 框架.
gevent - 一个使用 greenlet 的基于协程的 Python 网络库.
eventlet - 有 WSGI 支持的异步框架.
Tomorrow - 异步代码的奇妙的修饰语法.
队列
celery - 基于分布式消息传递的异步任务队列 / 作业队列.
huey - 小型多线程任务队列.
mrq - Mr. Queue - 使用 redis & Gevent 的 Python 分布式工作任务队列.
RQ - 基于 Redis 的轻量级任务队列管理器.
simpleq - 一个简单的, 可无限扩展, 基于 Amazon SQS 的队列.
python-gearman - Gearman 的 Python API.
云计算
picloud - 云端执行 Python 代码.
dominoup.com - 云端执行 R,Python 和 matlab 代码
网页内容提取
提取网页内容的库.
HTML 页面的文本和元数据
newspaper - 用 Python 进行新闻提取, 文章提取和内容策展.
html2text - 将 HTML 转为 Markdown 格式文本.
python-goose - HTML 内容 / 文章提取器.
lassie - 人性化的网页内容检索工具
WebSocket
用于 WebSocket 的库.
Crossbar - 开源的应用消息传递路由器 (Python 实现的用于 Autobahn 的 WebSocket 和 WAMP).
AutobahnPython - 提供了 WebSocket 协议和 WAMP 协议的 Python 实现并且开源.
WebSocket-for-Python - Python 2 和 3 以及 PyPy 的 WebSocket 客户端和服务器库.
DNS 解析
dnsyo - 在全球超过 1500 个的 DNS 服务器上检查你的 DNS.
pycares - c-ares 的接口. c-ares 是进行 DNS 请求和异步名称决议的 C 语言库.
计算机视觉
OpenCV - 开源计算机视觉库.
SimpleCV - 用于照相机, 图像处理, 特征提取, 格式转换的简介, 可读性强的接口 (基于 OpenCV).
mahotas - 快速计算机图像处理算法 (完全使用 C++ 实现), 完全基于 numpy 的数组作为它的数据类型.
代理服务器
shadowsocks - 一个快速隧道代理, 可帮你穿透防火墙 (支持 TCP 和 UDP,TFO, 多用户和平滑重启, 目的 IP 黑名单).
tproxy - tproxy 是一个简单的 TCP 路由代理 (第 7 层), 基于 Gevent, 用 Python 进行配置.
另:
Python 有很多 Web 开发框架, 大而全的开发框架非 Django 莫属, 用得也最广泛. 有很多公司有使用 Django 框架, 如某狐, 某讯等. 以简洁著称的 web.py,flask 都非常易于上手, 以异步高性能著称的 tornado, 源代码写得美如画, 知乎, Quora 都在用.
最后祝大家学的愉快, 学的神速.
来源: http://news.51cto.com/art/201805/574173.htm