Нужен синтаксический анализ XML-файла с помощью scrapy AUTH - PullRequest
0 голосов
/ 01 марта 2012

Моя проблема в том, что я не знаю, как извлечь файл XML, когда мне нужно авторизоваться для доступа к нему.

, поэтому мой файл XML находится по адресу url = "ftp://ftp.Dom.com/BlaBla / "user =" self "pass =" secret ".

В документации 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.

спасибо за помощь

Ответы [ 2 ]

0 голосов
/ 01 марта 2012

Не работал с XMLFeedSpider, но работал с BaseSpider, из которого XMLFeedSpider наследует .

Ваш XML-файл находится на FTP-сервере, но FormRequest создаетHTTP POST-запрос, который обычно выдается методом parse при загрузке страницы с формой аутентификации.Поэтому я думаю, что здесь это не сработает.

HttpAuthMiddleware для прохождения через базовая аутентификация доступа , но, похоже, не будет работать с FTP (хотявы можете попробовать).

Я думаю, что решение состоит в том, чтобы написать собственное промежуточное ПО для загрузчиков, которое будет загружать файлы с FTP-серверов, используя (не пробовал):

urllib2.urlopen("ftp://user:password@host.example.com/rest/of/the/url")
0 голосов
/ 01 марта 2012

Как насчет более простого подхода?

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
...