入库操作:
from feapder.db.redisdb import RedisDB
redis = RedisDB(ip_ports="localhost:6379", db=0)
redis.lpush("ke:l_test", 2)
#redis.lpush("l_test", 3)
print(redis.lrange("l_test"))
print(redis.lrem("l_test", 2))
print(redis.lrange("l_test"))
redos.zadd(_task_table, {"id": 1, "url": "https://www.baidu.com"})
使用sql语句直接在navicat中创建表格
简单的分布式爬虫
Created on 2021-02-08 16:06:12
---------
@summary:
---------
@author: Boris
"""
import feapder
from items import *
class TestSpider(feapder.Spider):
def start_requests(self):
for i in range(1):
yield feapder.Request(f"https://www.baidu.com#{i}", callback=self.parse)
def validate(self, request, response):
if response.status_code != 200:
raise Exception("response code not 200") # 重试
# if "哈哈" not in response.text:
# return False # 抛弃当前请求
def parse(self, request, response):
title = response.xpath("//title/text()").extract_first() # 取标题
item = spider_data_item.SpiderDataItem() # 声明一个item
item.title = title # 给item属性赋值
yield item # 返回item, item会自动批量入库
if __name__ == '__main__':
spider = TestSpider(redis_key="feapder3:test_spider", thread_count=100)
spider.start()
这个要同时建立redis和mysql,因为redis_key存着网址。
【分布式爬虫】结果在redis中插入爬虫的运行状态,在mysql中插入爬虫返回的数据。
【任务爬虫】默认基本类有提交数据(url)到种子列表(可能是redis也可能是mysql),
后续的爬虫根据参数是要么是向redis中添加数据,要么是向根据网址向mysql中添加数据。
【批次爬虫】手动向mysql数据库中batch_spider_task表添加数据,
运行参数1:创建了一个batch_spider_batch_record表,添加爬虫运行记录到batch_spider_task表中。
运行参数2: 获得一个爬虫数据,提交到mysql库。
【爬虫集成】
爬虫参数1,(已经sql创建添加数据)mysql表中,redis自创一个表从mysql中弄一个任务过去。然后一个表记录爬虫名单。
爬虫参数2,那爬虫执行一个,那就删除一个记录,直到执行完为止。