Rastreamento de sites e serviços Onion com Scrapy e OnionScan
Scrapy é uma biblioteca Python popular para web scraping e crawling. Ele permite que você extraia facilmente dados de sites, siga links para outras páginas e execute várias outras tarefas. Neste tutorial, veremos como usar o Scrapy para rastrear um site comum e um Onion Service , que é um serviço oculto na rede TOR. Também usaremos a biblioteca OnionScan para escanear o Onion Service e extrair informações do relatório de escaneamento. Por fim, usaremos o Elasticsearch para indexar os dados e o Redis para armazená-los em um cache.
Para começar, certifique-se de ter Scrapy, OnionScan, Elasticsearch e Redis instalados. Você também precisará ter o daemon TOR em execução em sua máquina. Em seguida, crie um novo projeto Scrapy e spider usando os seguintes comandos:
scrapy startproject myproject
cd myproject
scrap
import socks
import socket
from elasticsearch import Elasticsearch
import redis
from onionscan import Onion
class CombinedSpider(scrapy.Spider):
name = 'combinedspider'
start_urls = ['https://www.example.com/', 'http://exampleonion.onion/']
def __init__(self, *args, **kwargs):
# Set up TOR proxy
socks.setdefaultproxy(socks.PROXY_TYPE_SOCKS5, "127.0.0.1", 9050)
socket.socket = socks.socksocket
# Set up Elasticsearch client
self.es = Elasticsearch(['http://localhost:9200'])
# Set up Redis client
self.redis = redis.Redis(host='localhost', port=6379, db=0)
# Set up OnionScan instance
self.onion = Onion()
super(CombinedSpider, self).__init__(*args, **kwargs)
def parse(self, response):
if response.url.startswith('http://exampleonion.onion/'):
# Scan the Onion Service
report = self.onion.scan(response.url)
# Extract data from report
data = {
'summary': report.summary(),
'services': report.services(),
'links': report.links(),
}
# Index data in Elasticsearch
self.es.index(index='onionindex', doc_type='oniontype', body=data)
# Store data in Redis cache
self.redis.set('last_scanned_onion', data)
else:
# Extract data from page
data = {
'title': response.css('h1::text').get(),
'body': response.css('p').get(),
}
# Index data in Elasticsearch
self.es.index(index='myindex', doc_type='mytype', body=data)
# Store data in Redis cache
self.redis.set('last_crawled_page', data)
# Follow links to other pages
for href in response.css('a::attr(href)'):
yield response.follow(href, self.parse)
Para executar o spider, use o seguinte comando:
scrapy crawl combinedspider
Espero que este tutorial tenha sido útil! Entre em contato se tiver alguma dúvida ou sugestão.





































![O que é uma lista vinculada, afinal? [Parte 1]](https://post.nghiatu.com/assets/images/m/max/724/1*Xokk6XOjWyIGCBujkJsCzQ.jpeg)