如何在xpath中使用matches函数来提取英文单词

时间:2014-05-10 14:46:41

标签: python regex xpath scrapy

我是scrapypython的新手。如何使用xpath提取英语单词?

以下是HTML页面的摘要:

<span title="vacant">
vacant
</span>


<span title="linen">
linen
</span>

如何提取<span tile>字段的英文单词

我试过这样selector.xpath("//span[matches(@title, '\w+')]/text()").extract()。但我总是在上面的句子中出现语法错误。

任何人都能以正确的方式指导我吗?

更新1:

我已经为python安装了lxml包,所以我认为matches函数在这里是有效的。顺便说一下,我使用了contains xpath函数,它运行良好。

这就是我使用contains函数的方式:

selector.xpath("//span[contains(@title,'.')]/text()").extract()

更新2:

其实我在拼写一本英汉词典,首先,我想提取一个英文单词(一个随机单词),其中列出了HTML源代码,其次,我&# 39; d想提取对应于HTML源代码的英文单词的中文释义:

<span title="adj. [Chinese paraphrase of vacant]" style="display:block;">
adj. [Chinese paraphrase of vacant]
</span>

我使用上面列出的contains函数来提取对我有用的中文释义。

但是我如何处理matches函数来提取英文单词。

我是否明确了目标?

更新3:

我抓的页面是here,请查看此页面的来源

更新4:

matchesxpath函数的错误消息如下:

>>> sel.xpath("//span[matches(@title, '\w')]/text()").extract()
Traceback (most recent call last):
File "<console>", line 1, in <module>
File "/usr/local/lib/python2.7/dist-packages/scrapy/selector/unified.py", line 90, in     xpath
raise ValueError("Invalid XPath: %s" % query)
ValueError: Invalid XPath: //span[matches(@title, '\w')]/text()

2 个答案:

答案 0 :(得分:0)

你能试试这段代码吗?

words = selector.xpath('//ul[@id="word_list_1"]/li')
for w in words:
    word_english = w.xpath('./div[@class="word_main_list_w"]/span/@title').extract()
    word_chinese = w.xpath('./div[@class="word_main_list_s"]/span/text()').extract()

答案 1 :(得分:0)

经过一些研究后我发现了page。我使用仅支持scrapy 0.22.2的{​​{1}},您可以参考xpath 1.0不支持matches功能的XML Path Language (XPath) Version 1.0。所以我必须在python级别处理这个案例。为了提取所有有效的英语单词,我必须:

wordList = []

def isAllAlpha(s):
    format = 'abcdefghijklmnopqrstuvwxyz'

    for c in s:
        if not c in format:
            return False

    return True

def initWordList()
    for i in \
        sel.xpath("//span[not(contains(@title, '.'))]/text()").extract():
            temp = i.strip().lstrip('\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t')
                            .rstrip('\r\n\t\t\t\t\t\t\t\t\t\t\t\t')
            if isAllAlpha(temp):
                wordList.append(temp)

这可能是愚蠢的,但到目前为止我找不到更好的方法。