python - 如何将两只蜘蛛合二为一?
问题描述
有两个蜘蛛使用相同的资源文件和几乎相同的结构。
spiderA 包含:
import scrapy
import pkgutil
class StockSpider(scrapy.Spider):
name = "spiderA"
data = pkgutil.get_data("tutorial", "resources/webs.txt")
data = data.decode()
urls = data.split("\r\n")
start_urls = [url + "string1" for url in urls]
def parse(self, response):
pass
spiderB 包含:
import scrapy
import pkgutil
class StockSpider(scrapy.Spider):
name = "spiderB"
data = pkgutil.get_data("tutorial", "resources/webs.txt")
data = data.decode()
urls = data.split("\r\n")
start_urls = [url + "string2" for url in urls]
def parse(self, response):
pass
如何结合 spiderA 和 spiderB,并添加一个 switch 变量以crapy scral
根据我的需要调用不同的蜘蛛?
解决方案
尝试为蜘蛛类型添加单独的参数。您可以通过调用来设置它scrapy crawl myspider -a spider_type=second
。检查此代码示例:
import scrapy
import pkgutil
class StockSpider(scrapy.Spider):
name = "myspider"
def start_requests(self):
if not hasattr(self, 'spider_type'):
self.logger.error('No spider_type specified')
return
data = pkgutil.get_data("tutorial", "resources/webs.txt")
data = data.decode()
for url in data.split("\r\n"):
if self.spider_type == 'first':
url += 'first'
if self.spider_type == 'second':
url += 'second'
yield scrapy.Request(url)
def parse(self, response):
pass
而且您也可以始终创建基主类,然后从它继承,只重载一个变量(您添加到 url)和名称(用于单独的调用)。
推荐阅读
- editing - Filmora 视频被调整为更小
- c++ - 在 OpenCV 中从 V4L2 捕获视频时出错
- ios - Swift - 共享时如何删除 UIActivityViewController 的顶部预览部分?
- reactjs - 将道具传递给反应js中的另一个组件
- android-studio - 如何在 androidOs 中找到 HarmonyOS 的替代类/方法?
- kubernetes - 无法通过 RKE https://rancher-webhook.cattle-system.svc:443/v1/webhook/validation?timeout=10s 添加集群:超出上下文期限
- python - 如何在给定条件下使 tkinter 按钮可点击或不可点击
- wordpress - 使用 slug 从 product_categories 短代码中排除类别
- ios - 尽管 index.html 和 manifest.json 发生变化,iOS 15.1 safari PWA 状态栏颜色仍保持绿色
- mongodb - 带有查找的外部集合的MongoDB条件