lxml xhtml解析生成字符而不是空格

时间:2014-10-01 12:46:43

标签: python parsing lxml python-requests removing-whitespace

我一直在尝试解析我认为是xml页面(Page的doctype标题):

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

...使用lxml的fromstring方法。我最终获得了我想要的值,只是在它周围有一堆'\ r \ n \ t \ t \ t \ t'字符。通过自我研究,似乎这是由于白色空间然后被解析为这些字符。但是,我也会收到其他字符,如下面的代码所示。

我看过的一些问题可能会让事情变得更快:
Get data between two tags in Python
Removing spaces and non-printable character in Python
upper case html tags encoded in lxml

我使用了split()函数,当没有包含参数时,将该字符串拆分为由一个或多个空格字符分隔的子字符串(即有效删除空格),但这只删除了'\ r \ n \ t \ t \ t \ t'字符。我也尝试过lxml的text_content()方法到同一端。我想知道是否有一种方法可以改变xml页面编码的方式,当使用fromstring解析时将忽略空格(以及其他任何内容)并只返回标记之间的文本。无论如何,在我的代码和结果下面找到(为简洁而缩短了请求代码):


from requests import session
from lxml import html


payload = {'Dictionary':'value'}
reqheaders = {'Dictionary':'value'}

c = session()
loginurl = 'URL'

response = c.post(loginurl, data = payload, headers = reqheaders)
a = response.content
b = html.fromstring(a)
value = b.xpath('//*[@id="content"]/table[4]/tr[1]/td[1]/text()')    # list containing ['30,000\r\n\t\t\t\t Â\xa0\r\n\t\t\t\t  ']
k = value[0].split()  # Another list equal to ['30,000', 'Â']

>>>k[0]
'30,000'  #The value I need

这是我使用xpath从xml页面定位的元素(来自response.content):

<TD title="Volume ahead: 140000" CLASS="DT   ">30,000\r\n\t\t\t\t \xc2\xa0\r\n\t\t\t\t  </TD>

这是我定位的元素(包含空格)的原始来源(来自chrome):

<TD title="Volume ahead: 140000" CLASS="DT   ">30,000

              </TD>

似乎'\ xc2 \ xa0'是令人讨厌的字符,它将我的想法推向编码问题。有关直接获得该值而不处理这些异常字符的有效方法的任何建议都会很好,最好是尽可能少的处理时间。

干杯,

p.s:这是我在python 3.4.1中使用的当前语言环境: ('English_Australia','1252')

任何有关问题澄清的请求,请告诉我。我会尽快回答其他信息。

0 个答案:

没有答案