使用Scrapy爬网公共FTP服务器

假天青

如何使Scrapy爬网不需要用户名和密码的FTP服务器?我尝试将URL添加到起始URL中,但是Scrapy需要FTP访问的用户名和密码。我已经start_requests()提供了一个默认值(使用Linux的ftp命令尝试使用用户名“匿名”和空白密码),但是现在我从服务器获得了550个响应。

使用Scrapy爬网FTP服务器的正确方法是什么?理想情况下,该方法可与不需要用户名或密码进行访问的所有FTP服务器一起使用?

ec

它没有记录,但是Scrapy内置了此功能。有一个FTPDownloadHandler可以处理双绞线的FTP下载FTPClient您不需要直接调用它,如果请求URL ,它将自动打开ftp

在您的Spider中,继续使用scrapy.http.Requestclass,但是在meta字典中的ftp_userftp_password项目中提供ftp凭据

yield Request(url, meta={'ftp_user': 'user', 'ftp_password': 'password'})

ftp_user并且ftp_password是必需的。也有两个可选的按键,你可以提供:

  • ftp_passive (默认情况下启用)设置FTP连接被动模式
  • ftp_local_filename
    • 如果未提供,则文件数据将作为正常的scrapy Response出现在response.body中,这意味着整个文件将存储在内存中。
    • 如果给定的话,文件数据将以给定的名称保存在本地文件中。这在下载很大的文件时可以避免内存问题。另外,为方便起见,本地文件名也将在响应正文中给出。

当您需要下载文件并将其保存在本地而无需在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] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

我正在使用Scrapy爬网数据,但是服务器阻止了我的IP

来自分类Dev

使用scrapy爬网

来自分类Dev

如何使用python编写不间断爬网程序并在服务器上运行它?

来自分类Dev

使用crontab使用scrapy调度爬网

来自分类Dev

使用Scrapy从网站爬网图片

来自分类Dev

使用Scrapy进行递归Web爬网

来自分类Dev

公共FTP服务器需要SSL吗?

来自分类Dev

使用Nginx的公共服务器

来自分类Dev

使用FTP同步服务器

来自分类Dev

使用scrapy.js通过启动爬网onclick页面

来自分类Dev

使用python scrapy进行动态网址爬网

来自分类Dev

Scrapy LinkExtractor爬网使用父目录的链接

来自分类Dev

Scrapy嵌套页面爬网

来自分类Dev

使用外部服务器上的公共目录

来自分类Dev

检查公共远程ftp服务器上是否存在文件

来自分类Dev

C#使用FTP服务器目录填充TreeView

来自分类Dev

使用wget从ftp服务器下载选择目录

来自分类Dev

如何使用FtpWebRequest与FTP服务器正确断开连接

来自分类Dev

使用php在ftp服务器上显示文件

来自分类Dev

使用ftplib连接到FTP TLS 1.2服务器

来自分类Dev

使用kubernetes的ftp服务器无法正常工作

来自分类Dev

C#使用FTP服务器目录填充TreeView

来自分类Dev

使用Telnet检查FTP服务器是被动还是主动

来自分类Dev

使用Linux终端从FTP服务器删除文件

来自分类Dev

如何使用php运行ftp服务器?

来自分类Dev

使用bash脚本从ftp服务器下载多个文件

来自分类Dev

如何使用Linux递归搜索FTP服务器?

来自分类Dev

使用vsftpd的FTP服务器:配置SSL / TLS

来自分类Dev

使用Indy将文件上传到FTP服务器