...надо дробить процесс на маленькие элементы - потому отложу 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()
Здесь было бы уместно порассуждать о причинах моей глупости¶
- Почему я "забыл" про init() ?
Я просто соотнес это правило со "Scrapy", а не с "Python" ... Старческая ригидность и издержки самообучения (читал Scrapy и Лутца в электричке по пути на дачу)... Получается, что просто нужно учитывать процесс собственного отупения..., точнее - потери способностей.... Что делать? - Почему я не догадался (быстро) в чем ошибка?
К первым двум причинам следует еще добавить ... компьютер Гали (я в паузах думал, как убрать старые оновления на Vista).
Рекомендации самому себе - "доминмнта Ухтомского"¶
Раз способности ослабевают, надо дробить процесс на маленькие элементы до тех пор, пока они не станут понятными.
Это относится и к чтению "Шаблонов проектирования" и приемов ООП у Лутца, и к тому, что для освоения редактора нужно выделять отдельное время.
Как бы это лучше запомнить? Попробую использовать метафору "Доминмнта Ухтомского"
Именно, как метафору - ярлык для запоминанияч подхода (поскольку от самой доминанты уже давно ничего не осталось..., но это отдельная тема).
Это относится и к чтению "Шаблонов проектирования" и приемов ООП у Лутца, и к тому, что для освоения редактора нужно выделять отдельное время.
Как бы это лучше запомнить? Попробую использовать метафору "Доминмнта Ухтомского"
Именно, как метафору - ярлык для запоминанияч подхода (поскольку от самой доминанты уже давно ничего не осталось..., но это отдельная тема).
Почему я не запоминаю английские слова так, как хотел бы?¶
Если использовать подход "доминанта ...", то просто потому, что мозг не может тратить ресурсы на запоминание, поскольку расходует их на понимание НОВОГО сысла - сути статьи, книги..., а не формы (перевода терминов). Гипотеза:
Чтобы запомнить форму нужно при чтении думать о форме, а не о сути, например, о синонимах... Для меня это непривычно...
Чтобы запомнить форму нужно при чтении думать о форме, а не о сути, например, о синонимах... Для меня это непривычно...
Как маленьких детей учат в школе? Небольшими порциями, регулярно , теория, практика, контроль навыка (= систематичность). Почему взрослые все делают наоборот?
Вот ссылки на три темы (Scrapy proxy, TOR, scrapy settings)¶
Using Scrapy with different / many proxies
Scrapy: Run Using TOR and Multiple Agents
Running the Tor client on Microsoft Windows
check.torproject.org
Privoxy - Home Page
Пошаговое руководство по созданию проекта Scrapy CSV
Scrapy: Run Using TOR and Multiple Agents
Running the Tor client on Microsoft Windows
check.torproject.org
Privoxy - Home Page
Пошаговое руководство по созданию проекта Scrapy CSV
1. Создаем папку проекта в Spider (предварительно надо задать папку existing workspace... в project explorer)¶
In [3]:
!chcp 65001
!dir C:\Users\kiss\Documents\GitMyScrapy\scrapy_mahmoud_1
Что такое папка проекта с точки зрения 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
In [6]:
!dir C:\Users\kiss\Documents\GitMyScrapy\scrapy_mahmoud_1\mahmoud_1\mahmoud_1
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 project’s 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'
Посты чуть ниже также могут вас заинтересовать
Комментариев нет:
Отправить комментарий