python3异步协程爬虫,simpyder

Simpyder - Simple Python Spider

Simpyder - 轻量级协程Python爬虫

特点

轻量级:下载便利,依赖较少,使用简单。

协程:单线程,通过协程实现并发。

可定制:简单配置,适应各种爬取场合。

快速开始

下载

#使用pip3

pip3 installsimpyder --user

# 更新包

pip3 installsimpyder --upgrade

编码

用户只需要定义三个函数,实现三个模块:

链接获取

我们需要一个定义一个异步生成器,用于产生链接。

async def gen_url():

for each_id in range(100):

yield "https://www.biliob.com/api/video/{}".format(each_id)

链接解析

我们需要定义一个解析链接的函数。其中第一个参数是Response对象,也就是上述函数对应URL的访问结果。

该函数需要返回一个对象,作为处理结果。

注意,与普通函数不同,这是一个协程函数。需要在前面加上async。代表该函数是异步的。

async def parse(response):

return response.xpath('//meta[@name="title"]/@content')[0]

数据导出

上面函数的处理结果将在这个函数中统一被导出。下列例子为直接在控制台中打印导出结果。

保存需要IO操作,因此这个函数可能运行较慢,因此也需要是异步的。我们在前面添加async关键词

async def save(item):

print(item)

然后将这些模块组成一个Spider

首先导入爬虫对象:

import AsynSpider from simpyder.spiders

你可以这样组装Spider

spider = AsyncSpider()

spider.gen_url = gen_url

spider.parse = parse

spider.save = save

接着就可以开始爬虫任务

s.run()

你也可以通过构造函数进行一些配置

spider = AsyncSpider(name="TEST")

示例程序

from simpyder.spiders import AsynSpider

# new一个异步爬虫

s = AsynSpider()

# 定义链接生成的生成器,这里是爬取800次百度首页的爬虫

def g():

count = 0

while count < 800:

count += 1

yield "https://www.baidu.com"

# 绑定生成器

s.gen_url = g

# 定义用于解析的异步函数,这里不进行任何操作,返回一段文本

async def p(res):

return "parsed item"

# 绑定解析器

s.parse = p

# 定义用于存储的异步函数,这里不进行任何操作,但是返回2,表示解析出2个对象

async def s(item):

return 2

# 绑定存储器

s.save = s

# 运行

s.run()

理论速率

运行上述代码,可以得到单进程、并发数:64、仅进行计数操作的下载速率:

[2020-09-02 23:42:48,097][CRITICAL] @ Simpyder: user_agent: Simpyder ver.0.1.9

[2020-09-02 23:42:48,169][CRITICAL] @ Simpyder: concurrency: 64

[2020-09-02 23:42:48,244][CRITICAL] @ Simpyder: interval: 0

[2020-09-02 23:42:48,313][INFO] @ Simpyder: 已经爬取0个链接(0/min),共产生0个对象(0/min)

[2020-09-02 23:42:48,319][INFO] @ Simpyder: Start Crawler: 0

[2020-09-02 23:42:53,325][INFO] @ Simpyder: 已经爬取361个链接(4332/min),共产生658个对象(7896/min)

[2020-09-02 23:42:58,304][INFO] @ Simpyder: 已经爬取792个链接(5280/min),共产生1540个对象(10266/min)

[2020-09-02 23:43:03,304][INFO] @ Simpyder: 已经爬取1024个链接(4388/min),共产生2048个对象(8777/min)

[2020-09-02 23:43:05,007][CRITICAL] @ Simpyder: Simpyder任务执行完毕

[2020-09-02 23:43:05,008][CRITICAL] @ Simpyder: 累计消耗时间:0:00:16.695013

[2020-09-02 23:43:05,008][CRITICAL] @ Simpyder: 累计爬取链接:1024

[2020-09-02 23:43:05,009][CRITICAL] @ Simpyder: 累计生成对象:2048

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/563161.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

oracle备份能备份索引吗,ORACLE会使索引失效的条件

1. 没有 WHERE 子句2. 使用 IS NULL 和 IS NOT NULLSELECT ... FROM emp WHERE comm IS NULL; comm 列的索引会失效3. WHERE 子句中使用函数如果没有使用基于函数的索引&#xff0c;那么 where 子句中对存在索引的列使用函数时&#xff0c;会使优化器忽略掉这些索引。例如&…

