2015-06-26 2 views
3

Я упоминаю только некоторые из вопросов, которые я упомянул, прежде чем публиковать этот вопрос (у меня нет ссылок на все те вопросы, о которых я говорил, прежде чем отправлять этот вопрос) -:Передача аргумента Scipping Spider из скрипта Python

Я могу запустить этот код полностью, если я не передавать аргументы и попросить входной фр om пользователя из класса BBSpider (без основной функции - ust ниже строки name = "dmoz") или предоставить их в качестве предопределенных (то есть статических) аргументов.

Мой код: here.

Я в основном пытаюсь выполнить Scipping spider из скрипта Python без требования каких-либо дополнительных файлов (даже Файл настроек). Поэтому я сам задал настройки внутри самого кода.

Это выход, который я получаю на выполнение этой script-:

http://bigbasket.com/ps/?q=apple 
2015-06-26 12:12:34 [scrapy] INFO: Scrapy 1.0.0 started (bot: scrapybot) 
2015-06-26 12:12:34 [scrapy] INFO: Optional features available: ssl, http11 
2015-06-26 12:12:34 [scrapy] INFO: Overridden settings: {} 
2015-06-26 12:12:35 [scrapy] INFO: Enabled extensions: CloseSpider, TelnetConsole, LogStats, CoreStats, SpiderState 
None 
2015-06-26 12:12:35 [scrapy] INFO: Enabled downloader middlewares: HttpAuthMiddleware, DownloadTimeoutMiddleware, UserAgentMiddleware, RetryMiddleware, DefaultHeadersMiddleware, MetaRefreshMiddleware, HttpCompressionMiddleware, RedirectMiddleware, CookiesMiddleware, ChunkedTransferMiddleware, DownloaderStats 
2015-06-26 12:12:35 [scrapy] INFO: Enabled spider middlewares: HttpErrorMiddleware, OffsiteMiddleware, RefererMiddleware, UrlLengthMiddleware, DepthMiddleware 
2015-06-26 12:12:35 [scrapy] INFO: Enabled item pipelines: 
2015-06-26 12:12:35 [scrapy] INFO: Spider opened 
2015-06-26 12:12:35 [scrapy] INFO: Crawled 0 pages (at 0 pages/min), scraped 0 items (at 0 items/min) 
2015-06-26 12:12:35 [scrapy] DEBUG: Telnet console listening on 127.0.0.1:6023 
2015-06-26 12:12:35 [scrapy] ERROR: Error while obtaining start requests 
Traceback (most recent call last): 
    File "/usr/local/lib/python2.7/dist-packages/scrapy/core/engine.py", line 110, in _next_request 
    request = next(slot.start_requests) 
    File "/usr/local/lib/python2.7/dist-packages/scrapy/spiders/__init__.py", line 70, in start_requests 
    yield self.make_requests_from_url(url) 
    File "/usr/local/lib/python2.7/dist-packages/scrapy/spiders/__init__.py", line 73, in make_requests_from_url 
    return Request(url, dont_filter=True) 
    File "/usr/local/lib/python2.7/dist-packages/scrapy/http/request/__init__.py", line 24, in __init__ 
    self._set_url(url) 
    File "/usr/local/lib/python2.7/dist-packages/scrapy/http/request/__init__.py", line 57, in _set_url 
    raise TypeError('Request url must be str or unicode, got %s:' % type(url).__name__) 
TypeError: Request url must be str or unicode, got NoneType: 
2015-06-26 12:12:35 [scrapy] INFO: Closing spider (finished) 
2015-06-26 12:12:35 [scrapy] INFO: Dumping Scrapy stats: 
{'finish_reason': 'finished', 
'finish_time': datetime.datetime(2015, 6, 26, 6, 42, 35, 342543), 
'log_count/DEBUG': 1, 
'log_count/ERROR': 1, 
'log_count/INFO': 7, 
'start_time': datetime.datetime(2015, 6, 26, 6, 42, 35, 339158)} 
2015-06-26 12:12:35 [scrapy] INFO: Spider closed (finished) 

