Как построить автономный Scrapy Spider? - PullRequest
0 голосов
/ 16 мая 2018

Прошу прощения за репост, заголовок в моем предыдущем посте сбивал с толку.В примере с пауком (код ниже), как я могу использовать "pyinstaller" (или какой-либо другой установщик) для создания исполняемого файла (такого как myspidy.exe), чтобы конечному пользователю не нужно было устанавливать scrapy и python в среде Windows?С установленными Python и Scrapy, паук запускается с помощью команды "scrapy crawl quotes".Конечный пользователь запускает загрузку и запускает «myspidy.exe» на ПК с Windows, на котором предварительно не установлены Python и Scrapy.Большое спасибо!

import scrapy
class QuotesSpider(scrapy.Spider): 
    name = "quotes"
    def start_requests(self):
        urls = [
            'http://quotes.toscrape.com/page/1/',
            'http://quotes.toscrape.com/page/2/',
        ]
        for url in urls:
            yield scrapy.Request(url=url, callback=self.parse)

    def parse(self, response):
        page = response.url.split("/")[-2]
        filename = 'quotes-%s.html' % page
        with open(filename, 'wb') as f:
           f.write(response.body)
        self.log('Saved file %s' % filename)

Спасибо, EVHZ.Я внес изменения в код, как вы предложили, и получил следующие ошибки во время выполнения.

D:\craftyspider\spidy\spidy\spiders\dist>.\runspidy
Traceback (most recent call last):
File "spidy\spiders\runspidy.py", line 35, in <module>
File "site-packages\scrapy\crawler.py", line 249, in __init__
File "site-packages\scrapy\crawler.py", line 137, in __init__
File "site-packages\scrapy\crawler.py", line 326, in _get_spider_loader
File "site-packages\scrapy\utils\misc.py", line 44, in load_object
File "importlib\__init__.py", line 126, in import_module
File "<frozen importlib._bootstrap>", line 994, in _gcd_import
File "<frozen importlib._bootstrap>", line 971, in _find_and_load
File "<frozen importlib._bootstrap>", line 953, in _find_and_load_unlocked
ModuleNotFoundError: No module named 'scrapy.spiderloader'
[14128] Failed to execute script runspidy

1 Ответ

0 голосов
/ 16 мая 2018

Для того, чтобы сохранить все в файле Python, можно выполнить только:

python script.py

Вы можете использовать свой код и добавить несколько вещей:

import scrapy
from scrapy.crawler import CrawlerProcess

from scrapy.utils.project import get_project_settings
# useful if you have settings.py 
settings = get_project_settings()

# Your code
class QuotesSpider(scrapy.Spider): 
  name = "quotes"
  def start_requests(self):
    ...    

# Create a process
process = CrawlerProcess( settings )
process.crawl(QuotesSpider)
process.start()

Сохранить как script.py. Затем, используя pyinstaller :

pyinstaller --onefile script.py

Сгенерирует пакет в подкаталоге с именем dist.

...