python爬虫框架feapde的使用简介


Posted in Python onApril 20, 2021

1. 前言

大家好,我是安果!

众所周知,Python 最流行的爬虫框架是 Scrapy,它主要用于爬取网站结构性数据

今天推荐一款更加简单、轻量级,且功能强大的爬虫框架:feapder

项目地址:

https://github.com/Boris-code/feapder

2. 介绍及安装

和 Scrapy 类似,feapder 支持轻量级爬虫、分布式爬虫、批次爬虫、爬虫报警机制等功能

内置的 3 种爬虫如下:

  • AirSpider

轻量级爬虫,适合简单场景、数据量少的爬虫

  • Spider

分布式爬虫,基于 Redis,适用于海量数据,并且支持断点续爬、自动数据入库等功能

  • BatchSpider

分布式批次爬虫,主要用于需要周期性采集的爬虫

在实战之前,我们在虚拟环境下安装对应的依赖库

# 安装依赖库
pip3 install feapder

3. 实战一下

我们以最简单的 AirSpider 来爬取一些简单的数据

目标网站:aHR0cHM6Ly90b3BodWIudG9kYXkvIA==

详细实现步骤如下( 5 步)

3-1  创建爬虫项目

首先,我们使用「 feapder create -p 」命令创建一个爬虫项目

# 创建一个爬虫项目
feapder create -p tophub_demo

3-2  创建爬虫 AirSpider

命令行进入到 spiders 文件夹目录下,使用「 feapder create -s 」命令创建一个爬虫

cd spiders

# 创建一个轻量级爬虫
feapder create -s tophub_spider 1

其中

  • 1 为默认,表示创建一个轻量级爬虫 AirSpider
  • 2 代表创建一个分布式爬虫 Spider
  • 3 代表创建一个分布式批次爬虫 BatchSpider

3-3  配置数据库、创建数据表、创建映射 Item

以 Mysql 为例,首先我们在数据库中创建一张数据表

# 创建一张数据表
create table topic
(
    id         int auto_increment
        primary key,
    title      varchar(100)  null comment '文章标题',
    auth       varchar(20)   null comment '作者',
    like_count     int default 0 null comment '喜欢数',
    collection int default 0 null comment '收藏数',
    comment    int default 0 null comment '评论数'
);

然后,打开项目根目录下的 settings.py 文件,配置数据库连接信息

# settings.py

MYSQL_IP = "localhost"
MYSQL_PORT = 3306
MYSQL_DB = "xag"
MYSQL_USER_NAME = "root"
MYSQL_USER_PASS = "root"

最后,创建映射 Item( 可选 )

进入到 items 文件夹,使用「 feapder create -i 」命令创建一个文件映射到数据库

PS:由于 AirSpider 不支持数据自动入库,所以这步不是必须

3-4  编写爬虫及数据解析

第一步,首先使「 MysqlDB 」初始化数据库

from feapder.db.mysqldb import MysqlDB

class TophubSpider(feapder.AirSpider):

    def __init__(self, *args, **kwargs):
        super().__init__(*args, **kwargs)
        self.db = MysqlDB()

第二步,在 start_requests 方法中,指定爬取主链接地址,使用关键字「download_midware 」配置随机 UA

import feapder
from fake_useragent import UserAgent

def start_requests(self):
    yield feapder.Request("https://tophub.today/", download_midware=self.download_midware)

def download_midware(self, request):
    # 随机UA
    # 依赖:pip3 install fake_useragent
    ua = UserAgent().random
    request.headers = {'User-Agent': ua}
    return request

第三步,爬取首页标题、链接地址

使用 feapder 内置方法 xpath 去解析数据即可

def parse(self, request, response):
    # print(response.text)
    card_elements = response.xpath('//div[@class="cc-cd"]')

    # 过滤出对应的卡片元素【什么值得买】
    buy_good_element = [card_element for card_element in card_elements if
                        card_element.xpath('.//div[@class="cc-cd-is"]//span/text()').extract_first() == '什么值得买'][0]

    # 获取内部文章标题及地址
    a_elements = buy_good_element.xpath('.//div[@class="cc-cd-cb nano"]//a')

    for a_element in a_elements:
        # 标题和链接
        title = a_element.xpath('.//span[@class="t"]/text()').extract_first()
        href = a_element.xpath('.//@href').extract_first()

        # 再次下发新任务,并带上文章标题
        yield feapder.Request(href, download_midware=self.download_midware, callback=self.parser_detail_page,
                              title=title)

第四步,爬取详情页面数据

上一步下发新的任务,通过关键字「 callback 」指定回调函数,最后在 parser_detail_page 中对详情页面进行数据解析

def parser_detail_page(self, request, response):
    """
    解析文章详情数据
    :param request:
    :param response:
    :return:
    """
    title = request.title

    url = request.url

    # 解析文章详情页面,获取点赞、收藏、评论数目及作者名称
    author = response.xpath('//a[@class="author-title"]/text()').extract_first().strip()

    print("作者:", author, '文章标题:', title, "地址:", url)

    desc_elements = response.xpath('//span[@class="xilie"]/span')

    print("desc数目:", len(desc_elements))

    # 点赞
    like_count = int(re.findall('\d+', desc_elements[1].xpath('./text()').extract_first())[0])
    # 收藏
    collection_count = int(re.findall('\d+', desc_elements[2].xpath('./text()').extract_first())[0])
    # 评论
    comment_count = int(re.findall('\d+', desc_elements[3].xpath('./text()').extract_first())[0])

    print("点赞:", like_count, "收藏:", collection_count, "评论:", comment_count)