Проблемы, с которыми я в настоящее время facing-:

  • Если внимательно посмотреть линия 1 и линия 6 моего вывода, start_url, который я передал моему пауку, дважды печатался, хотя я написал инструкцию печати только один раз в строке 31 моего кода (ссылка, которую я дал выше). Почему это происходит, и это тоже с разными значениями (вывод на печать в строке 1 (моего вывода) дает правильный результат, хотя вывод печати на строке 6 (моего вывода)? Не только это, даже если i написать - печать «привет» - то же он получает в два раза печататься Почему это происходит
  • Далее, если вы видите эту строку моего output-:. TypeError: URL запроса должен быть Обл или юникода, получили NoneType? Почему это происходит (хотя ссылки на вопросы, которые я написал выше, написали одно и то же)? Я понятия не имею, как его разрешить? Я даже попробовал `self.start_urls = [str (kwargs.get ('start_url'))] `- тогда он дает следующий вывод:
http://bigbasket.com/ps/?q=apple 
2015-06-26 12:28:00 [scrapy] INFO: Scrapy 1.0.0 started (bot: scrapybot) 
2015-06-26 12:28:00 [scrapy] INFO: Optional features available: ssl, http11 
2015-06-26 12:28:00 [scrapy] INFO: Overridden settings: {} 
2015-06-26 12:28:00 [scrapy] INFO: Enabled extensions: CloseSpider, TelnetConsole, LogStats, CoreStats, SpiderState 
None 
2015-06-26 12:28:01 [scrapy] INFO: Enabled downloader middlewares: HttpAuthMiddleware, DownloadTimeoutMiddleware, UserAgentMiddleware, RetryMiddleware, DefaultHeadersMiddleware, MetaRefreshMiddleware, HttpCompressionMiddleware, RedirectMiddleware, CookiesMiddleware, ChunkedTransferMiddleware, DownloaderStats 
2015-06-26 12:28:01 [scrapy] INFO: Enabled spider middlewares: HttpErrorMiddleware, OffsiteMiddleware, RefererMiddleware, UrlLengthMiddleware, DepthMiddleware 
2015-06-26 12:28:01 [scrapy] INFO: Enabled item pipelines: 
2015-06-26 12:28:01 [scrapy] INFO: Spider opened 
2015-06-26 12:28:01 [scrapy] INFO: Crawled 0 pages (at 0 pages/min), scraped 0 items (at 0 items/min) 
2015-06-26 12:28:01 [scrapy] DEBUG: Telnet console listening on 127.0.0.1:6023 
2015-06-26 12:28:01 [scrapy] ERROR: Error while obtaining start requests 
Traceback (most recent call last): 
    File "/usr/local/lib/python2.7/dist-packages/scrapy/core/engine.py", line 110, in _next_request 
    request = next(slot.start_requests) 
    File "/usr/local/lib/python2.7/dist-packages/scrapy/spiders/__init__.py", line 70, in start_requests 
    yield self.make_requests_from_url(url) 
    File "/usr/local/lib/python2.7/dist-packages/scrapy/spiders/__init__.py", line 73, in make_requests_from_url 
    return Request(url, dont_filter=True) 
    File "/usr/local/lib/python2.7/dist-packages/scrapy/http/request/__init__.py", line 24, in __init__ 
    self._set_url(url) 
    File "/usr/local/lib/python2.7/dist-packages/scrapy/http/request/__init__.py", line 59, in _set_url 
    raise ValueError('Missing scheme in request url: %s' % self._url) 
ValueError: Missing scheme in request url: None 
2015-06-26 12:28:01 [scrapy] INFO: Closing spider (finished) 
2015-06-26 12:28:01 [scrapy] INFO: Dumping Scrapy stats: 
{'finish_reason': 'finished', 
'finish_time': datetime.datetime(2015, 6, 26, 6, 58, 1, 248350), 
'log_count/DEBUG': 1, 
'log_count/ERROR': 1, 
'log_count/INFO': 7, 
'start_time': datetime.datetime(2015, 6, 26, 6, 58, 1, 236056)} 
2015-06-26 12:28:01 [scrapy] INFO: Spider closed (finished) 

Пожалуйста, помогите мне решить вышеуказанные 2 ошибки.

+0

вы проверили этот ответ? [Как запустить Scrapy из скрипта Python] (http://stackoverflow.com/questions/13437402/how-to-run-scrapy-from-within-a-python-script) – eLRuLL

+0

@eLRuLL: Да, у меня есть проверили их. Во-первых, там не упоминается, какие изменения необходимо сделать в классе паука (который является основным ядром моей проблемы - оба моих вопроса, которые я перечислял выше, лежат только в той части кода). Другое дело, что они сказали, это то же самое, что я сделал (если вы видите мой код), называя паука сканировать. Пожалуйста, дайте мне знать, как это решить! Благодаря! –

ответ

6

Вам нужно передать ваши параметры на crawl способе CrawlerProcess, так что вам нужно, чтобы запустить его, как это:

crawler = CrawlerProcess(Settings()) 
crawler.crawl(BBSpider, start_url=url) 
crawler.start() 
+0

Спасибо, что он отлично работал.Просто одно разъяснение и сомнение. Почему этот вопрос 1 произошел (как в нем дважды напечатано)? И сомнение. Если я хочу выполнить 2 паука параллельно с использованием библиотеки многопроцессорности, могу ли я передать такую ​​очередь, а затем использовать queue.put (items), а затем, наконец, получить доступ к выходу паука из главной функции используя метод queue.get(). Можно ли это сделать? Можете ли вы дать мне пример кода, который делает это? Было бы очень благодарно вам, если бы вы могли предоставить мне этот код. Спасибо, пожалуйста, предоставьте этот код. –

+0

Ну, дубликат печати произошел, потому что вы создали экземпляр объекта Spider перед вызовом искателя, так что это первая печать, а затем вы передали экземпляр Spider на искателя, который не получил никаких параметров, так что это вторая печать. Что касается второго, я думаю, что это возможно, но у меня сейчас нет примера извините. – eLRuLL

+0

Большое спасибо за ваш ответ. Вы очистили мои сомнения. Во второй части вы могли бы помочь мне, предоставив мне код для многопроцессорности (используя библиотеку python - многопроцессорность) 2 паука одного и того же класса BBSpider для двух разных start_urls? Я попробовал, но это приносит мне странную ошибку. Было бы здорово, если бы вы предоставили мне код для этого! Я был бы благодарен вам, если бы вы могли предоставить код. Пожалуйста, постарайтесь дать код. Благодаря! –

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