我的问题是当我需要授权访问它时,我不知道如何从xml文件中删除。
所以我的xml文件在url =“ftp://ftp.Dom.com/BlaBla/”user =“我自己”传递=“秘密”。
在scrapy的文档中,我发现了类似于html的内容,我尝试根据自己的需要调整它。
这是我的代码atm:
class kelly(XMLFeedSpider):
name = "kelly"
allowed_domains = []
start_urls = ["ftp://ftp.Dom.com/BlaBla/"]
itertag='Job'
def __init__(self, name=None, **kwargs):
XMLFeedSpider.__init__(self)
self.secret_users = {}
pipe_import = ImportLaunch()
pipe_import.pipe = Pipe.objects.first()
pipe_import.save()
self.pipe_import = pipe_import
def parse_node(self, response):
import pdb
pdb.set_trace()
return [FormRequest.from_response(response,
formdata={'username': 'myself', 'password': 'secret'},
callback=self.parse_after_log)]
def parse_after_log(self,response):
# check login succeed before going on
if "authentication failed" in response.body:
self.log("Login failed", level=log.ERROR)
return
# We've successfully authenticated, let's have some fun!
else:
return Request(url="ftp://ftp.Dom.com/BlaBla/kelly_polarbear.xml", callback=self.parse_tastypage)
def parse_tastypage(self,response,node):
print 'I passed !!'
但我的信息仍然是
`2012-03-01 12:27:28+0100 [kelly] ERROR: Error downloading <GET ftp://ftp.kellyservices.com`/Polarbear/>: 530 User anonymous cannot log in.
感谢您的帮助
答案 0 :(得分:0)
如何更简单的方法?
import requests
from lxml import objectify
r = requests.get('http://www.example.com/', auth('username','password'))
root = objectify.fromstring(r.result)
# Now root is an object tree representing your XML
答案 1 :(得分:0)
未与XMLFeedSpider
合作,但与BaseSpider
inherits的XMLFeedSpider
合作。
您的.xml文件位于ftp服务器上,但FormRequest会创建HTTP POST请求,当加载带有身份验证表单的页面时,该请求通常来自parse
方法。所以我认为这不会起作用。
传递HttpAuthMiddleware有basic access authentication,但看起来它不适用于FTP(尽管你可以试试)。
我认为解决方案是编写自己的下载中间件,它将使用(尚未尝试过)从FTP服务器下载文件:
urllib2.urlopen("ftp://user:password@host.example.com/rest/of/the/url")