Поиск по блогу

среда, 6 августа 2014 г.

Проба запустить паука через TOR была отложена из-за того, что IDE Spyder не увидел новую папку. Раз способности ослабевают, ...

...надо дробить процесс на маленькие элементы - потому отложу TOR и попрактикую Scrapy shell. В середине недели пришлось отложить подключение TOR и прочитать IDE Spyder ... Оказалось, что этот редактор показывает (во всех эксплорерах) содержимое подпапки проекта, но при работе в редакторе вызов из модуля (или консоли) обычного импорта объекта из другого модуля выдает ошибку... оказывается, я просто забыл про init() в папке
In []:
from scrapy_csv_2.tor_proxy.set_lists import USER_AGENT_LIST, HTTP_PROXY  
выдает ошибку, поскольку в папке tor_proxy нет пустого файла init()

Здесь было бы уместно порассуждать о причинах моей глупости

  1. Почему я "забыл" про init() ?
    Я просто соотнес это правило со "Scrapy", а не с "Python" ... Старческая ригидность и издержки самообучения (читал Scrapy и Лутца в электричке по пути на дачу)... Получается, что просто нужно учитывать процесс собственного отупения..., точнее - потери способностей.... Что делать?
  2. Почему я не догадался (быстро) в чем ошибка?
    К первым двум причинам следует еще добавить ... компьютер Гали (я в паузах думал, как убрать старые оновления на Vista).

Рекомендации самому себе - "доминмнта Ухтомского"

Раз способности ослабевают, надо дробить процесс на маленькие элементы до тех пор, пока они не станут понятными.
Это относится и к чтению "Шаблонов проектирования" и приемов ООП у Лутца, и к тому, что для освоения редактора нужно выделять отдельное время.
Как бы это лучше запомнить? Попробую использовать метафору "Доминмнта Ухтомского"
Именно, как метафору - ярлык для запоминанияч подхода (поскольку от самой доминанты уже давно ничего не осталось..., но это отдельная тема).

Почему я не запоминаю английские слова так, как хотел бы?

Если использовать подход "доминанта ...", то просто потому, что мозг не может тратить ресурсы на запоминание, поскольку расходует их на понимание НОВОГО сысла - сути статьи, книги..., а не формы (перевода терминов). Гипотеза:
Чтобы запомнить форму нужно при чтении думать о форме, а не о сути, например, о синонимах... Для меня это непривычно...
Как маленьких детей учат в школе? Небольшими порциями, регулярно , теория, практика, контроль навыка (= систематичность). Почему взрослые все делают наоборот?

Вот ссылки на три темы (Scrapy proxy, TOR, scrapy settings)

1. Создаем папку проекта в Spider (предварительно надо задать папку existing workspace... в project explorer)

In [3]:
!chcp 65001
!dir C:\Users\kiss\Documents\GitMyScrapy\scrapy_mahmoud_1
Active code page: 65001
 Volume in drive C has no label.
 Volume Serial Number is 6017-2A0B

 Directory of C:\Users\kiss\Documents\GitMyScrapy\scrapy_mahmoud_1

10.08.2014  14:21    <DIR>          .
10.08.2014  14:21    <DIR>          ..
10.08.2014  14:21                97 .spyderproject
               1 File(s)             97 bytes
               2 Dir(s)  394В 074В 071В 040 bytes free

Что такое папка проекта с точки зрения Spider? Может быть, этот файл поможет понять:
In [4]:
%load C:\\Users\\kiss\\Documents\\GitMyScrapy\\scrapy_mahmoud_1\\.spyderproject
In []:
}q (U related_projectsq ]q U relative_pythonpathq ]U nameq X scrapy_mahmoud_1q U openedq ˆu.
Очевидно, что файл не текстовый (звездочки здесь заменяют непонятные символы).

2. Теперь из консоли Windows выполним консольную команду создания нового проекта Scrapy (внизу копия из консоли)

In []:
C:\Users\kiss\Documents\GitMyScrapy\scrapy_mahmoud_1>scrapy startproject mahmoud_1

C:\Users\kiss\Documents\GitMyScrapy\scrapy_mahmoud_1>dir
 Том в устройстве C не имеет метки.
 Серийный номер тома: 6017-2A0B

 Содержимое папки C:\Users\kiss\Documents\GitMyScrapy\scrapy_mahmoud_1

10.08.2014  16:01    <DIR>          .
10.08.2014  16:01    <DIR>          ..
10.08.2014  14:21                97 .spyderproject
10.08.2014  16:01    <DIR>          mahmoud_1
               1 файлов             97 байт
               3 папок  394 072 956 928 байт свободно

