pyspider

目录

pyspider简单介绍

pyspider的使用

实战


pyspider简单介绍

  一个国人编写的强大的网络爬虫系统并带有强大的WebUI。采用Python语言编写,分布式架构,支持多种数据库后端,

强大的WebUI支持脚本编辑器,任务监视器,项目管理器以及结果查看器

官方文档: http://docs.pyspider.org/en/latest/

开源地址: http://github.com/binux/pyspider

中文文档: http://www.pyspider.cn/

pyspider框架的特性

  • python脚本控制,可以使用用任何你喜欢的html解析包(内置pyquery)
  • WEB界面编写调试脚本,启停脚本,监控执行状态,查看活动内容,获取结果产出
  • 数据库存储支持MySQl,MongoDB,Redis,SQLite,Elasticsearch,PostgreSQL及SQLAlchemy
  • 队列服务支持RabbitMQ,Beanstalk,Redis和Kombu
  • 支持抓取JavaScript的页面
  • 组件可替换,支持单机/分布式部署,支持Docker的部署
  • 强大的调度控制,支持超时重爬及优先级设置
  • 支持python2&3

pyspider的安装

pip install pyspider
  • 安装完成后运行,在cmd窗口输入pyspider

pyspider的使用:

  • 在浏览器中输入最后一行的IP和端口号。
  • 在web控制台点create按钮新建项目。

  • 保存后打开代码编辑器(代码编辑器默认有简单的示例代码)

  • 右侧就是代码编辑器,,以后可以直接在这里添加和修改代码。代码如下:

代码分析:

  • def on_start(self)方法是入口代码。当在web控制台点击run按钮时会执行此方法。
  • self.crawl(url, callback=self.index_page)这个方法是调用API生成一个新的爬虫任务,这个任务被添加到待爬取队列
  • def index_page(self.response)这个方法获取一个response对象。response.doc是pyquery对象的一个扩展方法。pyquery是一个类似于jquery的对象选择器。
  • def detail_page(self, response)返回一个结果即对象。这个结果默认会被添加到resultdb数据库(如果启动时没有指定数据库默认调用sqlite数据库)。也可以重写on_result(self,  result) 方法来指定保存位置。

  • 当完成脚本编写,调试无误后,请先保存脚本,然后返回控制台首页
  • 直接点击项目状态status那栏,把状态由TTODO改成debug或running
  • 最后点击项目最右边那个RUN按钮启动项目

  • 当progress那栏有数据显示说明启动成功。就可以点击右侧的result查看结果了

技巧:

  • pyspider访问https协议得网站是,会提示证书问题,需要设置validate_cert = False,屏蔽证书验证
  • 预览网页得时候,可能会出现空白页面,是因为pysipder不加载JavaScript代码,用fetch_type='js',pyspider会自动调用phantomjs来渲染网页。前提是电脑上已经安装了phantomls.exe插件
  • 当需要删除项目时,将status状态改成STOP,再将group写上delete,pyspider默认在STOP的delete状态下保存24小时后删除

enable css selector helper可以在点击了web 的网页预览下,获取网页的css选择器

点击图片箭头的按键,就会生成对应css选择器在光标所在的位置处

  • follows是根据代码请求所跟进的url链接,点击实现网页跳转
  • 当代码调试出错的时候,要回到最初的首页开始重新调试

实战

爬取链家网的信息:

#!/usr/bin/env python
# -*- encoding: utf-8 -*-
# Created on 2018-11-02 10:54:11
# Project: ddd from pyspider.libs.base_handler import * class Handler(BaseHandler):
crawl_config = {
} @every(minutes=24 * 60) # 设置爬取的时间间隔
def on_start(self):
self.crawl('https://cs.lianjia.com/ershoufang/', callback=self.index_page, validate_cert = False) # 参数三是设置不验证ssl证书 @config(age=10 * 24 * 60 * 60) # 过期时间
def index_page(self, response):
for each in response.doc('.title > a').items():
self.crawl(each.attr.href, callback=self.detail_page, validate_cert = False) @config(priority=2) # 优先级 数大极高
def detail_page(self, response):
yield {
'title': response.doc('.main').text(),
'special': response.doc('.tags > .content').text(),
'price': response.doc('.price > .total').text(),
'sell point': response.doc('.baseattribute > .content').text()
}

结果:分别爬取了卖房的标题(title),特点(special),卖点(sell point)和价格(price),因为字典保存,所以无序

