Нагуглил два подхода: с Telnet и с библиотекой Python. Библиотек несколько, например Stem, TorCtl, TxTorCon, JTorCtl, PHPTorCtl Надо будет выбрать... И Telnet надо будет опробовать
Impossible to scrape google search results.. Right?
Scrapy, Google Scholar and MongoDB
how-to-change-tor-exit-node-programmatically
Is it possible to block tor users?
Advanced Onion Router
stackoverflow.com/questions/tagged/tor
github.com/search?l=Python&q=tor&type=Repositories&utf8=%E2%9C%93
groups.google.com/forum/
#!searchin/scrapy-users/tor$20
#!forum/python-grab
#!forum/grab-it-social-bookmarking
Некстати о сессиях и куки¶
Ссылку на форум гугла я сначала скопировал с список ссылок выше, а потом обратил внимание на #!topic/scrapy-users/K9QISzH4KwA ... и вспомнил, что это ссылка из IE, который я накануне юзал с Fiddler и отключал все куки... Вот Гугл и расстарался - такой довесок должен добавляться к каждой ссылке.
https://groups.google.com/forum/#!topic/scrapy-users/K9QISzH4KwA
# Кликнул по первой ссылке на странице поиск Google
https://groups.google.com/forum/#!forum/scrapy-users
Оказывается, что нет, это ссылки на страницы такие... Я просто накануне прочитал, что некоторые сайты НЕ ПОЛУЧИВ ОТ ПОЛЬЗОВАТЕЛЯ COOKIE, дописываю ко всем внутренним ссылкам на странице строчку вида #piouiou, при клике по (внутренней) ссылке эта строчка выполняет роль user ID
Нужно осваивать stem.torproject¶
Stem | Python | October 2011 - Present |
Txtorcon | Python (Twisted) | February 2012 - Present |
TorCtl | Python | July 2008 - November 2011 |
PHP TorCtl | PHP | February 2013 |
JTorCtl | Java | June 2005 - May 2009 |
Из этого списка наиболее простой вариант - TorCtl (пример в конце поста), но эта библиотека не поддерживается, она прародитель Stem, сейчас это главная библиотека (вместе в Txtorcon). Пока не ясно, нужно ли ее изучать...
Can I interact with Tor's controller interface directly?¶
If you are using a ControlPort then the easiest method of talking with Tor is via telnet. You always need to authenticate after connecting, even if Tor does not restrict access. If your torrc doesn't have a CookieAuthentication or HashedControlPassword then to authenticate you will simply call AUTHENTICATE after connecting without any credentials.
% cat ~/.tor/torrc
ControlPort 9051
% telnet localhost 9051
Trying 127.0.0.1...
Connected to localhost.
Escape character is '^]'.
AUTHENTICATE
250 OK
GETINFO version
250-version=0.2.5.1-alpha-dev (git-245ecfff36c0cecc)
250 OK
QUIT
250 closing connection
Connection closed by foreign host.
A ControlSocket is a file based socket, so we'll use socat to connect to it...
% cat ~/.tor/torrc
ControlSocket /home/atagar/.tor/socket
% socat UNIX-CONNECT:/home/atagar/.tor/socket STDIN
AUTHENTICATE
250 OK
GETINFO version
250-version=0.2.5.1-alpha-dev (git-245ecfff36c0cecc)
250 OK
QUIT
250 closing connection
HOWTO use the Internet anonymously using Tor and Privoxy en.linuxreviews.org Configuration tips¶
Some websites will log you out if you re-visit (while loggined in using a cookie to identify you) from a different IP. Tor has a feature called long lived ports. You could add the following to torrc to make connections to given ports use the same circut for a long period of time:
LongLivedPorts 80,23,21,22,706,1863,5050,5190,5222,5223,6667,8300,8888
[How to use TOR ?](https://groups.google.com/forum/#!searchin/scrapy-users/tor¶
from scrapy.contrib.downloadermiddleware.retry import RetryMiddleware
#You would have to install tor and polipo from packages and write simple middleware which forces tor
#to change route when scrapy retrying to recieve page:
class RetryChangeProxyMiddleware(RetryMiddleware):
def _retry(self, request, reason, spider):
log.msg('Changing proxy')
tn = telnetlib.Telnet('127.0.0.1', 9051)
tn.read_until("Escape character is '^]'.", 2)
tn.write('AUTHENTICATE "267765"\r\n')
tn.read_until("250 OK", 2)
tn.write("signal NEWNYM\r\n")
tn.read_until("250 OK", 2)
tn.write("quit\r\n")
tn.close()
time.sleep(3)
log.msg('Proxy changed')
return RetryMiddleware._retry(self, request, reason, spider)
#then use it in settings.py:
DOWNLOADER_MIDDLEWARE = {
'spider.middlewares.RetryChangeProxyMiddleware': 600,
}
#and then you just want to send requests through local tor proxy (polipo) which could be done with:
tsocks scrapy crawl spirder
#I've done this long ago but this solution seems ok and, most important, it works
pytorctl.git - УСТАРЕЛ, но работает¶
The following is a simple example of TorCtl usage. This attaches a listener 3 that prints the amount of traffic going over tor each second.
from TorCtl import TorCtl
def newId(host, port, pass):
conn = TorCtl.connect(controlAddr=host, controlPort=port, passphrase=pass)
if conn:
TorCtl.Connection.send_signal(conn, "NEWNYM")
newId('localhost', '9051', 'pass')
#https://gist.github.com/crackcomm/3824079#
В этой библиотеке используется та же команда, что и в коде для telnet
Посты чуть ниже также могут вас заинтересовать
Комментариев нет:
Отправить комментарий