>我从命令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
调用ClassSpider
run
方法,这反过来又将列表附加到列表中,最终会得到一个嵌套列表而不是字符串列表。
为了避免这种情况,您应该像这样更改__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