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中操作列表之list.extend()方法的使用
May 20 Python
Python连接MySQL并使用fetchall()方法过滤特殊字符
Mar 13 Python
Python元组知识点总结
Feb 18 Python
对PyQt5的输入对话框使用(QInputDialog)详解
Jun 25 Python
如何关掉pycharm中的python console(图解)
Oct 31 Python
python requests抓取one推送文字和图片代码实例
Nov 04 Python
python函数声明和调用定义及原理详解
Dec 02 Python
Python数据可视化:幂律分布实例详解
Dec 07 Python
解决Python import docx出错DLL load failed的问题
Feb 13 Python
python的sys.path模块路径添加方式
Mar 09 Python
哈工大自然语言处理工具箱之ltp在windows10下的安装使用教程
May 07 Python
Python中的全局变量如何理解
Jun 04 Python
python实现大文本文件分割成多个小文件
Apr 20 #Python
Python绘制分类图的方法
Pytest allure 命令行参数的使用
在pyCharm中下载第三方库的方法
Python控制台输出俄罗斯方块移动和旋转功能
Apr 18 #Python
深入理解python多线程编程
Apr 18 #Python
Python实现文本文件拆分写入到多个文本文件的方法
Apr 18 #Python
You might like
PHPMailer的主要功能特点和简单使用说明
2014/02/17 PHP
php目录遍历函数opendir用法实例
2014/11/20 PHP
浅谈PHP中如何实现Hook机制
2017/11/14 PHP
php实现姓名根据首字母排序的类与方法(实例代码)
2018/05/16 PHP
浅谈PHP5.6 与 PHP7.0 区别
2019/10/09 PHP
JavaScript判断两种格式的输入日期的正确性的代码
2007/03/25 Javascript
用javascript实现读取txt文档的脚本
2007/07/20 Javascript
JavaScript 面向对象编程(2) 定义类
2010/05/18 Javascript
文件编码导致jquery失效的解决方法
2013/06/26 Javascript
JavaScript 和 Java 的区别浅析
2013/07/31 Javascript
一个不错的字符串转码解码函数(自写)
2014/07/31 Javascript
JS实现跟随鼠标闪烁转动色块的方法
2015/02/26 Javascript
apply和call方法定义及apply和call方法的区别
2015/11/15 Javascript
node.js+jQuery实现用户登录注册AJAX交互
2017/04/28 jQuery
原生JS实现图片懒加载(lazyload)实例
2017/06/13 Javascript
nodejs构建本地web测试服务器 如何解决访问静态资源问题
2017/07/14 NodeJs
20个最常见的jQuery面试问题及答案
2018/05/23 jQuery
用JS实现选项卡
2020/03/23 Javascript
Vue前端判断数据对象是否为空的实例
2020/09/02 Javascript
Vue.js桌面端自定义滚动条组件之美化滚动条VScroll
2020/12/01 Vue.js
用Python制作简单的朴素基数估计器的教程
2015/04/01 Python
详解Python的collections模块中的deque双端队列结构
2016/07/07 Python
浅谈python字典多键值及重复键值的使用
2016/11/04 Python
Python解决N阶台阶走法问题的方法分析
2017/12/28 Python
用tensorflow构建线性回归模型的示例代码
2018/03/05 Python
Python实现Word表格转成Excel表格的示例代码
2020/04/16 Python
使用Python爬虫爬取小红书完完整整的全过程
2021/01/19 Python
Python读取pdf表格写入excel的方法
2021/01/22 Python
canvas绘制太极图的实现示例
2020/04/29 HTML / CSS
英国领先的NHS批准的在线药店:Pharmacy2U
2017/01/06 全球购物
爱与责任师德演讲稿
2014/08/26 职场文书
2014和解协议书范文
2014/09/15 职场文书
单位一把手群众路线四风问题整改措施
2014/09/25 职场文书
学校工会工作总结2015
2015/05/19 职场文书
分享一些Java的常用工具
2021/06/11 Java/Android
Python访问Redis的详细操作
2021/06/26 Python