前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >初识scrapy爬虫框架

初识scrapy爬虫框架

作者头像
生信修炼手册
发布2020-11-09 11:43:00
3370
发布2020-11-09 11:43:00
举报
文章被收录于专栏:生信修炼手册生信修炼手册

框架是为了解决特定的业务场景而开发的一套高质量代码,通过框架避免了重复造轮子的低效模式,可以更加专注于具体业务相关的代码。在python中,scrapy就是一个主流的爬虫框架,可以通过如下方式进行安装

代码语言:javascript
复制
pip install scrapy

scrapy框架的架构如下

核心是Scrapy引擎,其他各部分的功能如下

1. Spiders,主要有两个功能,提供需要解析的url链接,即Requests, 同时负责解析html页面,从其中提取需要的信息,提取出来的标准化信息称之为Item;

2. Scheduler,称之为调度器,负责对多个Requests任务进行调度

3. Downloader Middlewares, 下载中间件,可以对Requests请求进行封装,典型的应用是添加User-Agent信息,

4. Downloader,负责下载,下载对应的Requests,从服务器获取响应信息,即Responses

5. Item PIpeline,Spiders将提取出标准的Item信息,交给Item PIpeline进行处理,比如去重复等操作

下面通过一个小的实例来看下该框架的使用,通过如下代码可以新建一个爬虫项目

代码语言:javascript
复制
python -m scrapy startproject hello_world

在hello_world目录下,包含了如下以及文件

其中的setting.py 文件保存了爬虫相关的设置信息,最常见的用法是对以下选项进行设置

代码语言:javascript
复制
ROBOTSTXT_OBEY = False

这样爬虫就可以无视网站的roborts.txt文件,继续爬取。项目启动之后,我们首先要做的就是在spiders目录下,新建一个文件,编写我们的爬虫代码,文件的名字自己定义,内容示例如下

代码语言:javascript
复制
import scrapy

from hello_world.items import HelloWorldItem


class MirSpider(scrapy.Spider):
    name = "MirSpider"
    start_urls = ["http://mirtarbase.cuhk.edu.cn/php/search.php?opt=species&org=hsa&sort=id&order=asc&page={}".format(i) for i in range(1, 100)]


    def parse(self, response):
        for row in response.xpath('//table/tr'):
            item = HelloWorldItem()
            res = []
            for col in (row.xpath('td/text()')):
                res.append(col.extract())
            if res[0] != 'Homo sapiens':
                continue
            item['species'] = res[0]
            item['miRNA'] = res[2]
            item['target'] = res[3]
            item['total'] = res[4]
            item['papers'] = res[5]
            yield item

在该代码中,start_urls提供了需要爬取的页面,parse方法提供了从网页中提取信息的具体方式,对于提取信息的标准化,在items.py文件中进行定义,示例如下

代码语言:javascript
复制
import scrapy

class HelloWorldItem(scrapy.Item):
    species = scrapy.Field()
    miRNA = scrapy.Field()
    target = scrapy.Field()
    total = scrapy.Field()
    papers = scrapy.Field()

通过以上两个文件的简单代码,就定义了一个最基本的爬虫,功能是从miRTarBase数据库中提取human miRNA的靶基因信息。在命令行中输入以下命令,可以启动该爬虫

代码语言:javascript
复制
python -m scrapy crawl MirSpider -o test.csv

直接将结果输出为标准的csv格式,由于采用了异步io的下载模式,爬取速度非常的快。

通过这个简单的示例,可以看出框架对于开发的便利性,我们只需要专注于编写从网页提取信息的核心代码就可以了,大大提高了开发效率,而且由于框架本身的优越性能,开发出的爬虫执行效率也很高。

·end·

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2020-11-04,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 生信修炼手册 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
消息队列 TDMQ
消息队列 TDMQ (Tencent Distributed Message Queue)是腾讯基于 Apache Pulsar 自研的一个云原生消息中间件系列,其中包含兼容Pulsar、RabbitMQ、RocketMQ 等协议的消息队列子产品,得益于其底层计算与存储分离的架构,TDMQ 具备良好的弹性伸缩以及故障恢复能力。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档