pyspider 文档介绍
一 代码区结构
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.crawl
index_page
callback=self.index_page
age
self.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 文档介绍相关推荐
- 本篇文档介绍如何手动在ECS实例上部署Java web项目
本篇文档介绍如何手动在ECS实例上部署Java web项目.适用于刚开始使用阿里云进行建站的个人用户. 项目配置 { .section} 本篇教程在示例步骤中使用了以下版本的软件.操作时,请您以实际软 ...
- 1、ABP 文档介绍
ABP 文档介绍 Quick Start Getting Started Architecture Infrastructure ABP是一个开源且文档友好的应用程序框架.ABP不仅仅是一个框架,它还 ...
- 标准的VESA文档介绍
标准的VESA文档介绍 来源:中国自学编程网 发布日期:2007-05-12 概述: 该标准提供一系列应用程序能够使用的函数集. 1.获取某一指定超级VGA设备 ...
- Linux SDIO WIFI Marvell8801/Marvell88w8801(一) --- 代码及文档介绍
代码工程的GITHUB连接:点进进入GITHUB仓库 https://github.com/sj15712795029/stm32f1_marvell88w8801_marvell8801_wifi ...
- 【2】PRD文档介绍
首先,我想说,题主是一个不严肃的人(严肃脸),所以每次干个啥事之前我都喜欢唠唠嗑,说说废话,沟通沟通感情,曾经以为自己将会成为一个幻想中的产品经理那般大展身手,作为非计算机专业出身的应届生,后来才发现 ...
- CARLA传感器详细文档介绍+python实例(持续更新ing)
CARLA中有两种类型的传感器:每帧都工作的传感器(相机,点云等)和只有特定环境下才接收数据的传感器(触发检测).都属于carla.Sensor类,从carla.BlueprintLibrary类中实 ...
- PRD(产品需求说明文档)与MRD(市场需求文档)介绍
文章目录 目录 一.PRD(产品需求文档) 1.确定PRD文档格式 2.确定项目概述 3.项目功能描述 4.产品经理的思维体现在这几个方面: 5.大厂PRD常见规范: 6.PRD的最终目的: 二.MR ...
- Hi3798M V200 SDK文档介绍
目录 下载SDK并解压 解压后主要的文件夹 下载SDK并解压 步骤1:下载Hi3798M V200 SDK. 大家如果有下载路径可以直接下载,如果没有的话可以使用我这个路径. 链接:https://p ...
- 百度分享插件实现方法以及详细文档介绍
百度分享插件使用方法:复制div到页面对应位置即可 <div class="bdsharebuttonbox"><a href="#" cla ...
- ROS launch文档介绍
本文章转自:https://charlyhuangrostutorial.wordpress.com/2015/08/12/20/ 前面已经提过关于launch 档的角色,很类似bash 档,基本上就 ...
最新文章
- nginx 集群部署_入门级实操教程!从概念到部署,全方位了解K8S Ingress!
- html左右阴影效果图,css实现横向菜单带阴影效果(不用滤镜实现)
- GMM_example(3)
- tkinter笔记:画布canvas
- 将tensor张量转换成图片格式并保存
- ubuntu12.04安装libgl1-mesa-glx:i386问题解决办法
- thinkphp中__construct与_initialize()的区别
- 有关C# 8.0、.NET Framework 4.8与NET Standard 2.1的一个说明
- html 表格 左侧表头,左侧是表头的JS表格控件(自写,网上没有的)
- 利用计算机卸载,电脑使用痕迹彻底清理工具(无影无踪WYWZ)
- Magento教程 6:商店设定与参数
- windows下支持H265的rtmp ffplay播放器 ffmpeg的编译
- 《中文版PHOTOSHOP.CS3完全自学教程》李金明.李金荣.彩色扫描版.pdf
- JAVA 如何反编译JAR文件
- 使用H-lua框架制作魔兽争霸地图(8-物编-物品绑定技能篇1)
- DBLE分库分表中间件
- 【用html做个人简历的网页(初级)】
- cesium本地部署引入离线地图
- QT5写一个复数计算器(附源码)
- python数据分析项目之超市零售分析
热门文章
- QQ号1941663132是一个诈骗
- Kubernetes运维之使用Prometheus全方位监控K8S
- ϵ-greedy Policies
- Web站点的欢迎页面 web.xml - welcome-file-list
- 区块链学习——HyperLedger-Fabric v0.6环境搭建详细过程
- linux服务器cpu/负载占用率100%怎么办?
- 商汤AR开发之旅(1)-- 关于SenseAR SDK
- python中forward的参数_pytorch forward两个参数实例
- 自下而上构建知识图谱全过程
- powereshell判断目录如果存在pdf文件则打包文件发送到指定邮箱