2016-11-26 55 views
0

我有以下XPath:如何添加非ASCII字符在XPath,在鬥志旺盛

bathroom = response.xpath(「.//div[1][contains(., 'Baños’)]/text()").extract_first() 

而且我得到這個錯誤:

ValueError: All strings must be XML compatible: Unicode or ASCII, no NULL bytes or control characters 

我試圖在這些給出的解決方案其他類似的問題:

Filtering out certain bytes in python

Scrapy xpath utf-8 literals

但沒有解決我的問題!

注:與第一環節的解決方案,我明顯地取代了通過假設word = "baños"「input_string」,和我喜歡錯誤「函數有一個參數,2給出...

誰能幫助?

回答

1

除了字面Baños,你的代碼段包含無效的文字字符串分隔符(單引號和雙引號),這將導致不同的錯誤:

bathroom = response.xpath(「.//div[1][contains(., 'Baños’)]/text()").extract_first() 
         ^      ^

轉換整個XPath表達式爲unicode,如建議第二個鏈接,並修復上面指出的兩個引號應該修復最初的錯誤。下面是一個快速測試使用lxml(其中scrapy罩下使用):

>>> from lxml import etree 
>>> root = etree.fromstring('<root/>') 
>>> root.xpath(u".//div[1][contains(., 'Baños')]/text()") 
[] 
+0

我試過你說的話,但我仍然得到這個錯誤:'ValueError異常:XPath的錯誤:無效的表達.//div [1] [contains(。,'Ba \ xf1os')]/text()' – wj127

+0

即使在實際的scrapy外殼中也可以使用下面的表達式進行測試並且沒有錯誤(請參閱實際代碼中的不同之處,或嘗試從這個代碼並運行在你的機器上):'r = response.xpath(u「.// div [1] [contains(。,'Baños')]/text()」)。extract_first()' – har07

+0

ok,I告訴你我的'* Xpath *'是怎麼樣的(我剪了一下,cos太長了,但基本上是一樣的):'bathroom = response.xpath(u「.//*[@ id ='details' ]/div/div/div/div/div [3]/div [1] [contains(。,'Baños')]/div [contains(。,'Baños')]/div [CON含有雜質)]/DIV /跨度[3] /量程/文本()「)extract_first()' – wj127