Pyspider爬虫简单框架——链家网的更多相关文章

  1. python链家网高并发异步爬虫asyncio+aiohttp+aiomysql异步存入数据

    python链家网二手房异步IO爬虫,使用asyncio.aiohttp和aiomysql 很多小伙伴初学python时都会学习到爬虫,刚入门时会使用requests.urllib这些同步的库进行单线 ...

  2. python链家网高并发异步爬虫and异步存入数据

    python链家网二手房异步IO爬虫,使用asyncio.aiohttp和aiomysql 很多小伙伴初学python时都会学习到爬虫,刚入门时会使用requests.urllib这些同步的库进行单线 ...

  3. 分享系列--面试JAVA架构师--链家网

    本月7日去了一趟链家网面试,虽然没有面上,但仍有不少收获,在此做个简单的分享,当然了主要是分享给自己,让大家见笑了.因为这次是第一次面试JAVA网站架构师相关的职位,还是有些心虚的,毕竟之前大部分时间 ...

  4. TOP100summit:【分享实录】链家网大数据平台体系构建历程

    本篇文章内容来自2016年TOP100summit 链家网大数据部资深研发架构师李小龙的案例分享. 编辑:Cynthia 李小龙:链家网大数据部资深研发架构师,负责大数据工具平台化相关的工作.专注于数 ...

  5. Python的scrapy之爬取链家网房价信息并保存到本地

    因为有在北京租房的打算,于是上网浏览了一下链家网站的房价,想将他们爬取下来,并保存到本地. 先看链家网的源码..房价信息 都保存在 ul 下的li 里面 ​ 爬虫结构: ​ 其中封装了一个数据库处理模 ...

  6. Scrapy实战篇(一)之爬取链家网成交房源数据(上)

    今天,我们就以链家网南京地区为例,来学习爬取链家网的成交房源数据. 这里推荐使用火狐浏览器,并且安装firebug和firepath两款插件,你会发现,这两款插件会给我们后续的数据提取带来很大的方便. ...

  7. 使用python抓取并分析数据—链家网(requests+BeautifulSoup)(转)

    本篇文章是使用python抓取数据的第一篇,使用requests+BeautifulSoup的方法对页面进行抓取和数据提取.通过使用requests库对链家网二手房列表页进行抓取,通过Beautifu ...

  8. Scrapy实战篇(九)之爬取链家网天津租房数据

    以后有可能会在天津租房子,所以想将链家网上面天津的租房数据抓下来,以供分析使用. 思路: 1.以初始链接https://tj.lianjia.com/zufang/rt200600000001/?sh ...

  9. python - 爬虫入门练习 爬取链家网二手房信息

    import requests from bs4 import BeautifulSoup import sqlite3 conn = sqlite3.connect("test.db&qu ...

随机推荐

  1. 硬盘-RAID 5组建

    没发正文之前本人先声明一下----本文是转载 这篇文章简直是太精彩了,呵呵 ,实在是忍不住了,一定要贴出来,让大家分享! 原作者:唐华 责任编辑:xiexiaojin 我们生活在一个历史记录在硬盘上的 ...

  2. win7下远程登录ubuntu mysql

    网络上找了很久的一个办法,不然老是远程访问不了linux mysql. 原先一直用root登录,进不了,新建一个root1倒是可以了. 安装好mysql后,按以下步骤: 1.将vim /etc/mys ...

  3. hdu 6198(矩阵快速幂)

    number number number Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Oth ...

  4. 分类(category)是门学问

    分类的精细程度表现了人类的文明程度. 1. 学科分类 cybernetics:控制论:

  5. 洛谷P2516 [HAOI2010]最长公共子序列

    题目描述 字符序列的子序列是指从给定字符序列中随意地(不一定连续)去掉若干个字符(可能一个也不去掉)后所形成的字符序列.令给定的字符序列X="x0,x1,-,xm-1",序列Y=& ...

  6. Rank of Tetris(topsort)

    http://acm.hdu.edu.cn/showproblem.php?pid=1811 #include <stdio.h> #include <string.h> #i ...

  7. codevs3287货车运输(最小生成树+LCA)

    3287 货车运输 2013年NOIP全国联赛提高组  时间限制: 1 s  空间限制: 128000 KB  题目等级 : 钻石 Diamond     题目描述 Description A 国有 ...

  8. ACM_最值差(线段树区间查询最值)

    最值差 Time Limit: 2000/1000ms (Java/Others) Problem Description: 给定N个数A1A2A3A4...AN.求任意区间Ai到Aj中的最大数与最小 ...

  9. mysql数据的操作

    一.插入数据记录 1.插入完整数据记录 INSERT INTO table_name VALUES(value1,value2......valuen); 2.插入数据记录的一部分 INSERT IN ...

  10. C#图片辅助类,形成缩略图

    完善一下别人的方法,成自己好用的工具 using System.Drawing; using System.Drawing.Imaging; namespace GXNUQzzx.Tools.Util ...