如何使Scrapy爬网不需要用户名和密码的FTP服务器?我尝试将URL添加到起始URL中,但是Scrapy需要FTP访问的用户名和密码。我已经start_requests()
提供了一个默认值(使用Linux的ftp
命令尝试使用用户名“匿名”和空白密码),但是现在我从服务器获得了550个响应。
使用Scrapy爬网FTP服务器的正确方法是什么?理想情况下,该方法可与不需要用户名或密码进行访问的所有FTP服务器一起使用?
它没有记录,但是Scrapy内置了此功能。有一个FTPDownloadHandler
可以处理双绞线的FTP下载FTPClient
。您不需要直接调用它,如果请求了URL ,它将自动打开ftp
。
在您的Spider中,继续使用scrapy.http.Request
class,但是在meta
字典中的ftp_user
和ftp_password
项目中提供ftp凭据:
yield Request(url, meta={'ftp_user': 'user', 'ftp_password': 'password'})
ftp_user
并且ftp_password
是必需的。也有两个可选的按键,你可以提供:
ftp_passive
(默认情况下启用)设置FTP连接被动模式ftp_local_filename
:
当您需要下载文件并将其保存在本地而无需在Spider回调中处理响应时,后者非常有用。
至于匿名用法,要提供的凭据取决于ftp服务器本身。用户是“匿名”用户,密码通常是您的电子邮件,任何密码或空白。
仅供参考,从规范中引用:
匿名FTP是存档站点允许对其信息存档进行常规访问的一种方法。这些站点创建一个名为“匿名”的特殊帐户。用户“匿名”具有对存档主机的访问权限,以及某些操作限制。实际上,唯一允许的操作是使用FTP登录,列出一组有限目录的内容以及检索文件。某些站点限制了列出匿名用户也可以看到的目录的内容。请注意,通常不允许“匿名”用户将文件传输到存档站点,而只能从此类站点检索文件。
传统上,这个特殊的匿名用户帐户接受任何字符串作为密码,尽管通常使用密码“来宾”或一个人的电子邮件(电子邮件)地址。现在,某些存档站点明确要求用户提供电子邮件地址,并且不允许使用“来宾”密码登录。提供电子邮件地址是一种礼貌,使存档站点操作员可以了解谁在使用他们的服务。
在控制台上进行尝试通常有助于查看您应该使用什么密码,欢迎消息通常会明确指出密码要求。实际示例:
$ 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:
这是mozilla公共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
如果运行蜘蛛,您将在控制台上看到README文件的内容:
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.
...
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句