我为这个网站用 Python 编写了一个简单的解析器。以下是我的代码的一部分。
我的问题是:
- 我怎样才能不仅提取,
p[1]
而且提取其余部分p[2]
,p[3]
... - 我怎样才能将它们彼此分开?
text1 = xmldata.xpath('//p[@class="MsoNormal"][1]//text()')
a=''
for i in text1:
a=a+i.encode('cp1251')
print a
只需删除[1]
停止过滤,您的返回值将是一个列表,您可以将其传递''.join()
给连接(或者'\n'.join()
如果您希望每个字符串之间有换行符)。
text_sections = xmldata.xpath('//p[@class="MsoNormal"]//text()')
print u'\n'.join(text_sections).encode('cp1251')
您可以使用lxml.html.parse()
接受类文件对象的函数,例如urllib.urlopen()
返回的对象。请参阅有关的 lxml 文档。
然后,正如@CharlesDuffy 建议的那样,您可以使用换行符连接您选择u'\n'.join()
的元素中的所有文本元素p
\n
另外,我建议一直使用 unicode 字符串,直到您需要打印或写入文件。
import urllib
import lxml.html
page = urllib.urlopen('http://www.toponymic-dictionary.in.ua/index.php?option=com_content&view=section&layout=blog&id=1&Itemid=2')
# use "page" as a file-like object
xmldata = lxml.html.parse(page).getroot()
ptexts = xmldata.xpath('//p[@class="MsoNormal"]//text()')
joined_text = u'\n'.join(ptexts)
print joined_text.encode('cp1251')
在不知道任何背景的情况下,我只能提出这样的建议:
texts = list();
index = 0;
while(True):
index += 1;
try:
temp = xmldata.xpath('//p[@class="MsoNormal"][%i]//text()' % index);
except:
break;
else:
texts.append();
在这段代码之后,您将拥有与您的相同元素的列表text1