Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/304.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在python中解析HTML中嵌入的固定格式数据_Python_Html_Google App Engine_Parsing_Html Content Extraction - Fatal编程技术网

在python中解析HTML中嵌入的固定格式数据

在python中解析HTML中嵌入的固定格式数据,python,html,google-app-engine,parsing,html-content-extraction,Python,Html,Google App Engine,Parsing,Html Content Extraction,我正在使用谷歌的appengine api from google.appengine.api import urlfetch 获取网页。结果 result = urlfetch.fetch("http://www.example.com/index.html") 是html内容的字符串(在result.content中)。问题是我想要解析的数据并不是真正的HTML格式,所以我认为使用python HTML解析器对我来说是行不通的。我需要解析html文档主体中的所有纯文本。唯一的问题是url

我正在使用谷歌的appengine api

from google.appengine.api import urlfetch
获取网页。结果

result = urlfetch.fetch("http://www.example.com/index.html")
是html内容的字符串(在result.content中)。问题是我想要解析的数据并不是真正的HTML格式,所以我认为使用python HTML解析器对我来说是行不通的。我需要解析html文档主体中的所有纯文本。唯一的问题是urlfetch返回整个HTML文档的单个字符串,删除所有换行符和额外的空格

编辑: 好的,我尝试获取一个不同的URL,显然urlfetch并没有删除换行符,我试图解析的是原始网页,它以这种方式为HTML文件提供服务。。。 结束编辑

如果文档是这样的:

<html><head></head><body>
AAA 123 888 2008-10-30 ABC
BBB 987 332 2009-01-02 JSE
...
A4A       288        AAA
</body></html>

但最终的列表都只是一个元素。我在谷歌的urlfetch函数中没有看到任何不删除换行符的选项

你知道如何解析这些数据吗?也许我需要换一种方式取它


提前谢谢

我能想到的唯一建议是将其解析为具有固定宽度的列。HTML不考虑换行符


如果您可以控制源数据,请将其放入文本文件而不是HTML。

我能想到的唯一建议是将其解析为具有固定宽度的列。HTML不考虑换行符


如果您可以控制源数据,请将其放入文本文件而不是HTML。

我知道文档的格式是您发布的格式。在这种情况下,我同意像这样的解析器可能不是一个好的解决方案

我假设您已经用一个正则表达式(如

import re
data = re.findall('<body>([^\<]*)</body>', result)[0]
重新导入

data=re.findall(“([^\我知道文档的格式是您发布的格式。在这种情况下,我同意像这样的解析器可能不是一个好的解决方案

我假设您已经用一个正则表达式(如

import re
data = re.findall('<body>([^\<]*)</body>', result)[0]
重新导入

data=re.findall(')([^\一旦将正文文本作为单个长字符串,就可以按如下方式将其分解。 这假定每条记录有26个字符

body= "AAA 123 888 2008-10-30 ABCBBB 987     2009-01-02 JSE...A4A     288            AAA"
for i in range(0,len(body),26):
    line= body[i:i+26]
    # parse the line

将正文文本作为单个长字符串后,可以按如下方式将其分解。 这假定每条记录有26个字符

body= "AAA 123 888 2008-10-30 ABCBBB 987     2009-01-02 JSE...A4A     288            AAA"
for i in range(0,len(body),26):
    line= body[i:i+26]
    # parse the line

编辑:阅读理解是一件令人向往的事情。我错过了一点关于行之间没有分隔符的内容,这就是本文的重点,不是吗?所以,不管我的答案是什么,它实际上并不相关


如果您知道每行有5个空格分隔的列,那么(一旦剥离了html),您可以执行以下操作(未测试):


当然,您可以根据需要更改拆分字符和列数(甚至可能将它们作为附加参数传递到生成器函数中),并酌情添加错误处理。

编辑:阅读理解是一件令人向往的事情。我错过了一点关于行之间没有分隔符的内容,这可能是本文的重点,不是吗?因此,不管我的答案是什么,它实际上并不相关


如果您知道每行有5个空格分隔的列,那么(一旦剥离了html),您可以执行以下操作(未测试):


当然,您可以根据需要更改拆分字符和列数(甚至可能将它们作为附加参数传递到生成器函数中),并根据需要添加错误处理。

有关将字符串
s
拆分为26个字符块的进一步建议:

列表如下:

>>> [s[x:x+26] for x in range(0, len(s), 26)]
['AAA 123 888 2008-10-30 ABC',
 'BBB 987     2009-01-02 JSE',
 'A4A     288            AAA']
作为发电机:

>>> for line in (s[x:x+26] for x in range(0, len(s), 26)): print line
AAA 123 888 2008-10-30 ABC
BBB 987     2009-01-02 JSE
A4A     288            AAA

如果Python 2.x中的
s
非常长,则将
range()
替换为
xrange()

关于将字符串
s
拆分为26个字符块的进一步建议:

列表如下:

>>> [s[x:x+26] for x in range(0, len(s), 26)]
['AAA 123 888 2008-10-30 ABC',
 'BBB 987     2009-01-02 JSE',
 'A4A     288            AAA']
作为发电机:

>>> for line in (s[x:x+26] for x in range(0, len(s), 26)): print line
AAA 123 888 2008-10-30 ABC
BBB 987     2009-01-02 JSE
A4A     288            AAA

如果Python 2.x中的
s
非常长,则将
range()
替换为
xrange()

我无法控制源数据…可能我可以尝试解析它,因为数据是固定宽度格式的。我无法控制源数据…可能我可以尝试解析它,因为数据是固定宽度格式的。
>>> for line in (s[x:x+26] for x in range(0, len(s), 26)): print line
AAA 123 888 2008-10-30 ABC
BBB 987     2009-01-02 JSE
A4A     288            AAA