全栈工程师开发手册 (作者:栾鹏)
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框架应用全解相关推荐

  1. python网络爬虫系列教程——Scrapy框架应用全解

    全栈工程师开发手册 (作者:栾鹏) python教程全解 安装 在cmd中输入 Scrapy的安装依赖wheel.twiste.lxml包.所以先通过pip install wheel安装wheel库 ...

  2. jquery系列教程1-选择器全解

    全栈工程师开发手册 (作者:栾鹏) 快捷链接: jquery系列教程1-选择器全解 jquery系列教程2-style样式操作全解 jquery系列教程3-DOM操作全解 jquery系列教程4-事件 ...

  3. js系列教程9-表单元素全解

    全栈工程师开发手册 (作者:栾鹏) 快捷链接: js系列教程1-数组操作全解 js系列教程2-对象和属性全解 js系列教程3-字符串和正则全解 js系列教程4-函数与参数全解 js系列教程5-容器和算 ...

  4. js系列教程1-数组操作全解

    全栈工程师开发手册 (作者:栾鹏) 快捷链接: js系列教程1-数组操作全解 js系列教程2-对象和属性全解 js系列教程3-字符串和正则全解 js系列教程4-函数与参数全解 js系列教程5-容器和算 ...

  5. css系列教程1-选择器全解

    全栈工程师开发手册 (作者:栾鹏) 一个demo学会css css系列教程1-选择器全解 css系列教程2-样式操作全解 css选择器全解: css选择器包括:基本选择器.属性选择器.伪类选择器.伪元 ...

  6. jquery系列教程2-style样式操作全解

    全栈工程师开发手册 (作者:栾鹏) 快捷链接: jquery系列教程1-选择器全解 jquery系列教程2-style样式操作全解 jquery系列教程3-DOM操作全解 jquery系列教程4-事件 ...

  7. jquery系列教程6-ajax的应用全解

    点击打开: jquery系列教程1-选择器全解 jquery系列教程2-style样式操作全解 jquery系列教程3-DOM操作全解 jquery系列教程4-事件操作全解 jquery系列教程5-动 ...

  8. jquery系列教程5-动画操作全解

    点击打开: jquery系列教程1-选择器全解 jquery系列教程2-style样式操作全解 jquery系列教程3-DOM操作全解 jquery系列教程4-事件操作全解 jquery系列教程5-动 ...

  9. jquery系列教程4-事件操作全解

    点击打开: jquery系列教程1-选择器全解 jquery系列教程2-style样式操作全解 jquery系列教程3-DOM操作全解 jquery系列教程4-事件操作全解 jquery系列教程5-动 ...

最新文章

  1. 使用×××版软件中常见的一些错误代码
  2. 市场营销部门OKR案例
  3. SVM讲的成体系的,自圆其说较好的一篇,上午没读完,KKT第二部分不等式有疑问没弄懂,复制后继续读完
  4. mysql表分区和表空间_mysql分表和分区的区别浅析
  5. javabean总结
  6. pid控制从入门到精通pdf_网络工程师从入门到精通通俗易懂系列 | 访问控制列表ACL原来还可以这样理解,果断收藏!...
  7. linux phpunit 安装,PHPUnit安装教程
  8. 【开发者成长】Vue.js 中有哪些性能陷阱
  9. 阿里云助力宁波市教育局“甬上云校”停课不停学
  10. xib中UIScrollView固定底部内容
  11. 消息队列面试 - 为什么使用消息队列,消息队列有什么优点和缺点?
  12. Q128:PBRT-V3,“体渲染”积分器的“传播方程”(15.1章节)
  13. 无法访问 函数不正确
  14. 语音输入是计算机在哪个领域的应用,语音识别技术是什么_语音识别技术应用领域介绍...
  15. 智慧楼宇篇 6 —— 室内定位技术(五) - 室内定位技术总结
  16. python代码实现卷积示意图快速制作
  17. 回文数—简单方法(C语言)
  18. vulnhub之 BLUEMOON: 2021
  19. TERRA-COTTA 之TCCONFIG配置问题 回顾
  20. 佐罗zorro软件安装教程及一键新机使用方法详细简介

热门文章

  1. 学python有前途吗-Python全栈开发有前景吗,是否值得学习?
  2. 【Spring笔记】Spring创建hello程序
  3. 输入三角形的三c语言程序,输入三角形的三边 a,b,c,计算三角形的面积的公式是 C++...
  4. python爬取天气预报并发送短信_Python3爬虫教程之利用Python实现发送天气预报邮件...
  5. Linux下MySQL起动报错The server quit without updating PID file
  6. 大字段 CLOB/BOLB与String互转
  7. DB2 SQL Error: SQLCODE=-668, SQLSTATE=57016
  8. Java使用IntelliJ IDEA创建控制台程序并通过JDBC连接到数据库
  9. VBScript脚本
  10. php mysql表单源码_PHP表单数据写入MySQL数据库的代码