C:\Users\kiss\Documents\GitMyScrapy\scrapy_mahmoud_1>
И вот он проект с двумя папками mahmoud_1
In [5]:
!dir C:\Users\kiss\Documents\GitMyScrapy\scrapy_mahmoud_1\mahmoud_1
 Volume in drive C has no label.
 Volume Serial Number is 6017-2A0B

 Directory of C:\Users\kiss\Documents\GitMyScrapy\scrapy_mahmoud_1\mahmoud_1

10.08.2014  16:01    <DIR>          .
10.08.2014  16:01    <DIR>          ..
10.08.2014  16:01    <DIR>          mahmoud_1
10.08.2014  16:01               260 scrapy.cfg
               1 File(s)            260 bytes
               3 Dir(s)  394В 072В 776В 704 bytes free

In [6]:
!dir C:\Users\kiss\Documents\GitMyScrapy\scrapy_mahmoud_1\mahmoud_1\mahmoud_1
 Volume in drive C has no label.
 Volume Serial Number is 6017-2A0B

 Directory of C:\Users\kiss\Documents\GitMyScrapy\scrapy_mahmoud_1\mahmoud_1\mahmoud_1

10.08.2014  16:01    <DIR>          .
10.08.2014  16:01    <DIR>          ..
10.08.2014  16:01               269 items.py
10.08.2014  16:01               262 pipelines.py
10.08.2014  16:01               473 settings.py
09.12.2013  15:39    <DIR>          spiders
09.12.2013  15:38                 0 __init__.py
               4 File(s)          1В 004 bytes
               3 Dir(s)  394В 072В 776В 704 bytes free

3. Переходим в Spiders и видим там во всех эксплорерах папки проекта scrapy

Очевидно, что по правилам scrapy рабочей директорией должна быть C:mahmoud1_1 (потому, что файл scrapy.cfg находится там). Пробуем переключить рабочее пространство в проекте... все не работает, кроме окна "Project explorer" Здесь мне предлагаю создать новое рабочее пространство. В результате в соответствующей папке появляется файл:
In [8]:
%load "C:\\Users\\kiss\\Documents\\GitMyScrapy\\scrapy_mahmoud_1\\mahmoud_1\\.spyderworkspace"
In []:
}q (U
project_pathsq ]U nameq X mahmoud_1q u.
Я не сразу обратил внимание, что название файла .spyderworkspace отличается от созданного ранее в папке проекта.spyderproject Что это за разные рабочие пространства? Пока очевидно только то, что к проекту Scrapy они не имеют никакого отношения. Запомним этот факт и двинемся дальше. Попробуем запустить вот этого паука Using Scrapy with different / many proxies
In []:
1  Create a new file called middlewares.py and save it in your scrapy project and add the following code to it.
In [11]:
%load C:\\Users\\kiss\\Documents\\GitMyScrapy\\scrapy_mahmoud_1\\mahmoud_1\\mahmoud_1\\middlewares.py
In []:
"""
Created on Sun Aug 10 16:39:35 2014

@author: kiss
"""

# Importing base64 library because we'll need it ONLY in case if the proxy we are going to use requires authentication
#import base64
 
# Start your middleware class
class ProxyMiddleware(object):
    # overwrite process request
    def process_request(self, request, spider):
        # Set the location of the proxy
        request.meta['proxy'] = "http:127.0.0.1:8118"
 
#        # Use the following lines if your proxy requires authentication
#        proxy_user_pass = "USERNAME:PASSWORD"
#        # setup basic authentication for the proxy
#        encoded_user_pass = base64.encodestring(proxy_user_pass)
#        request.headers['Proxy-Authorization'] = 'Basic ' + encoded_user_pass
In []:
2  Open your projects configuration file (./project_name/settings.py) and add the following code
In [9]:
%load C:\\Users\\kiss\\Documents\\GitMyScrapy\\scrapy_mahmoud_1\\mahmoud_1\\mahmoud_1\\settings.py
In []:
# Scrapy settings for mahmoud_1 project
#
# For simplicity, this file contains only the most important settings by
# default. All the other settings are documented here:
#
#     http://doc.scrapy.org/en/latest/topics/settings.html
#

BOT_NAME = 'mahmoud_1'

SPIDER_MODULES = ['mahmoud_1.spiders']
NEWSPIDER_MODULE = 'mahmoud_1.spiders'

