在python中解析HTML中嵌入的固定格式数据
我正在使用谷歌的appengine api在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
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