我是scrapy
和python
的新手。如何使用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:
matches
中xpath
函数的错误消息如下:
>>> 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()
答案 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)
这可能是愚蠢的,但到目前为止我找不到更好的方法。