Scrapy选择器仅获取for循环中的第一个元素

zpqajqem  于 2022-11-09  发布在  其他
关注(0)|答案(1)|浏览(167)

我不明白为什么下面的代码在使用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

有什么办法解决这个问题吗?
谢谢

2w2cym1i

2w2cym1i1#

也许你可以用.get()方法来获取数据,然后用.getall()来替换。这个方法会以列表的形式给予所有的数据,通过它,你可以在python切片的帮助下得到你想要的数据。
或者,在其他方面,可能会有一个变化,即每个“li”标记中的类名都不相同,或者您可能必须在xpath URL中使用pass the class="”。

**注意:**而不是使用以下路径获取数据:“elem.xpath('.//li/p[1]/text()').get()”,您可以使用“elem.xpath('.//li/p/text()').getall()”简单地获取所有数据,然后您可以将操作逻辑放在列表数据上,如果您没有获得所需的输出,这是最简单的方法。

相关问题