我不明白为什么下面的代码在使用Scrapy Selector时不起作用。
在scrapy shell中(为了易于复制,但问题在蜘蛛中仍然是相同的):
from scrapy.selector import Selector
body = '''<html>
<body>
<li>
<p>1</p>
<p>2</p>
<p>3</p>
</li>
<li>
<p>4</p>
<p>5</p>
<p>6</p>
</li>
<li>
<p>7</p>
<p>8</p>
<p>9</p>
</li>
</body>
</html>'''
sel = Selector(text=body, type="html")
for elem in sel.xpath('//body'):
first = elem.xpath('.//li/p[1]/text()').get()
print(first)
它会打印:
当它应该打印时:
1
4
7
有什么办法解决这个问题吗?
谢谢
1条答案
按热度按时间2w2cym1i1#
也许你可以用.get()方法来获取数据,然后用.getall()来替换。这个方法会以列表的形式给予所有的数据,通过它,你可以在python切片的帮助下得到你想要的数据。
或者,在其他方面,可能会有一个变化,即每个“li”标记中的类名都不相同,或者您可能必须在xpath URL中使用pass the class="”。
**注意:**而不是使用以下路径获取数据:“elem.xpath('.//li/p[1]/text()').get()”,您可以使用“elem.xpath('.//li/p/text()').getall()”简单地获取所有数据,然后您可以将操作逻辑放在列表数据上,如果您没有获得所需的输出,这是最简单的方法。