一 代码区结构

  • def on_start(self)是脚本的入口点。单击run仪表板上的按钮时将调用它。
  • self.crawl(url, callback=self.index_page)*是这里最重要的API。它将添加一个要爬网的新任务。大多数选项将通过self.crawl参数进行spicified 。
  • def index_page(self, response)得到一个Response*对象。response.doc*是一个pyquery对象,它具有类似jQuery的API来选择要提取的元素。
  • def detail_page(self, response)返回一个dict对象作为结果。结果将resultdb默认捕获。您可以覆盖on_result(self, result)方法来自行管理结果。

您可能想知道的更多内容:

  • @every(minutes=24*60, seconds=0)*是告诉调度程序on_start应该每天调用方法的帮助程序。
  • @config(age=10 * 24 * 60 * 60)*指定页面类型的默认age参数(when )。参数*可以通过(最高优先级)和(最低优先级)指定。self.crawlindex_pagecallback=self.index_pageageself.crawl(url, age=10*24*60*60)crawl_config
  • age=10 * 24 * 60 * 60* tell scheduler会在10天内抓取该请求。pyspider默认情况下不会抓取同一个URL两次(永远丢弃),即使你修改了代码,对于第一次运行项目并修改它并第二次运行它的初学者来说很常见,它不会再次爬行(阅读itag解决方案)
  • @config(priority=2)*标记应首先抓取详细信息页面。

二 配置启动文件

新建 '''db.json''' 配置文件,文件中

{"taskdb": "mysql+taskdb://username:password@host:port/taskdb","projectdb": "mysql+projectdb://username:password@host:port/projectdb","resultdb": "mysql+resultdb://username:password@host:port/resultdb","message_queue": "amqp://username:password@host:port/%2F","webui": {"username": "some_name","password": "some_passwd","need-auth": true}
}

启动配置

pyspider  --config db.json all

三 使用PhantomJS(自动执行js文件加载页面)

  当连接PhantomJS的pyspider时,您可以通过添加参数fetch_type='js'来启用此功能self.crawl.

class Handler(BaseHandler):def on_start(self):self.crawl('http://www.twitch.tv/directory/game/Dota%202', fetch_type='js', callback=self.index_page)

  页面执行js代码

滑动滑动条,加载整个数据

class Handler(BaseHandler):def on_start(self):self.crawl('http://www.pinterest.com/categories/popular/',fetch_type='js', js_script="""function() {window.scrollTo(0,document.body.scrollHeight);}""", callback=self.index_page)

四 pypider 爬虫结构

调度器:

  调度程序从处理器的newtask_queue接收任务。确定任务是新任务还是需要重新爬网。根据优先级对任务进行排序,并将其提供给具有流量控制的提取器(令牌桶算法)。处理定期任务,丢失任务和失败的任务,然后重试。

提取器

  Fetcher负责获取网页,然后将结果发送给处理器。对于灵活的,fetcher支持数据URI和由JavaScript呈现的页面(通过phantomjs)。可以通过API通过脚本控制获取方法,标头,cookie,代理,etag等。

处理器

  处理器负责运行用户编写的脚本来解析和提取信息。您的脚本在无限制的环境中运行。虽然我们有各种工具(如PyQuery)可供您提取信息和链接,但您可以使用任何想要处理响应的内容。

执行流程

  • on_start当您按下Run WebUI上的按钮时,每个脚本都有一个名为callback的回调。将新任务on_start作为项目条目提交给Scheduler。
  • Scheduler将此on_start任务调度为数据URI作为Fetcher的常规任务。
  • Fetcher发出请求并对其做出响应(对于数据URI,这是一个虚假的请求和响应,但与其他正常任务没有区别),然后提供给处理器。
  • 处理器调用该on_start方法并生成一些新的URL以进行爬网。处理器向Scheduler发送一条消息,告知此任务已完成,新任务通过消息队列发送到Scheduler(on_start在大多数情况下,这里没有结果。如果有结果,则处理器将它们发送给result_queue)。
  • 调度程序接收新任务,在数据库中查找,确定任务是新的还是需要重新爬网,如果是,则将它们放入任务队列。按顺序发送任务。
  • 这个过程重复(从第3步开始)并且在WWW死亡之前不会停止;-)。调度程序将检查定期任务以爬网最新数据。

五 self.crawl API

@config(age=10 * 24 * 60 * 60) 任务有效期

priority=1  优先级

exetime=time.time()+30*60 任务执行时间

auto_recrawl = True 自动爬取

params={'a': 123, 'b': 'c'}   GET请求参数

method='POST'  请求方式 默认为GET

data={'a': 123, 'b': 'c'} post方式提交数据

{field: {filename: 'content'}}  分段执行文件

User-Agent ='Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/72.0.3626.119 Safari/537.36 '

cookies=' '

timeout=' '

allow_redirects=True  默认为false

fetch_type='js' 启用JavaScript fetcher

js_script=''' function() { window.scrollTo(0,document.body.scrollHeight); return 123; } '''  在页面加载之前或之后运行的JavaScript

load_images  默认False

使用示例

def on_start(self):self.crawl('http://www.example.org/', callback=self.callback,age=5*60*60, auto_recrawl=True)

#get请求携带参数
def on_start(self):self.crawl('http://httpbin.org/get', callback=self.callback,params={'a': 123, 'b': 'c'})self.crawl('http://httpbin.org/get?a=123&b=c', callback=self.callback)

#post请求携带参数
def on_start(self):self.crawl('http://httpbin.org/post', callback=self.callback,method='POST', data={'a': 123, 'b': 'c'})

