avoid stripping trailing spaces on lxml-based selectors. closes #270

This commit is contained in:
Pablo Hoffman 2010-10-27 21:39:28 -02:00
parent 7f646541c3
commit 22283854d4
2 changed files with 11 additions and 6 deletions

View File

@ -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:

View File

@ -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()),
["<li>one</li>", "<li>two</li>", "<li>four</li>", "<li>five</li>", "<li>six</li>"])
self.assertEqual(divtwo.select("./ul/li").extract(),
self.assertEqual(map(unicode.strip, divtwo.select("./ul/li").extract()),
["<li>four</li>", "<li>five</li>", "<li>six</li>"])
self.assertEqual(divtwo.select(".//li").extract(),
self.assertEqual(map(unicode.strip, divtwo.select(".//li").extract()),
["<li>four</li>", "<li>five</li>", "<li>six</li>"])
self.assertEqual(divtwo.select("./li").extract(),
[])
@libxml2debug
def test_dont_strip(self):
hxs = self.hxs_cls(text='<div>fff: <a href="#">zzz</a></div>')
self.assertEqual(hxs.select("//text()").extract(),
[u'fff: ', u'zzz'])
@libxml2debug
def test_selector_namespaces_simple(self):
body = """