pyspider_初始
一、简介
1.1、简介
pyspider 是一个使用python编写,并且拥有强大功能web界面的爬虫框架。
- 强大的web界面可进行脚本编辑,任务监控,项目管理,结果查看等功能。 
- pyspider支持多种数据库进行数据存储。MySQL, MongoDB, Redis, SQLite, Elasticsearch...(保存数据,默认使用sqlit3) 
- 并且支持多种消息队列。RabbitMQ, Beanstalk, Redis...(用于调度器进行各个组件的协调工作,数据传递等。) 
- 通过装饰器,配置任务优先级,爬虫什么时侯再重新爬取,任务失败再从新自动抓取... 
- 可使用phantomjs,只需要添加参数,就可对动态页面进行爬取.. 
- 支持python2,python3. 
1.2、框架结构

通过上面的图,我们可以看出pyspider由四部分组成
- Scheduler:任务管理,多个模块之间的协调管理控制。
- Fetcher:发送请求,获取响应,这里还可以调用phantomjs。
- Processor:对返回的数据进行提取,保存等。
- webui/monitor:可视化的方式实现脚本编写,任务管理,监控,调度,结果展示。
1.3、pyspider工作流程:
def on_start(self):
    self.crawl('https://travel.qunar.com/?from=header', callback=self.index_page)