#加在页面加载之前或之后运行的JavaScript
def on_start(self):self.crawl('http://www.example.org/', callback=self.callback,fetch_type='js', js_script='''function() {window.scrollTo(0,document.body.scrollHeight);return 123;}''')

五 全局请求参数

class Handler(BaseHandler):crawl_config = {'headers': {'User-Agent': 'GoogleBot',}'proxy': 'localhost:8080'}...

六 response 对象

Response.url 返回最终的url

Response.text返回最终的文本

Response.content 响应内容,以字节为单位。

Response.doc

一个PyQuery响应的内容的对象。链接默认为绝对链接。

请参阅PyQuery的文档:https://pythonhosted.org/pyquery/

Response.etree 一个LXML响应的内容的对象。

Response.json 响应的JSON编码内容(如果有)。

转载于:https://www.cnblogs.com/angle6-liu/p/10690163.html

pyspider 文档介绍相关推荐

  1. 本篇文档介绍如何手动在ECS实例上部署Java web项目

    本篇文档介绍如何手动在ECS实例上部署Java web项目.适用于刚开始使用阿里云进行建站的个人用户. 项目配置 { .section} 本篇教程在示例步骤中使用了以下版本的软件.操作时,请您以实际软 ...

  2. 1、ABP 文档介绍

    ABP 文档介绍 Quick Start Getting Started Architecture Infrastructure ABP是一个开源且文档友好的应用程序框架.ABP不仅仅是一个框架,它还 ...

  3. 标准的VESA文档介绍

    标准的VESA文档介绍    来源:中国自学编程网   发布日期:2007-05-12      概述:      该标准提供一系列应用程序能够使用的函数集.      1.获取某一指定超级VGA设备 ...

  4. Linux SDIO WIFI Marvell8801/Marvell88w8801(一) --- 代码及文档介绍

    代码工程的GITHUB连接:点进进入GITHUB仓库 https://github.com/sj15712795029/stm32f1_marvell88w8801_marvell8801_wifi ...

  5. 【2】PRD文档介绍

    首先,我想说,题主是一个不严肃的人(严肃脸),所以每次干个啥事之前我都喜欢唠唠嗑,说说废话,沟通沟通感情,曾经以为自己将会成为一个幻想中的产品经理那般大展身手,作为非计算机专业出身的应届生,后来才发现 ...

  6. CARLA传感器详细文档介绍+python实例(持续更新ing)

    CARLA中有两种类型的传感器:每帧都工作的传感器(相机,点云等)和只有特定环境下才接收数据的传感器(触发检测).都属于carla.Sensor类,从carla.BlueprintLibrary类中实 ...

  7. PRD(产品需求说明文档)与MRD(市场需求文档)介绍

    文章目录 目录 一.PRD(产品需求文档) 1.确定PRD文档格式 2.确定项目概述 3.项目功能描述 4.产品经理的思维体现在这几个方面: 5.大厂PRD常见规范: 6.PRD的最终目的: 二.MR ...

  8. Hi3798M V200 SDK文档介绍

    目录 下载SDK并解压 解压后主要的文件夹 下载SDK并解压 步骤1:下载Hi3798M V200 SDK. 大家如果有下载路径可以直接下载,如果没有的话可以使用我这个路径. 链接:https://p ...

  9. 百度分享插件实现方法以及详细文档介绍

    百度分享插件使用方法:复制div到页面对应位置即可 <div class="bdsharebuttonbox"><a href="#" cla ...

  10. ROS launch文档介绍

    本文章转自:https://charlyhuangrostutorial.wordpress.com/2015/08/12/20/ 前面已经提过关于launch 档的角色,很类似bash 档,基本上就 ...

最新文章

  1. nginx 集群部署_入门级实操教程!从概念到部署,全方位了解K8S Ingress!
  2. html左右阴影效果图,css实现横向菜单带阴影效果(不用滤镜实现)
  3. GMM_example(3)
  4. tkinter笔记:画布canvas
  5. 将tensor张量转换成图片格式并保存
  6. ubuntu12.04安装libgl1-mesa-glx:i386问题解决办法
  7. thinkphp中__construct与_initialize()的区别
  8. 有关C# 8.0、.NET Framework 4.8与NET Standard 2.1的一个说明
  9. html 表格 左侧表头,左侧是表头的JS表格控件(自写,网上没有的)
  10. 利用计算机卸载,电脑使用痕迹彻底清理工具(无影无踪WYWZ)
  11. Magento教程 6:商店设定与参数
  12. windows下支持H265的rtmp ffplay播放器 ffmpeg的编译
  13. 《中文版PHOTOSHOP.CS3完全自学教程》李金明.李金荣.彩色扫描版.pdf
  14. JAVA 如何反编译JAR文件
  15. 使用H-lua框架制作魔兽争霸地图(8-物编-物品绑定技能篇1)
  16. DBLE分库分表中间件
  17. 【用html做个人简历的网页(初级)】
  18. cesium本地部署引入离线地图
  19. QT5写一个复数计算器(附源码)
  20. python数据分析项目之超市零售分析

热门文章

  1. QQ号1941663132是一个诈骗
  2. Kubernetes运维之使用Prometheus全方位监控K8S
  3. ϵ-greedy Policies
  4. Web站点的欢迎页面 web.xml - welcome-file-list
  5. 区块链学习——HyperLedger-Fabric v0.6环境搭建详细过程
  6. linux服务器cpu/负载占用率100%怎么办?
  7. 商汤AR开发之旅(1)-- 关于SenseAR SDK
  8. python中forward的参数_pytorch forward两个参数实例
  9. 自下而上构建知识图谱全过程
  10. powereshell判断目录如果存在pdf文件则打包文件发送到指定邮箱