如何修复抓取的不受支持的 URL 方案错误?



>我从命令python收集url,然后将其插入start_urls

from flask import Flask, jsonify, request
import scrapy
import subprocess
class ClassSpider(scrapy.Spider):
name        = 'mySpider'
#start_urls = []
#pages      = 0
news        = []
def __init__(self, url, nbrPage):
self.pages      = nbrPage
self.start_urls = []
self.start_urlsappend(url)
def parse(self):
...
def run(self):
subprocess.check_output(['scrapy', 'crawl', 'mySpider', '-a', f'url={self.start_urls}', '-a', f'nbrPage={self.pages}'])
return self.news
app = Flask(__name__)
data = []
@app.route('/', methods=['POST'])
def getNews():
mySpiderClass = ClassSpider(request.json['url'], 2)
return jsonify({'data': mySpider.run()})
if __name__ == "__main__":
app.run(debug=True)

我收到此错误:不支持提高("不支持的网址方案 %s: %s" % scrapy.exceptions.NotSupported: 不支持的 URL 方案 '':没有可用于该方案的处理程序

当我放一个print('my urls List: ' + str(self.start_urls)),它会打印一个网址列表,例如 -->我的网址列表:['www.googole.com']

请提供任何帮助

我想发生这种情况是因为您首先将url附加到self.start_urls,然后使用列表self.start_urls调用ClassSpiderrun方法,这反过来又将列表附加到列表中,最终会得到一个嵌套列表而不是字符串列表。
为了避免这种情况,您应该像这样更改__init__方法:

def __init__(self, url, nbrPage):
self.pages      = nbrPage
self.url        = url
self.start_urls = []
self.start_urls.append(url)

然后在run中传递self.url而不是self.start_urls

def run(self):
subprocess.check_output(['scrapy', 'crawl', 'mySpider', '-a', f'url={self.url}', '-a', f'nbrPage={self.pages}'])
return self.news

最新更新