当我们启动一个pyspider项目时,默认会调用如上方法。该方法会将第一个任务加入newtask_queue(默认使用python多进程中的队列。调度器(Scheduler)会从任务队列(newtask_queue)中拿出任务交给抓取器(Fetcher),进行页面请求。将数据发送给处理器(Processor)进行数据提取,如果有继续需要请求的url,请再次调用self.crawl方法,则该任务会被加入任务队列,等待调度器进行调度
二、安装
pip install pyspider
pip uninstall wsgidav #直接安装pyspider 默认这个库版本为3.+,会报错,要使用 2.+版本。
pip install wsgidav==2.4.1
2.1、启动命令:
pyspider #在哪里启动pyspider,数据文件就会位于哪里,可以通过配置文件进行修改。
2.2、访问界面
http://127.0.0.1:5000/
2.3、仪表盘各项功能简介
访问上面的url,我们可以进入到pyspider的管理界面

2.4、重要
- 项目状态有如下分类 - TODO一个项目被创建,等待编写脚本执行
- STOP停止一个运行的项目
- CHECKING,如果我们需要对一个运行中的项目,进行修改,则应设置为该状态。
- DEBUG/- RUNNING,我们想执行一个项目,则需要将状态设置为这两个状态其中之一。然后再点击右方的run按钮。
 
- 当组名设置为delete,项目状态为STOP时,24小时爬虫项目会被删除。 
- 我们可以点击右方的Results查看抓取数据结果,抓取的数据默认保存在pyspider启动目录下/data/result.db 
- rate 代表每一秒发送的请求数,默认1,代表每一秒发送一个请求,数值越大,速度越快。 
- burst 当所有任务被执行完成后,处理数据时又出现新的任务时,此时会默认同时执行3个,但是第四个请求需要等待1秒,也就是rate的值。 
三、糗事百科推荐笑话爬取
1、创建项目

2、常用工具

3、代码
#!/usr/bin/env python
# -*- encoding: utf-8 -*-
# Created on 2020-04-09 17:40:39
# Project: qiushibaike
from pyspider.libs.base_handler import *
headers={
        'user_agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.163 Safari/537.36',
        }
class Handler(BaseHandler):
    crawl_config = {
        'validate_cert':False,
        'headers':headers
    }
    @every(minutes=24 * 60)
    def on_start(self):
        self.crawl('https://www.qiushibaike.com/', callback=self.index_page)
    @config(age=10 * 24 * 60 * 60)
    def index_page(self, response):
        for each in response.doc('a.recmd-content').items():
            self.crawl(each.attr.href, callback=self.detail_page)
        flag=response.etree.xpath('//span[contains(text(),"下一页")]')
        print(flag)
        if flag:
            next_url=response.doc('.pagination>li:last-child>a').attr("href")
            print(next_url)
            self.crawl(next_url, callback=self.index_page)
    @config(priority=2)
    def detail_page(self, response):
        item={
            "url": response.url,
            "title": response.doc('h1.article-title').text(),
            "content":response.etree.xpath('string(//div[@class="content"])'),
            "video_source":response.doc('#article-video >source').attr("src"),
            "img_urls":response.etree.xpath('//div[@class="thumb"]//img/@src')
        }
        return item
4、执行

5、等待一会,就可以查看到数据,可直接下载json,或者csv格式的数据。

pyspider_初始的更多相关文章
- 2DToolkit官方文档中文版打地鼠教程(一):初始设置
		这是2DToolkit官方文档中 Whack a Mole 打地鼠教程的译文,为了减少文中过多重复操作的翻译,以及一些无必要的句子,这里我假设你有Unity的基础知识(例如了解如何新建Sprite等) ... 
- CSharpGL(38)带初始数据创建Vertex Buffer Object的情形汇总
		CSharpGL(38)带初始数据创建Vertex Buffer Object的情形汇总 开始 总的来说,OpenGL应用开发者会遇到为如下三种数据创建Vertex Buffer Object的情形: ... 
- ArrayList、Vector、HashMap、HashSet的默认初始容量、加载因子、扩容增量
		当底层实现涉及到扩容时,容器或重新分配一段更大的连续内存(如果是离散分配则不需要重新分配,离散分配都是插入新元素时动态分配内存),要将容器原来的数据全部复制到新的内存上,这无疑使效率大大降低. 加载因 ... 
- linux系统下使用xampp 丢失mysql root密码【xampp的初始密码为空】
		如果在ubuntu 下面 使用xampp这个集成开发环境,却忘记mysql密码. 注:刚安装好的xampp的Mysql初始密码是空... 找回密码的步骤如下: 1.停止mysql服务器 sudo /o ... 
- python基础之初始python
		初始python之基础一 一.Python 介绍 1.python的创始人为吉多·范罗苏姆(Guido van Rossum).1989年的圣诞节期间,吉多·范罗苏姆为了在阿姆斯特丹打发时间,决心开发 ... 
- openfire 初始密码
		openfire 初始密码 mssql2014 进入数据库,找到 ofUser 表 ,将密码字段对应的密文替换为下面的内容,则密码就是 admin ecbd03623cd819c48718db1b27 ... 
- Bash 什么时候会给 HOME 赋初始值
		今天无意发现下面这个表现: $ env -i bash -c cd bash: line 0: cd: HOME not set $ env -i bash -c 'echo $HOME' 这表明了 ... 
- Holt-Winters原理和初始值的确定
		关于模型 (来自以下PPT,从第4页开始) 关于初始值: 以下文档给出了三个模型的初始值计算的思路. 大致思路如下,建立一个p阶移动平均模型,估计出参数即为初始值,具体的根据三种不同的模型,有 ... 
- 关于int,integer初始值问题
随机推荐
- php不用第三个变量,交换两个数的值
			//字符串版本 结合使用substr,strlen两个方法实现 $a="a"; $b="b"; echo '交换前 $a:'.$a.',$b:'.$b.'< ... 
- 【沫沫金】使用Serv-U FTP服务,搭建文件服务器
			内网文件服务器安装Serv-U FTP 链接: https://pan.baidu.com/s/1G51D1enLqZCUhnprnjAITw 提取码: snah Java Web工程,引入 comm ... 
- 内存管理 malloc free 的实现
			libc 中提供非常好用的 malloc free 功能,如果自己实现一个,应该怎么做. 要实现 malloc free 需要有 可以分配内存使用的堆,和记录内存使用情况的链表. 如下图所示,堆从高 ... 
- scrapy mid中间件一般处理方法
			import user_agent import requests class UA_midd(object): def process_request(self,request,spider): r ... 
- Django中使用CORS实现跨域请求
			跨域请求:  请求url包含协议.网址.端口,任何一种不同都是跨域请求. 1.安装cors模块 pip install django-cors-headers2.添加应用 INSTALLED_ ... 
- WINDOWS上JDK安装与环境变量设置
			一.JDK安装 jdk版本:jdk1.8.0_144 下载链接:https://pan.baidu.com/s/1eS2bFhg 密码:e3q1 下载JDK后点击安装,可以根据需要修改JDK的安装目录 ... 
- Windows通过VNC连接并显示Linux桌面(Ubuntu16.04)
			目录 Linux中安装VNC服务 Linux中安装桌面环境 Windows中安装VNC Viewer Linux中安装VNC服务 sudo apt-get update sudo apt-get in ... 
- 后端程序员必备:书写高质量SQL的30条建议
			前言 本文将结合实例demo,阐述30条有关于优化SQL的建议,多数是实际开发中总结出来的,希望对大家有帮助. 1.查询SQL尽量不要使用select *,而是select具体字段. 反例子: sel ... 
- angular6 增加webpack配置 亲测可用
			核心 Angular Cli 6 禁用了webpack的自定义配置,官方似乎并未提供自定义配置webpack的方法. 在此之前,可以使用ng eject把默认的webpack提取到代码中,进行自定义. ... 
- oracle数据库表用序列实现主键自增长
			原理注意:序列和触发器必须建立在同一个用户名下否则运行出错1.建立数据表create table 表名( userid number(10) primary key, ... 
