没有记录,但是 Scrapy 内置了这个功能。有一个FTPDownloadHandler 使用twisted 的FTPClient 处理FTP 下载。您不需要直接调用它,如果请求了ftp url,它会automagically turn on。
在您的蜘蛛中,继续使用scrapy.http.Request 类,但在ftp_user 和ftp_password 项中的meta 字典中提供ftp 凭据:
yield Request(url, meta={'ftp_user': 'user', 'ftp_password': 'password'})
ftp_user 和 ftp_password 是必需的。您还可以提供two optional keys:
-
ftp_passive(默认启用)设置 FTP 连接被动模式
-
ftp_local_filename:
- 如果没有给出,文件数据将进入response.body,作为一个普通的scrapy Response,
这意味着整个文件将在内存中。
- 如果给定,文件数据将以给定名称保存在本地文件中
这有助于下载非常大的文件以避免内存问题。此外,对于
为方便起见,本地文件名也将在响应正文中给出。
当您需要下载文件并将其保存在本地而不处理蜘蛛回调中的响应时,后者很有用。
至于匿名使用,提供什么凭据取决于 ftp 服务器本身。用户是“匿名的”,密码通常是您的电子邮件、任何密码或空白。
仅供参考,引用自specification:
匿名 FTP 是存档站点允许一般访问的一种方式
到他们的信息档案。这些网站创造了一个特殊的
称为“匿名”的帐户。用户“匿名”的访问权限有限
存档主机的权利,以及一些操作限制。在
事实上,唯一允许的操作是使用 FTP 登录,列出
一组有限目录的内容,并检索文件。
一些网站限制列出匿名用户的目录的内容
也可以看到。请注意,通常不允许“匿名”用户
将文件传输到存档站点,但只能检索文件
来自这样的网站。
传统上,这个特殊的匿名用户帐户接受任何字符串
作为密码,尽管通常使用密码
“客人”或某人的电子邮件(e-mail)地址。一些档案网站
现在明确询问用户的电子邮件地址并且不允许
使用“访客”密码登录。提供电子邮件地址是
礼貌,允许存档站点操作员了解谁是
使用他们的服务。
在控制台上尝试通常有助于了解您应该使用什么密码,欢迎消息通常会明确说明密码要求。真实世界的例子:
$ ftp anonymous@ftp.stratus.com
Connected to icebox.stratus.com.
220 Stratus-FTP-server
331 Anonymous login ok, send your complete email address as your password.
Password:
这是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
如果你运行蜘蛛,你会在控制台上看到README file 的内容:
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.
...