2017-01-01 3 views
0

Я пытаюсь запустить Scrapy паук из сценария вместо того, чтобы запустить его из командного терминала, как это:Ошибка при выполнении SCRAPY из сценария

scrapy crawl spidername 

В документации Scrapy я нашел следующий пример: https://doc.scrapy.org/en/latest/topics/practices.html.

Теперь мой код выглядит следующим образом:

import scrapy 
from scrapy.crawler import CrawlerProcess 
from scrapy.loader import ItemLoader 
from properties.items import PropertiesItem 


class MySpider(scrapy.Spider): 
    name = "basic" 
    allowed_domains = ["web"] 
    start_urls = ['http://www.example.com'] 

    def parse(self, response): 
     l = ItemLoader(item=PropertiesItem(), response = response) 
     l.add_xpath('title', '//h1[1]/text()') 

     return l.load_item() 

process = CrawlerProcess({ 
'USER_AGENT': 'Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1)' 
}) 

process.crawl(MySpider) 
process.start() # the script will block here until the crawling is finished 

Когда я запускаю этот сценарий, я получаю следующее сообщение об ошибке:

File "/Library/Python/2.7/site-packages/Twisted-16.7.0rc1-py2.7-macosx-10.11-intel.egg/twisted/internet/_sslverify.py", line 38, in TLSVersion.TLSv1_1: SSL.OP_NO_TLSv1_1, AttributeError: 'module' object has no attribute 'OP_NO_TLSv1_1'

Так что мои вопросы:

1) Каких ошибки это? Я не смог найти примеры в Интернете.

2) Что я могу изменить, чтобы запустить scrapy из этого скрипта?

Обновлено:

Добавлены пакеты, установленные для проекта

attrs==16.3.0 
Automat==0.3.0 
cffi==1.9.1 
characteristic==14.3.0 
constantly==15.1.0 
cryptography==1.7.1 
cssselect==1.0.0 
enum34==1.1.6 
idna==2.2 
incremental==16.10.1 
ipaddress==1.0.17 
lxml==3.7.1 
parsel==1.1.0 
pyasn1==0.1.9 pyasn1- 
modules==0.0.8 
pycparser==2.17 
PyDispatcher==2.0.5 
pyOpenSSL==0.15.1 
queuelib==1.4.2 
Scrapy==1.3.0 service- 
identity==16.0.0 
six==1.10.0 
tree==0.1.0 
Twisted==16.6.0 
virtualenv==15.1.0 
w3lib==1.16.0 zope. 
interface==4.3.3 
+0

Похож на проблему с Twisted. Можете ли вы вставить номера версий всех пакетов в свой проект. Предпочтительно вставляйте выходные данные 'pip freeze'. –

+0

Это также может быть проблемой с версией OpenSSL, которую вы используете. Можете ли вы вставить версию OpenSSL, которую используете? Вы можете выполнить [этот ответ] (http://apple.stackexchange.com/questions/126830/how-to-upgrade-openssl-in-os-x), чтобы обновить его, если сможете. –

+0

На самом деле, я думаю, вы должны обновить версию 'pyOpenSSL' с помощью' pip install --upprade pyOpenSSL'. –

ответ

0

Я нашел решение:

Создала новую виртуальную среду, основанную на python 3.6 вместо python 2.7. Я запустил тот же самый код (должен был заменить urlparse с urllib.parse, хотя), и это сработало!

-1

1) Я не уверен, что

2) Но ваш отступы нужен обзор:

import scrapy 
from scrapy.crawler import CrawlerProcess 
from scrapy.loader import ItemLoader 
from properties.items import PropertiesItem 


class MySpider(scrapy.Spider): 
    name = "basic" 
    allowed_domains = ["web"] 
    start_urls = ['http://www.example.com'] 

    def parse(self, response): 
     l = ItemLoader(item=PropertiesItem(), response = response) 
     l.add_xpath('title', '//h1[1]/text()') 

     return l.load_item() 

    process = CrawlerProcess({ 
'USER_AGENT': 'Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1)' 
}) 

    process.crawl(MySpider) 
    process.start() # the script will block here until the crawling is finished 

и Я принимаю различные другие примеры в коде. т.е. для запуска ниже паука вам потребуется ввести

scrapy crawl basic 

и что у вас есть папка под названием «Свойства» с файлом «пунктов» в нем и т.д.

+0

Вы посмотрели ссылку, которую я предоставил? Процесс не является частью паука. Он используется для запуска. – titusAdam

Смежные вопросы