python数据挖掘系列教程——PySpider框架应用全解
全栈工程师开发手册 (作者:栾鹏)
python教程全解
python数据挖掘系列教程——PySpider框架应用全解。
PySpider介绍
pyspider上手更简单,操作更加简便,因为它增加了 WEB 界面,写爬虫迅速,集成了phantomjs,可以用来抓取js渲染的页面。支持多线程爬取、JS动态解析,提供了可操作界面、出错重试、定时爬取等等的功能
PySpider是binux做的一个爬虫架构的开源化实现。主要的功能需求是:
抓取、更新调度多站点的特定的页面
需要对页面进行结构化信息提取
灵活可扩展,稳定可监控
而这也是绝大多数python爬虫的需求 —— 定向抓取,结构化化解析。但是面对结构迥异的各种网站,单一的抓取模式并不一定能满足,灵活的抓取控制是必须的。为了达到这个目的,单纯的配置文件往往不够灵活,于是,通过脚本去控制抓取是最后的选择。
而去重调度,队列,抓取,异常处理,监控等功能作为框架,提供给抓取脚本,并保证灵活性。最后加上web的编辑调试环境,以及web任务监控,即成为了这套框架。
pyspider的设计基础是:以python脚本驱动的抓取环模型爬虫
通过python脚本进行结构化信息的提取,follow链接调度抓取控制,实现最大的灵活性
通过web化的脚本编写、调试环境。web展现调度状态
抓取环模型成熟稳定,模块间相互独立,通过消息队列连接,从单进程到多机分布式灵活拓展
pyspider-arch
pyspider的架构主要分为 scheduler(调度器), fetcher(抓取器), processor(脚本执行):
各个组件间使用消息队列连接,除了scheduler是单点的,fetcher 和 processor 都是可以多实例分布式部署的。 scheduler 负责整体的调度控制
任务由 scheduler 发起调度,fetcher 抓取网页内容, processor 执行预先编写的python脚本,输出结果或产生新的提链任务(发往 scheduler),形成闭环。
每个脚本可以灵活使用各种python库对页面进行解析,使用框架API控制下一步抓取动作,通过设置回调控制解析动作。
1、安装启动
安装pyspider:在cmd中输入pip install pyspider实现在线安装。
运行pyspider:在cmd中输入pyspider all,启动。(cmd关闭后,网站也会自动关闭)
然后浏览器访问 http://localhost:5000
界面如下:
2、创建网络爬虫
点击右下角的 Create,命名为test,当然名称你可以随意取,继续点击 Create。
整个页面分为两栏,左边是爬取页面预览区域,右边是代码编写区域。下面对区块进行说明:
左侧绿色区域:这个请求对应的 JSON 变量,在 PySpider 中,其实每个请求都有与之对应的 JSON 变量,包括回调函数,方法名,请求链接,请求数据等等。
绿色区域右上角Run:点击右上角的 run 按钮,就会执行这个请求,可以在左边的白色区域出现请求的结果。
左侧 enable css selector helper: 抓取页面之后,点击此按钮,可以方便地获取页面中某个元素的 CSS 选择器。
左侧 web: 即抓取的页面的实时预览图。
左侧 html: 抓取页面的 HTML 代码。
左侧 follows: 如果当前抓取方法中又新建了爬取请求,那么接下来的请求就会出现在 follows 里。
左侧 messages: 爬取过程中输出的一些信息。
右侧代码区域: 你可以在右侧区域书写代码,并点击右上角的 Save 按钮保存。
右侧 WebDAV Mode: 打开调试模式,左侧最大化,便于观察调试。
3、爬虫案例
https://mm.taobao.com/json/request_top_list.htm?page=1,其中 page 参数代表页码。所以我们暂时抓取前 30 页。页码到最后可以随意调整。
首先我们定义基地址,然后定义爬取的页码和总页码。
from pyspider.libs.base_handler import *class Handler(BaseHandler):crawl_config = {}def __init__(self):self.base_url = 'https://mm.taobao.com/json/request_top_list.htm?page='self.page_num = 1self.total_num = 30@every(minutes=24 * 60)def on_start(self):while self.page_num <= self.total_num:url = self.base_url + str(self.page_num)print urlself.crawl(url, callback=self.index_page)self.page_num += 1@config(age=10 * 24 * 60 * 60)def index_page(self, response):for each in response.doc('a[href^="http"]').items():self.crawl(each.attr.href, callback=self.detail_page)@config(priority=2)def detail_page(self, response):return {"url": response.url,"title": response.doc('title').text(),}
点击 save 保存代码,然后点击左边的 run,运行代码。
python数据挖掘系列教程——PySpider框架应用全解相关推荐
- python网络爬虫系列教程——Scrapy框架应用全解
全栈工程师开发手册 (作者:栾鹏) python教程全解 安装 在cmd中输入 Scrapy的安装依赖wheel.twiste.lxml包.所以先通过pip install wheel安装wheel库 ...
- jquery系列教程1-选择器全解
全栈工程师开发手册 (作者:栾鹏) 快捷链接: jquery系列教程1-选择器全解 jquery系列教程2-style样式操作全解 jquery系列教程3-DOM操作全解 jquery系列教程4-事件 ...
- js系列教程9-表单元素全解
全栈工程师开发手册 (作者:栾鹏) 快捷链接: js系列教程1-数组操作全解 js系列教程2-对象和属性全解 js系列教程3-字符串和正则全解 js系列教程4-函数与参数全解 js系列教程5-容器和算 ...
- js系列教程1-数组操作全解
全栈工程师开发手册 (作者:栾鹏) 快捷链接: js系列教程1-数组操作全解 js系列教程2-对象和属性全解 js系列教程3-字符串和正则全解 js系列教程4-函数与参数全解 js系列教程5-容器和算 ...
- css系列教程1-选择器全解
全栈工程师开发手册 (作者:栾鹏) 一个demo学会css css系列教程1-选择器全解 css系列教程2-样式操作全解 css选择器全解: css选择器包括:基本选择器.属性选择器.伪类选择器.伪元 ...
- jquery系列教程2-style样式操作全解
全栈工程师开发手册 (作者:栾鹏) 快捷链接: jquery系列教程1-选择器全解 jquery系列教程2-style样式操作全解 jquery系列教程3-DOM操作全解 jquery系列教程4-事件 ...
- jquery系列教程6-ajax的应用全解
点击打开: jquery系列教程1-选择器全解 jquery系列教程2-style样式操作全解 jquery系列教程3-DOM操作全解 jquery系列教程4-事件操作全解 jquery系列教程5-动 ...
- jquery系列教程5-动画操作全解
点击打开: jquery系列教程1-选择器全解 jquery系列教程2-style样式操作全解 jquery系列教程3-DOM操作全解 jquery系列教程4-事件操作全解 jquery系列教程5-动 ...
- jquery系列教程4-事件操作全解
点击打开: jquery系列教程1-选择器全解 jquery系列教程2-style样式操作全解 jquery系列教程3-DOM操作全解 jquery系列教程4-事件操作全解 jquery系列教程5-动 ...
最新文章
- 使用×××版软件中常见的一些错误代码
- 市场营销部门OKR案例
- SVM讲的成体系的,自圆其说较好的一篇,上午没读完,KKT第二部分不等式有疑问没弄懂,复制后继续读完
- mysql表分区和表空间_mysql分表和分区的区别浅析
- javabean总结
- pid控制从入门到精通pdf_网络工程师从入门到精通通俗易懂系列 | 访问控制列表ACL原来还可以这样理解,果断收藏!...
- linux phpunit 安装,PHPUnit安装教程
- 【开发者成长】Vue.js 中有哪些性能陷阱
- 阿里云助力宁波市教育局“甬上云校”停课不停学
- xib中UIScrollView固定底部内容
- 消息队列面试 - 为什么使用消息队列,消息队列有什么优点和缺点?
- Q128:PBRT-V3,“体渲染”积分器的“传播方程”(15.1章节)
- 无法访问 函数不正确
- 语音输入是计算机在哪个领域的应用,语音识别技术是什么_语音识别技术应用领域介绍...
- 智慧楼宇篇 6 —— 室内定位技术(五) - 室内定位技术总结
- python代码实现卷积示意图快速制作
- 回文数—简单方法(C语言)
- vulnhub之 BLUEMOON: 2021
- TERRA-COTTA 之TCCONFIG配置问题 回顾
- 佐罗zorro软件安装教程及一键新机使用方法详细简介
热门文章
- 学python有前途吗-Python全栈开发有前景吗,是否值得学习?
- 【Spring笔记】Spring创建hello程序
- 输入三角形的三c语言程序,输入三角形的三边 a,b,c,计算三角形的面积的公式是 C++...
- python爬取天气预报并发送短信_Python3爬虫教程之利用Python实现发送天气预报邮件...
- Linux下MySQL起动报错The server quit without updating PID file
- 大字段 CLOB/BOLB与String互转
- DB2 SQL Error: SQLCODE=-668, SQLSTATE=57016
- Java使用IntelliJ IDEA创建控制台程序并通过JDBC连接到数据库
- VBScript脚本
- php mysql表单源码_PHP表单数据写入MySQL数据库的代码