From 22283854d49de2a4b01fd114880b486f45c5e3f0 Mon Sep 17 00:00:00 2001 From: Pablo Hoffman Date: Wed, 27 Oct 2010 21:39:28 -0200 Subject: [PATCH] avoid stripping trailing spaces on lxml-based selectors. closes #270 --- scrapy/selector/lxmlsel.py | 5 ++--- scrapy/tests/test_selector.py | 12 +++++++++--- 2 files changed, 11 insertions(+), 6 deletions(-) diff --git a/scrapy/selector/lxmlsel.py b/scrapy/selector/lxmlsel.py index 55d1a48e6..cc32a81f4 100644 --- a/scrapy/selector/lxmlsel.py +++ b/scrapy/selector/lxmlsel.py @@ -4,7 +4,6 @@ XPath selectors based on lxml from lxml import etree -from scrapy.utils.python import flatten from scrapy.utils.misc import extract_regex from scrapy.utils.trackref import object_ref from scrapy.utils.python import unicode_to_str @@ -65,9 +64,9 @@ class XPathSelector(object_ref): def extract(self): try: return etree.tostring(self.root, method=self._tostring_method, \ - encoding=unicode).strip() + encoding=unicode) except (AttributeError, TypeError): - return unicode(self.root).strip() + return unicode(self.root) def register_namespace(self, prefix, uri): if self.namespaces is None: diff --git a/scrapy/tests/test_selector.py b/scrapy/tests/test_selector.py index 375ef3464..5ee0c6625 100644 --- a/scrapy/tests/test_selector.py +++ b/scrapy/tests/test_selector.py @@ -97,15 +97,21 @@ class XPathSelectorTestCase(unittest.TestCase): x = self.hxs_cls(response) divtwo = x.select('//div[@class="two"]') - self.assertEqual(divtwo.select("//li").extract(), + self.assertEqual(map(unicode.strip, divtwo.select("//li").extract()), ["
  • one
  • ", "
  • two
  • ", "
  • four
  • ", "
  • five
  • ", "
  • six
  • "]) - self.assertEqual(divtwo.select("./ul/li").extract(), + self.assertEqual(map(unicode.strip, divtwo.select("./ul/li").extract()), ["
  • four
  • ", "
  • five
  • ", "
  • six
  • "]) - self.assertEqual(divtwo.select(".//li").extract(), + self.assertEqual(map(unicode.strip, divtwo.select(".//li").extract()), ["
  • four
  • ", "
  • five
  • ", "
  • six
  • "]) self.assertEqual(divtwo.select("./li").extract(), []) + @libxml2debug + def test_dont_strip(self): + hxs = self.hxs_cls(text='
    fff: zzz
    ') + self.assertEqual(hxs.select("//text()").extract(), + [u'fff: ', u'zzz']) + @libxml2debug def test_selector_namespaces_simple(self): body = """