Usar o Scrapy para rastejar um servidor FTP público
ftp
), mas agora eu recebo 550 respostas do servidor.
Qual é o caminho certo para rastejar servidores FTP com Scrapy? trabalhar com todos os servidores FTP que não necessitam de um utilizador ou senha de acesso?
1 answers
Não está documentado, mas o Scrapy tem esta funcionalidade incorporada. Existe um FTPDownloadHandler
que lida com a transferência FTP usando o twisted's FTPClient
. Você não precisa chamá-lo diretamente, ele iria automaticamente ligar Se houver um url ftp
solicitado.
Na tua aranha, continua a usar scrapy.http.Request
classe, mas forneça as credenciais ftp no dicionário meta
em ftp_user
e ftp_password
itens:
yield Request(url, meta={'ftp_user': 'user', 'ftp_password': 'password'})
ftp_user
e ftp_password
são necessários. Também há duas chaves opcionais que pode fornecer:
-
ftp_passive
(por omissão, activo) define o modo passivo de ligação FTP -
ftp_local_filename
:- Se não for dado, os dados do ficheiro virão na resposta.corpo, como uma resposta escamosa normal, o que implica que todo o arquivo estará na memória.
- Se for dado, os dados do ficheiro serão gravados num ficheiro local com o nome indicado Isso ajuda ao baixar arquivos muito grandes para evitar problemas de memória. Além disso, para conveniência o nome do arquivo local também será dado no corpo de resposta.
Este último é útil quando você precisa baixar um arquivo e salvá-lo localmente sem processar a resposta no callback aranha.
Quanto à utilização anónima, as credenciais a fornecer dependem do próprio servidor ftp. O Usuário é "anônimo" e senha é geralmente o seu e-mail, qualquer senha ou em branco.
Para tua informação, citação da especificação :
FTP anónimo é um meio pelo qual os sites de arquivo permitem o acesso geral aos seus arquivos de informação. Estes sites criam um especial conta chamada "anónima". O utilizador "anónimo" tem acesso limitado direitos ao host do arquivo, bem como algumas restrições operacionais. Em de fato, as únicas operações permitidas são o login usando FTP, listando o conteúdo de um conjunto limitado de diretórios, e recuperando arquivos. Alguns sites limitam o conteúdo de um diretório listando um usuário anônimo também consigo ver. Note que os usuários "anônimos" geralmente não são permitidos para transferir arquivos para o site de arquivo, mas só pode recuperar arquivos de tal site.
Tradicionalmente, esta conta de utilizador anónima especial aceita qualquer texto como senha, embora seja comum usar a senha endereço de" convidado " ou de correio electrónico (e-mail). Alguns locais de arquivo agora Peça explicitamente o endereço de E-mail do Usuário e não permitirá login com a senha de "convidado". Fornecimento de um e-mail o endereço é a cortesia que permite aos operadores do site de arquivo ter alguma ideia de quem é usando os seus serviços.
Experimentá-lo na consola normalmente ajuda a ver qual a senha que você deve usar, a mensagem de boas-vindas geralmente anota explicitamente os requisitos de senha. Exemplo do mundo Real:
$ ftp [email protected]
Connected to icebox.stratus.com.
220 Stratus-FTP-server
331 Anonymous login ok, send your complete email address as your password.
Password:
Aqui está um exemplo de trabalho para mozilla public FTP:
import scrapy
from scrapy.http import Request
class FtpSpider(scrapy.Spider):
name = "mozilla"
allowed_domains = ["ftp.mozilla.org"]
handle_httpstatus_list = [404]
def start_requests(self):
yield Request('ftp://ftp.mozilla.org/pub/mozilla.org/firefox/releases/README',
meta={'ftp_user': 'anonymous', 'ftp_password': ''})
def parse(self, response):
print response.body
Se você executar a aranha, você veria o conteúdo do arquivo README na consola:
Older releases have known security vulnerablities, which are disclosed at
https://www.mozilla.org/security/known-vulnerabilities/
Mozilla strongly recommends you do not use them, as you are at risk of your computer
being compromised.
...