mirror of https://github.com/scrapy/scrapy.git
avoid stripping trailing spaces on lxml-based selectors. closes #270
This commit is contained in:
parent
7f646541c3
commit
22283854d4
|
|
@ -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:
|
||||
|
|
|
|||
|
|
@ -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 = """
|
||||
|
|
|
|||
Loading…
Reference in New Issue