12.Feapder

12.Feapder

明廷盛 嘻嘻😁

我的评级:不好用, 中间件只能拦截发送的, 不能拦截返回的, 就nm离谱, 帮助文档写的也模糊, 既然有中间件, 为什么整体流程中不标注???用Scrapy

第一章 Feapder基本知识

第一节 为什么使用Feapder

1.1.1 关于Feapder

官方文档: https://feapder.com/#/

  1. 异步爬虫框架(底层是asyncio, aiohttp实现异步)
  2. 国内的框架, 源码注释, 帮助文档都是中文
  3. ==底层封装了Selenium, 并且支持Selenium拦截xhr请求结果==

  • & 这个框架我不会花很多时间, 像什么工作流程我就不去管了,如果后面学完分布式后, 发现比Scarpy好用, 会详细学的
  • & 现在主要了解下①UA,Cookie, 代理IP的携带 ②Selenium拦截xhr请求结果

1.1.2 下载Feapder框架

  • & 说明: 这里是全量下载, 具体区别
1
pip install "feapder[all]"

第二节 Hello Feapder

需求: 爬取“豆瓣”电影信息

STEP1: 创建项目&轻量级爬虫文件


1
2
feapder create -p douban # 这个指令会在当前文件夹下, 生成项目文件"douban"
feapder create -s douban # cd到spiders文件夹下, 执行这个指令,后续选第一个AirSpider

STEP2: 配置数据库,并生成表对应的Item文件

  • $ 语法: feapder需要先去数据库生成表, 不能像scrapy那样在爬虫代码中建表
title
1
2
3
4
5
6
# MYSQL
MYSQL_IP = "localhost"
MYSQL_PORT = 3306
MYSQL_DB = "py_spider"
MYSQL_USER_NAME = "root"
MYSQL_USER_PASS = "root"
title
1
feapder create -i db_movie # cd到Item文件夹下, 后续选择第一个Item即可

STEP3: 编写具体spider实现数据清洗

  • $ 语法:实例化Item对象: item = db_movie_item.DbMovieItem()
  • $ 语法: Scrapy中的meta字典, 这里是item直接传递
  • $ 语法: 启动可以多
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
import feapder
from items import db_movie_item

class Douban(feapder.AirSpider):
def start_requests(self):
yield feapder.Request("https://movie.douban.com/top250?start=25&filter=", callback=self.parse)

# 爬虫STEP3:数据清洗
def parse(self, request, response):
movies = response.xpath("//ol/li")
for movie in movies:
item = db_movie_item.DbMovieItem() # 设置为"source_root"别忘了
item['title'] = movie.xpath('.//div[@class="hd"]/a/span[1]/text()').extract_first()
item['rate'] = movie.xpath('.//span[@class="rating_num"]/text()').extract_first()
item['detail_url'] = movie.xpath('.//div[@class="hd"]/a/@href').extract_first()
yield feapder.Request(item['detail_url'], callback=self.parse_detail, item=item) # 这里item相当于Scrapy中mata字典

def parse_detail(self, request, response):
item = request.item # 接力item值
item['short'] = response.xpath('//div[@class="indent"]/span/text()').extract_first().strip() or ""
yield item # 爬虫STEP4:数据存储(Feapder中无需实现存储过程, 有item和setting配置即可)


if __name__ == "__main__":
Douban(thread_count=10).start() # 这里可以用多线程启动
# Douban.start() # 默认使用"异步"(但我总感觉慢好多)

第三节 中间件(下载中间件)

1.3.1 配置UA

第四章 Selenium拦截

Pasted image 20250128110506

  • Title: 12.Feapder
  • Author: 明廷盛
  • Created at : 2025-02-15 14:34:49
  • Updated at : 2025-02-15 15:34:00
  • Link: https://blog.20040424.xyz/2025/02/15/🐍爬虫工程师/第一部分 爬虫基础/12.Feapder/
  • License: All Rights Reserved © 明廷盛