php如何输出关联数组的值,php - 如何从PHP关联数组中获取确切的输出 - SO中文参考 - www.soinside.com...

我试图在关联数组上使用foreach循环创建一个html表。这是关于数组的更多细节。$assoc_array array("0" > array("project_id" > "1","emp_id" > "123","emp_name" > "Max","project&…

PHP2002,php - 错误:SQLSTATE [HY000] [2002]没有这样的文件或目录 - SO中文参考 - www.soinside.com...

首先像这样更改您的连接&#xff1a;$host localhost;$db nairobi;$user admin;$pass 123456;$charset utf8mb4; // Always set charset for database$port 3308; //Your port can be 3306 or 3307$dsn "mysql:host$host;dbname$db;port$port;charset$charset"…

linux生成文件自带时间,linux生成固定日期文件及删除一定日期前的文件

一、按照一定日期格式命名文件1、按照一定的格式输出日期&#xff1a;date "%y%m%d"格式说明&#xff1a;% : 印出 %%n : 下一行%t : 跳格%H : 小时(00-23)%I : 小时(01-12)%k : 小时(0-23)%l : 小时(1-12)%M : 分钟(00-59)%p : 显示本地 AM 或 PM%r : 直接显示时间 …

linux文件属性是什么意思,Linux文件属性

Linux是一种多用户系统&#xff0c;不同的用户处于不同的地位&#xff0c;拥有不同的权限。为了保护系统的安全性&#xff0c;Linux对不同用户访问同一文件的权限做了规定。我们可以使用ls -l命令来显示一个文件的信息&#xff1a;37944FD1-FBEF-4EDC-80BA-B5276F4242A9.png我们…

linux文件赋予755权限,Linux文件和目录的777、755、644权限解释

Linux文件和目录的权限1.文件权限在linux系统中,文件或目录的权限可以分为3种:r:4 读w:2 写x:1 执行(运行)&#xff0d;&#xff1a;对应数值0数字 4 、2 和 1表示读、写、执行权限rwx 4 2 1 7 (可读写运行)rw 4 2 6 (可读写不可运行)rx 4 1 5 (可读可运行不可写)示例…

weblogic内存修改linux,weblogic10.3.5 内存修改详解

1.修改weblogic自己的内存&#xff1a;位置&#xff1a;Oracle/Middleware/wlserver_10.3/common/bin下的文件commEnv.sh&#xff1a;if [ "$PRODUCTION_MODE" "true" ]; thencase $JAVA_VENDOR inOracle)JAVA_VM-jrockitMEM_ARGS"-Xms128m -Xmx256m…

linux下删除已经创建的数据库,MongoDB 数据库的创建和删除

MongoDB 创建数据库语法MongoDB 创建数据库的语法格式如下&#xff1a;useDATABASE_NAME如果数据库不存在&#xff0c;则创建数据库&#xff0c;否则切换到指定数据库。实例以下实例我们创建了数据库 runoob:>userunoobswitched to db runoob>dbrunoob>如果你想查看所…

linux图形界面为英文,Linux下“英文控制台 中文图形界面”的实现

以Slackware12.2为例&#xff1a;首先安装好slackware12.2&#xff0c;装好后敲入startx&#xff0c;进入图形界面。第一次登录图形界面时会提示你是哪国人(查下户口先^_^)&#xff0c;坚定的选择中国&#xff0c;默认语言就是简体中文&#xff0c;确定后就进入了全中文图形界面…

linux系统中文件的特性,linux文件系统特性

1. 文件系统特性(索引式文件系统)文件系统格式化后block group的组成部分&#xff1a;super block&#xff1a;记录文件系统整体信息&#xff0c;inode和data block的总量&#xff0c;使用量&#xff0c;剩余量&#xff0c;以及文件系统格式与相关信息&#xff0c;一般大小为10…

嵌入式基于Linux电机控制,基于嵌入式arm+linux平台的直流电机调速控制系统.pdf

2012--2013 学年第 二 学期 物电 学院期末考试卷嵌入式系统与应用学号 : 姓名 : 班级 :成绩&#xff1a;评语&#xff1a;装订(考试题目及要求)嵌入式大作&#xff1a;采用实验箱上的电位器作为信号输入器件&#xff0c; 控制直流电机的运转方向和运转速度。电位器处于中间值时…

linux安装gcc运行时库,Linux安装gcc-6.1.0

获取gcc源码包# wget https://ftp.gnu.org/gnu/gcc/gcc-6.1.0/gcc-6.1.0.tar.bz2# tar -jxvf gcc-6.1.0.tar.bz2下载依赖项执行download_prerequisites将会自动下载这些软件并解压到当前目录&#xff0c;生成gcc编译的make文件。自动安装gcc需要下载诸如gmp、mpfr、mpc等依赖文…

linux无缝升级的版本,最近一周发布新版本的Linux发行版 - 2020-01-03

本周主要有3款Linux发行版发布&#xff0c;除了BlackArch Linux之外&#xff0c;其他两个发行版更少听说&#xff0c;对于中文用户更是少有人关注。BlackArch LinuxBlackArch Linux是一份基于Arch Linux的发行&#xff0c;它被设计为服务于系统渗透测试人员及安全研究人员。它的…

支持1050ti显卡的linux系统,NVIDIA 的 GTX1050 Ti 与 GTX1050 显卡登场

一年来都忙着更新全系列显卡家族的 NVIDIA&#xff0c;先从 GTX1080 和 GTX1070 开始&#xff0c;到 GTX1060 和卡王 Titan X&#xff0c;一步一步将整条产品线升级到 Pascal 核心。今天的 GTX1050 和 GTX1050 Ti 则是补上了中低端市场的短板&#xff0c;让 AMD 享受了两个月优…

linux runqueue定义,Linux中多CPU的runqueue及抢占

一、引出在在嵌入式操作系统中&#xff0c;很多线程都可以为实时任务&#xff0c;因为毕竟这些线程很少和人接触&#xff0c;而是面向任务的。所有就有一个抢占的时机问题。特别是2.6内核中引入了新的内核态抢占任务&#xff0c;所以就可以说一下这个内核态抢占的实现。内核态抢…

c语言中把时间拷到字符串中,C语言中将日期和时间以字符串格式输出的方法

ctime()函数&#xff1a;头文件&#xff1a;#include 定义函数&#xff1a;char *ctime(const time_t *timep);函数说明&#xff1a;ctime()将参数timep 所指的time_t 结构中的信息转换成真实世界所使用的时间日期表示方法&#xff0c;然后将结果以字符串形态返回。此函数已经由…

c语言补全程序,跪求高手解答简单的程序补全题~!

该楼层疑似违规已被系统折叠 隐藏此楼查看此楼英勇的你不断疯狂的射击天上的幽灵&#xff0c;这些太空怪物也毫不留情地还击&#xff0c;逼得你只好左闪右闪地躲&#xff0c;但是你仍奋战不懈&#xff0c;穿梭于枪林弹雨之中&#xff0c;直到你消灭所有的幽灵&#xff0c;或者是…

数控机床需要c语言程序吗,数控机床编程与操作--详细介绍

前言第1章 数控机床加工概述111 数控加工概述1111 数控技术1112 数控加工的概念212 数控机床的组成和分类2121 数控机床的组成2122 数控机床的工作原理5123 数控机床的分类513 数控机床的特点和应用范围10131 数控机床加工的…

c语言数学语文英语成绩编程,急求一编程题!…

该楼层疑似违规已被系统折叠 隐藏此楼查看此楼#include #include "stdlib.h"int i,j;struct STUDENT{int xuehao;float yuwen;float shuxue;float yingyu;float sum;float average;}student[3];void huhuan1(int a,int b){int c; ca;ab;bc;}void huhuan(float x,floa…

c语言英文星期几,输入字母,判断星期几,求大神指点

该楼层疑似违规已被系统折叠 隐藏此楼查看此楼#includevoid uh() //判断周二还是周三{ char sec;printf("请继续输入&#xff1a;\n");bq:scanf("%c",&sec);if(secu||secU)printf("It is Tuesday!\n");else if(secH||sech)printf("It i…