python爬虫框架feapder的使用简介

python爬虫框架feapder的使用简介

1、前言
Feapder 是一款上手简单、功能强大、快速、轻量级的爬虫框架的Python爬虫框架。支持轻量爬虫、分布式爬虫、批次爬虫、爬虫集成,以及完善的爬虫报警机制。

  1. AirSpider 轻量级爬虫,适合简单场景、数据量少的爬虫
  2. Spider 分布式爬虫,基于 Redis,适用于海量数据,并且支持断点续爬、自动数据入库等功能
  3. BatchSpider 分布式批次爬虫,主要用于需要周期性采集的爬虫

2、Feapder的安装

# 安装依赖库
pip3 install feapder

2、Feapder的安装
出现如下信息表示安装成功出现
feapder的介绍和环境安装就完成了,下面开始真正去使用fepader来爬取网站https://book.douban.com/top250?start=0,并存储到mysql数据库。

3、新建feapder项目
通过下方的命令去创建一个名为:chenge_yc_spider的的爬虫项目

feapder create -p chenge_yc_spider

在这里插入图片描述
创建好之后,我们看一下项目结构
![在这里插入图片描述](https://img-blog.csdnimg.cn/20210707163114669.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80Mjc4MTA1NQ==,size_16,color_FFFFFF,t_

4、编写爬虫
在终端中进入到项目(chenge_yc_spider)下的spiders文件夹下,通过下面的命令创建一个目标爬虫文件(target_spider)

feapder create -s  target_spider

在这里插入图片描述

项目结构如下:
在这里插入图片描述

target_spider.py 为主要书写整体逻辑的文件
setting.py 为配置文件
下面代码书写在target_spider.py文件中


import feapder
from items import booklist_item
class ListSpider(feapder.AirSpider):
    def start_requests(self):
        self.count = 1
        yield feapder.Request("https://book.douban.com/top250")  # 

    def parse(self, request, response):
        print('Start the page {}'.format(self.count))
        infos = response.xpath("//tr[@class='item']")
        for info in infos:
            #  书名
            name = info.xpath('td/div/a/@title').extract_first()

            # 书的链接地址
            book_url = info.xpath('td/div/a/@href').extract_first()
            # 获取的是书本的基本信息,有作者和出版社,和出版日期...
            book_infos = info.xpath('td/p/text()').extract_first()
            # 作者
            author = book_infos.split('/')[0]
            # 出版社
            publisher = book_infos.split('/')[-3]
            # 出版日期
            date = book_infos.split('/')[-2]
            # 价格
            price = book_infos.split('/')[-1]
            # 书本的评分
            rate = info.xpath('td/div/span[2]/text()').extract_first()
            # 下面的评论
            comments = info.xpath('td/p/span/text()').extract()
            # 这里单行的if语句是:如果comments的长度不为0时,则把comments的第1个元素给comment,否则就把"空"赋值给comment
            comment = comments[0] if len(comments) != 0 else "NULL"
            # print((name ,book_url , book_infos , author , publisher , date , price , rate ,  comment))
            print((name))
            
            list_item = booklist_item.BooklistItem()  # Load database
            list_item.name = name
            list_item.book_url = book_url
            list_item.book_infos = book_infos
            list_item.author = author
            list_item.publisher = publisher
            list_item.date = date
            list_item.price = price
            list_item.rate = rate
            list_item.comment = comment

            yield list_item

        if infos.xpath("//span[@class='next']/a"):
            next_pag = infos.xpath("//span[@class='next']/a/@href").extract_first()
            self.count += 1
            yield feapder.Request(url=next_pag)  # When the next page appears, go directly to



if __name__ == "__main__":
    ListSpider().start()
    #整体逻辑是: 获取当前页所有相关信息,并获取下一页链接,持续循环
""" feapder.Request中的参数 
        @summary: Request参数
        ---------
        框架参数
        @param url: 待抓取url
        @param retry_times: 当前重试次数
        @param priority: 优先级 越小越优先 默认300
        @param parser_name: 回调函数所在的类名 默认为当前类
        @param callback: 回调函数 可以是函数 也可是函数名(如想跨类回调时,parser_name指定那个类名,callback指定那个类想回调的方法名即可)
        @param filter_repeat: 是否需要去重 (True/False) 当setting中的REQUEST_FILTER_ENABLE设置为True时该参数生效 默认True
        @param auto_request: 是否需要自动请求下载网页 默认是。设置为False时返回的response为空,需要自己去请求网页
        @param request_sync: 是否同步请求下载网页,默认异步。如果该请求url过期时间快,可设置为True,相当于yield的reqeust会立即响应,而不是去排队
        @param use_session: 是否使用session方式
        @param random_user_agent: 是否随机User-Agent (True/False) 当setting中的RANDOM_HEADERS设置为True时该参数生效 默认True
        @param download_midware: 下载中间件。默认为parser中的download_midware
        @param is_abandoned: 当发生异常时是否放弃重试 True/False. 默认False
        @param render: 是否用浏览器渲染
        @param render_time: 渲染时长,即打开网页等待指定时间后再获取源码

5、配置MySQL相关内容

  1. 创建 bookList 数据表
CREATE TABLE `booklist` (
  `id` int(10) unsigned NOT NULL AUTO_INCREMENT,
  `name` varchar(255) DEFAULT NULL,
  `book_url` varchar(255) DEFAULT NULL,
  `book_infos` varchar(255) DEFAULT NULL,
  `author` varchar(255) DEFAULT NULL,
  `publisher` varchar(255) DEFAULT NULL,
  `date` varchar(255) DEFAULT NULL,
  `price` varchar(255) DEFAULT NULL,
  `rate` varchar(255) DEFAULT NULL,
  `comment` varchar(255) DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
  1. 在setting.py文件中配置 MySQL相关连接
    在这里插入图片描述
    ( 注意:需要将os.geteny 这些内容删除掉 )
    在这里插入图片描述

不删除就会是这样:

D:\AisonoWork\Amazon-spider\items>feapder create -i bookList
2021-07-07 15:38:15.746 | DEBUG    | feapder.db.mysqldb:__init__:91 - 连接到mysql数据库 None : None
[]
Traceback (most recent call last):
  File "d:\anaconda3\lib\runpy.py", line 193, in _run_module_as_main
    "__main__", mod_spec)
  File "d:\anaconda3\lib\runpy.py", line 85, in _run_code
    exec(code, run_globals)
  File "D:\Anaconda3\Scripts\feapder.exe\__main__.py", line 7, in <module>
  File "d:\anaconda3\lib\site-packages\feapder\commands\cmdline.py", line 41, in execute
    create_builder.main()
  File "d:\anaconda3\lib\site-packages\feapder\commands\create_builder.py", line 76, in main
    CreateItem().create(item_name, support_dict)
  File "d:\anaconda3\lib\site-packages\feapder\commands\create\create_item.py", line 155, in create
    raise KeyError(tip)
KeyError: 'mysql数据库中无 bookList 表 '

删除后, 配置成功后
接着在终端下,进入到根目录下的items文件夹,执行下面命令生成数据库表对于的item

feapder create -i booklist  # -i 表名
D:\AisonoWork\Amazon-spider\items>feapder create -i bookList
2021-07-07 15:39:17.260 | DEBUG    | feapder.db.mysqldb:__init__:91 - 连接到mysql数据库 localhost : test

booklist_item.py 生成成功

生成成功后,如下文件将会产生:
在
chromedriver.exe 只是一个模拟浏览器驱动,不用管。
6、存储到数据库
在 target_spider.py 中引入刚刚的 booklist_item.py,并创建对象BooklistItem。把爬取的数据表中的字段名初始化到对象中。最后yieId list_item,实际上就直接存储到数据库了(因为数据库表和item是对应连接关系,这样就直接存储到数据库了)。

""" 导入到数据库中 """
from items import booklist_item

list_item = booklist_item.BooklistItem()  # Load database
list_item.name = name
list_item.book_url = book_url
list_item.book_infos = book_infos
list_item.author = author
list_item.publisher = publisher
list_item.date = date
list_item.price = price
list_item.rate = rate
list_item.comment = comment

yield list_item

在这里插入图片描述
至此一个简单的爬虫项目就结束了。

建议大家还是看看源码,多动手尝试。多动手尝试。多动手尝试。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值