3-5  数据入库

使用上面实例化的数据库对象执行 SQL,将数据插入到数据库中即可

# 插入数据库
sql = "INSERT INTO topic(title,auth,like_count,collection,comment) values('%s','%s','%s','%d','%d')" % (
title, author, like_count, collection_count, comment_count)

# 执行
self.db.execute(sql)

4. 最后

本篇文章通过一个简单的实例,聊到了 feapder 中最简单的爬虫 AirSpider

关于 feapder 高级功能的使用,后面我将会通过一系列实例进行详细说明

源码地址:https://github.com/xingag/spider_python/tree/master/feapder

以上就是python爬虫框架feapde的使用简介的详细内容,更多关于python爬虫框架feapde的资料请关注三水点靠木其它相关文章!

Python 相关文章推荐
Python中的自省(反射)详解
Jun 02 Python
python魔法方法-属性转换和类的表示详解
Jul 22 Python
Python 实现一个颜色色值转换的小工具
Dec 06 Python
Django分页查询并返回jsons数据(中文乱码解决方法)
Aug 02 Python
详解如何从TensorFlow的mnist数据集导出手写体数字图片
Aug 05 Python
python按行读取文件并找出其中指定字符串
Aug 08 Python
python使用celery实现异步任务执行的例子
Aug 28 Python
将python2.7添加进64位系统的注册表方式
Nov 20 Python
浅谈python 中的 type(), dtype(), astype()的区别
Apr 09 Python
python2.7使用scapy发送syn实例
May 05 Python
python logging模块的使用详解
Oct 23 Python
基于Python实现天天酷跑功能
Jan 06 Python
python实现大文本文件分割成多个小文件
Apr 20 #Python
Python绘制分类图的方法
Pytest allure 命令行参数的使用
在pyCharm中下载第三方库的方法
Python控制台输出俄罗斯方块移动和旋转功能
Apr 18 #Python
深入理解python多线程编程
Apr 18 #Python
Python实现文本文件拆分写入到多个文本文件的方法
Apr 18 #Python
You might like
PHP mb_convert_encoding 获取字符串编码类型实现代码
2009/04/26 PHP
PHP IPV6正则表达式验证代码
2010/02/16 PHP
PHP数组的交集array_intersect(),array_intersect_assoc(),array_inter_key()函数的小问题
2011/05/29 PHP
PHP生成自适应大小的缩略图类及使用方法分享
2014/05/06 PHP
php实现建立多层级目录的方法
2014/07/19 PHP
PHP的mysqli_query参数MYSQLI_STORE_RESULT和MYSQLI_USE_RESULT的区别
2014/09/29 PHP
PHP正则+Snoopy抓取框架实现的抓取淘宝店信誉功能实例
2017/05/17 PHP
JavaScript高级程序设计 学习笔记 js高级技巧
2011/09/20 Javascript
鼠标放在图片上显示大图的JS代码
2013/03/26 Javascript
JS创建自定义表格具体实现
2014/02/11 Javascript
angularJS 中input示例分享
2015/02/09 Javascript
一步步教大家编写酷炫的导航栏js+css实现
2016/03/14 Javascript
老生常谈 js中this的指向
2016/06/30 Javascript
基于BootstrapValidator的Form表单验证(24)
2016/12/12 Javascript
使用async、enterproxy控制并发数量的方法详解
2018/01/02 Javascript
详解Angular结合zTree异步加载节点数据
2018/01/20 Javascript
Angular 向组件传递模板的两种方法
2018/02/23 Javascript
详解vue指令与$nextTick 操作DOM的不同之处
2018/08/02 Javascript
VUE路由动态加载实例代码讲解
2019/08/26 Javascript
JavaScript array常用方法代码实例详解
2020/09/02 Javascript
jupyter安装小结
2016/03/13 Python
Python的Tornado框架实现图片上传及图片大小修改功能
2016/06/30 Python
Python中defaultdict与lambda表达式用法实例小结
2018/04/09 Python
python爬虫中多线程的使用详解
2019/09/23 Python
浅谈TensorFlow之稀疏张量表示
2020/06/30 Python
聊聊python在linux下与windows下导入模块的区别说明
2021/03/03 Python
毕业生自荐信如何写
2014/03/24 职场文书
经营理念标语
2014/06/21 职场文书
篮球兴趣小组活动总结
2014/07/07 职场文书
2014年后备干部工作总结
2014/12/08 职场文书
2014年后勤工作总结范文
2014/12/16 职场文书
社区端午节活动总结
2015/02/11 职场文书
国庆阅兵观后感
2015/06/15 职场文书
教师反邪教心得体会
2016/01/15 职场文书
导游词之宿迁乾隆行宫
2019/10/15 职场文书
Java 语言中Object 类和System 类详解
2021/07/07 Java/Android