1

我为这个网站用 Python 编写了一个简单的解析器。以下是我的代码的一部分。
我的问题是:

  1. 我怎样才能不仅提取,p[1]而且提取其余部分p[2]p[3]...
  2. 我怎样才能将它们彼此分开?

text1 = xmldata.xpath('//p[@class="MsoNormal"][1]//text()')  
a=''  
for i in text1:  
a=a+i.encode('cp1251')  
print a
4

3 回答 3

2

只需删除[1]停止过滤,您的返回值将是一个列表,您可以将其传递''.join()给连接(或者'\n'.join()如果您希望每个字符串之间有换行符)。

text_sections = xmldata.xpath('//p[@class="MsoNormal"]//text()')
print u'\n'.join(text_sections).encode('cp1251')
于 2013-10-08T12:22:55.687 回答
1

您可以使用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')
于 2013-10-08T20:57:14.137 回答
0

在不知道任何背景的情况下,我只能提出这样的建议:

texts = list();
index = 0;
while(True):
    index += 1;
    try:
        temp = xmldata.xpath('//p[@class="MsoNormal"][%i]//text()' % index);
    except:
        break;
    else:
        texts.append();

在这段代码之后,您将拥有与您的相同元素的列表text1

于 2013-10-08T12:11:01.510 回答