试图从html列表中删除转义符号和空格。 我正在使用normalize-space(),但无法将其应用于整个列表。 我正在使用scrapy shell测试我的代码
scrapy shell https://universalmotors.ru/boardmotors/suzuki/suzuki-df-4-s/
<tr itemprop="additionalProperty" itemscope="" itemtype="http://schema.org/PropertyValue">
<td class="label_table" itemprop="name">Мощность двигателя (л.с.)</td>
<td class="value_table">
<span itemprop="value">4</span>
</td>
</tr>
<tr itemprop="additionalProperty" itemscope="" itemtype="http://schema.org/PropertyValue">
<td class="label_table" itemprop="name">Тип масла в двигателе</td>
<td class="value_table">
<span itemprop="value">10W-30 10W-40</span>
</td>
</tr>
这是我尝试过的
[item.normalize-space() for item in response.xpath('//tr[@itemprop="additionalProperty"]').extract()]
但是我遇到了错误
Traceback (most recent call last):
File "<console>", line 1, in <module>
File "<console>", line 1, in <listcomp>
AttributeError: 'str' object has no attribute 'normalize'
仅适用于
[item.strip() for item in response.xpath('//tr[@itemprop="additionalProperty"]').extract()]
然后我开始关注
['<tr itemprop="additionalProperty" itemscope="" itemtype="http://schema.org/PropertyValue">\n <td class="label_table" itemprop="name">Мощность двигателя (л.с.)</td>\n <td class="value_table">\n <span itemprop="value">4</span>\n </td>\n </tr>', '<tr itemprop="additionalProperty" itemscope="" itemtype="http://schema.org/PropertyValue">\n <td class="label_table" itemprop="name">Тип масла в двигателе</td>\n <td class="value_table">\n
我的目标是变得顺畅:
Мощность двигателя (л.с.) 4
Тип масла в двигателе 10W-30 10W-40
Объем масла в двигателе 700
答案 0 :(得分:2)
normalize-space是XPath函数,不是Python函数或Python对象的方法。因此,您需要像这样在XPath表达式中使用它:
for item in response.xpath('//tr[@itemprop="additionalProperty"]'):
yield {
'name': item.xpath('normalize-space(./*[@itemprop="name"])').extract_first(),
'value': item.xpath('normalize-space(./*[@itemprop="value"])').extract_first()
}
答案 1 :(得分:1)
您应该考虑使用html-text而非XPath的normalize-space
来实现目标。
>>> from html_text import extract_text
>>> extract_text('''
... <tr itemprop="additionalProperty" itemscope="" itemtype="http://schema.org/PropertyValue">
... <td class="label_table" itemprop="name">Мощность двигателя (л.с.)</td>
... <td class="value_table">
... <span itemprop="value">4</span>
... </td>
... </tr>
... <tr itemprop="additionalProperty" itemscope="" itemtype="http://schema.org/PropertyValue">
... <td class="label_table" itemprop="name">Тип масла в двигателе</td>
... <td class="value_table">
... <span itemprop="value">10W-30 10W-40</span>
... </td>
... </tr>
... ''')
'Мощность двигателя (л.с.) 4\nТип масла в двигателе 10W-30 10W-40'