# Crawl responsibly by identifying yourself (and your website) on the user-agent
#USER_AGENT = 'mahmoud_1 (+http://www.yourdomain.com)'

# This middlewares I added from the article http://mahmoud.abdel-fattah.net/tag/scrapy/
DOWNLOADER_MIDDLEWARES = {
    'scrapy.contrib.downloadermiddleware.httpproxy.HttpProxyMiddleware': 110,
    'mahmoud_1.middlewares.ProxyMiddleware': 100,
}
In []:
3. If you want to test it, just create a new spider with the name test, and add the following code
In []:
%load C:\\Users\\kiss\\Documents\\GitMyScrapy\\scrapy_mahmoud_1\\mahmoud_1\\mahmoud_1\\spiders\\test_url.py
In []:
# -*- coding: utf-8 -*-
"""
Created on Sun Aug 10 16:56:08 2014

@author: kiss
"""

from scrapy.spider import BaseSpider
from scrapy.contrib.spiders import CrawlSpider, Rule
from scrapy.http import Request
 
class TestSpider(CrawlSpider):
    name = "test_url"
    domain_name = "whatismyip.com"
    # The following url is subject to change, you can get the last updated one from here :
    # http://www.whatismyip.com/faq/automation.asp
    start_urls = ["http://automation.whatismyip.com/n09230945.asp"]
 
    def parse(self, response):
        open('test.html', 'wb').write(response.body)
#        http://www.whatismyip.com/        
#        //*[@id="ip-box"]/div[1]/div[2]
Теперь из папки проекта запускаем команду "scrapy shell" без указаний на паука
In []:
C:\Users\kiss\Documents\GitMyScrapy\scrapy_mahmoud_1\mahmoud_1>scrapy shell
2014-08-11 10:53:01+0400 [scrapy] INFO: Scrapy 0.20.1 started (bot: mahmoud_1)
2014-08-11 10:53:01+0400 [scrapy] DEBUG: Optional features available: ssl, http11, boto, django
2014-08-11 10:53:01+0400 [scrapy] DEBUG: Overridden settings: {'NEWSPIDER_MODULE': 'mahmoud_1.spiders', 'SPIDER_MODULES': ['m
1.spiders'], 'LOGSTATS_INTERVAL': 0, 'BOT_NAME': 'mahmoud_1'}
2014-08-11 10:53:02+0400 [scrapy] DEBUG: Enabled extensions: TelnetConsole, CloseSpider, WebService, CoreStats, SpiderState
2014-08-11 10:53:03+0400 [scrapy] DEBUG: Enabled downloader middlewares: ProxyMiddleware, HttpProxyMiddleware, HttpAuthMiddle
ownloadTimeoutMiddleware, UserAgentMiddleware, RetryMiddleware, DefaultHeadersMiddleware, MetaRefreshMiddleware, HttpCompress
leware, RedirectMiddleware, CookiesMiddleware, ChunkedTransferMiddleware, DownloaderStats
2014-08-11 10:53:03+0400 [scrapy] DEBUG: Enabled spider middlewares: HttpErrorMiddleware, OffsiteMiddleware, RefererMiddlewar
engthMiddleware, DepthMiddleware
2014-08-11 10:53:03+0400 [scrapy] DEBUG: Enabled item pipelines:
2014-08-11 10:53:03+0400 [scrapy] DEBUG: Telnet console listening on 0.0.0.0:6023
2014-08-11 10:53:03+0400 [scrapy] DEBUG: Web service listening on 0.0.0.0:6080
[s] Available Scrapy objects:
[s]   item       {}
[s]   sel        <Selector xpath=None data=u'None'>
[s]   settings   <CrawlerSettings module=<module 'mahmoud_1.settings' from 'mahmoud_1\settings.pyc'>>
[s] Useful shortcuts:
[s]   shelp()           Shell help (print this help)
[s]   fetch(req_or_url) Fetch request (or URL) and update local objects
[s]   view(response)    View response in a browser
C:\Users\kiss\Anaconda\lib\site-packages\IPython\frontend.py:30: UserWarning: The top-level `frontend` package has been depre
All its subpackages have been moved to the top `IPython` level.
  warn("The top-level `frontend` package has been deprecated. "

In [1]: request.headers
---------------------------------------------------------------------------
AttributeError                            Traceback (most recent call last)
<ipython-input-1-6bda93bc9ec8> in <module>()
----> 1 request.headers

AttributeError: 'NoneType' object has no attribute 'headers'


Посты чуть ниже также могут вас заинтересовать

Комментариев нет:

Отправить комментарий