के लिए एक रीस्टफुल फ्लास्क एपीआई बनाना एपीआई को मनमाने ढंग से HTTP को यूआरएल युक्त अनुरोध प्राप्त करने की अनुमति देनी चाहिए, जिसे उपयोगकर्ता स्क्रैप करना चाहता है, और फिर फ्लास्क को स्क्रैप के परिणाम वापस करना चाहिए।स्केपर
निम्न कोड पहले http अनुरोध के लिए काम करता है, लेकिन ट्विस्ट रिएक्टर बंद होने के बाद, यह पुनरारंभ नहीं होगा। मैं इस बारे में सही तरीके से भी नहीं जा रहा हूं, लेकिन मैं सिर्फ हेरोोकू पर एक रीस्टफुल स्केपर एपीआई रखना चाहता हूं, और जो कुछ भी मेरे पास है, वह सब मैं सोच सकता हूं।
क्या इस समाधान को आर्किटेक्ट करने का कोई बेहतर तरीका है? या मैं scrape_it
को मुड़ने वाले रिएक्टर को रोकने के बिना वापस लौटने की अनुमति कैसे दे सकता हूं (जिसे फिर से शुरू नहीं किया जा सकता है)?
from flask import Flask
import os
import sys
import json
from n_grams.spiders.n_gram_spider import NGramsSpider
# scrapy api
from twisted.internet import reactor
import scrapy
from scrapy.crawler import CrawlerRunner
from scrapy.xlib.pydispatch import dispatcher
from scrapy import signals
app = Flask(__name__)
def scrape_it(url):
items = []
def add_item(item):
items.append(item)
runner = CrawlerRunner()
d = runner.crawl(NGramsSpider, [url])
d.addBoth(lambda _: reactor.stop()) # <<< TROUBLES HERE ???
dispatcher.connect(add_item, signal=signals.item_passed)
reactor.run(installSignalHandlers=0) # the script will block here until the crawling is finished
return items
@app.route('/scrape/<path:url>')
def scrape(url):
ret = scrape_it(url)
return json.dumps(ret, ensure_ascii=False, encoding='utf8')
if __name__ == '__main__':
PORT = os.environ['PORT'] if 'PORT' in os.environ else 8080
app.run(debug=True, host='0.0.0.0', port=int(PORT))
क्या आप एक ट्रेसबैक त्रुटि या कुछ भी प्रदान कर सकते हैं? इसके अलावा, इस लाइन को 'd.addboth (lambda _: reactor.stop()) को हटाएं और 'reactor.run()' के बाद रिएक्टर.स्टॉप को कॉल करें, मैं इसे त्रुटियों में डाल रहा हूं क्योंकि जब यह प्रवेश करता है फ़ंक्शन रिएक्टर प्रारंभिक स्थिति या बंद राज्य में हो सकता है। इसकी गारंटी नहीं है। – AdriVelaz
आप स्केपर का उपयोग क्यों करना चाहते हैं? पृष्ठों को स्क्रैप करने के अन्य तरीके – ahmed
@ahmed मेरी समस्या कई पृष्ठों को खींचने के लिए एक एसिंच कतार का निर्माण कर रही है, और फिर उन पृष्ठों पर लिंक पर जा रही है। इसके लिए आप क्या सलाह देंगे? –