我想使用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()
答案 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)