从我的选择器中定位前面的元素

时间:2019-03-30 23:15:53

标签: python xpath scrapy

我想使用scrapy从一个页面上的多个<li>刮掉所有<ul>,我有一个for循环,可以抓取当前<li>内部的所有<ul>,我想做的是从当前<p>之前的ul抓取文本,我想使用前兄弟是可行的方法,但是我无法使其正常工作,任何建议?

<p>some random text</p>
<ul>
    <li> some random text </li>
    <li> some random text </li>
    <li> some random text </li>
    <li> some random text </li>
    <li> some random text </li>
</ul>

<p>some random text</p>
<ul>
    <li> some random text </li>
    <li> some random text </li>
    <li> some random text </li>
    <li> some random text </li>
    <li> some random text </li>
</ul>

我的for循环是:

for lis in response.xpath('//div[@id="tabname-2228-2"]/ul'):

我尝试过:

for lis in response.xpath('//div[@id="tabname-2228-2"]/ul'):season = 
  lis.xpath('preceding::p/text()').extract()

1 个答案:

答案 0 :(得分:0)

您应该使用preceding-sibling::p而不是preceeding

lis.xpath('preceding-sibling::p[1]/text()').extract()

完整的解决方案:

for lis in response.xpath('//div[@id="tabname-2228-2"]/ul'):
    season = lis.xpath('preceding::p[1]/text()')[0]
    print(season)