我是Python新手。我前几天才学会了scrapy。
我想创建一个带有龙卷风或其他Python设置的Scarpy。 USER可以输入要爬网的URL并在UI中获取结果。
我尝试了scrapyrt,用户在UI中获取结果作为JSON。但我无法使用JSON。
我也试过archnado。 https://github.com/TeamHG-Memex/arachnado
但这是现在不支持的旧版本。当我尝试抛出大量错误时。
还尝试了这个https://groups.google.com/forum/#!topic/python-tornado/vi7idvzOgU8
Bitbucket项目。这是一个错误。有人可以通过提供详细的实施步骤来帮助解决这个问题。
答案 0 :(得分:0)
鉴于您刚刚学习了Python + Scrapy,最好对您了解更多有关Python的信息,因为将Scrapy嵌入Web服务器中会利用一些Python魔术。另一方面,这种问题有时会弹出,应该以某种形式解决。
您要记住的是Scrapy是使用Twisted框架构建的,因此您必须确保所使用的任何Web框架都具有Twisted集成。幸运的是,Tornado integrates well with Twisted。
import tornado.platform.twisted
tornado.platform.twisted.install()
import scrapy
from scrapy.crawler import CrawlerRunner
from scrapy.utils.log import configure_logging as scrapy_log_conf
from tornado import ioloop, web
from tornado.log import enable_pretty_logging as enable_tornado_log
class QuotesSpider(scrapy.Spider):
name = 'quotes'
start_urls = []
def parse(self, response):
for quote in response.css('div.quote'):
yield {
'text': quote.css('span.text::text').extract_first(),
'author': quote.xpath('span/small/text()').extract_first(),
}
next_page = response.css('li.next a::attr("href")').extract_first()
if next_page is not None:
yield response.follow(next_page, self.parse)
class RESTfulInterface(web.RequestHandler):
def post(self):
# get url to crawl from user
crawl_urls = self.get_arguments('crawl_url')
if len(crawl_urls) == 0:
self.send_error(400)
raise web.Finish
crawl_runner = CrawlerRunner()
#deferred = crawl_runner.crawl(QuotesSpider, start_urls=['http://quotes.toscrape.com/tag/humor/'])
deferred = crawl_runner.crawl(QuotesSpider, start_urls=crawl_urls)
deferred.addBoth(self.crawl_complete)
def crawl_complete(self, result):
"""
Do something meaningful after the crawl is complete, like sending an
email to all the admins.
"""
print('CRAWL_COMPLETE')
def main():
enable_tornado_log()
scrapy_log_conf({'LOG_FORMAT': '%(levelname)s: %(message)s'})
app = web.Application([
(r'/crawl/?', RESTfulInterface),
])
app.listen(port='8888')
ioloop.IOLoop.current().start()
main()
此代码段将从http://quotes.toscrape.com
抓取页面。当您发布到/crawl
端点时,将启动爬网。
`curl -X POST -F 'crawl_url=http://quotes.toscrape.com/tag/humor/' -F 'crawl_url=hello' http://localhost:8888/crawl`