Xpath 在Scrapy中选择下一个同级的顺序
我有以下html要废弃Xpath 在Scrapy中选择下一个同级的顺序,xpath,scrapy,Xpath,Scrapy,我有以下html要废弃 <h2> <span id="title">Title</span> </h2> <p>Content 1</p> <p>Content 2</p> <p>Content 3</p> <p>Content 4</p> <h2>Some other header</h2> <p>Do not
<h2>
<span id="title">Title</span>
</h2>
<p>Content 1</p>
<p>Content 2</p>
<p>Content 3</p>
<p>Content 4</p>
<h2>Some other header</h2>
<p>Do not want this content</p>
标题
内容1
内容2
内容3
内容4
其他一些标题
我不想要这个内容
我要选择的是标题后面的一系列4个标签,一旦遇到非标签,就忽略其他所有内容
到目前为止,我的xpath是//h2[span[@id='title']]/后面的兄弟::p
,但这也包括不需要的标记
我还尝试了前面的兄弟方法,但没有成功
//p[前面的兄弟::h2[span[@id='title']]]]
。额外的
标签仍然包括在内。我建议您使用BeautifulSoup
from bs4 import BeautifulSoup
soup = BeautifulSoup(body, 'html.parser')
p_list = []
for i in soup.find('span' ,{'id':'title'}).parent.next_siblings:
if i.name=='p':
p_list.append(i)
print p_list
请尝试以下xpath:
//p[前面的兄弟姐妹::h2[1][./span[@id='title']]]]
此xpath的作用是:
它搜索p
元素,这些元素具有h2
元素作为前面的同级元素,但有一个条件-仅当它们的第一个前面的同级元素h2
有一个名为span
的子元素,其属性id
等于title
为什么它不想要此内容
因为此p
前面的h2
s在列出时按顺序出现:
其他一些标题
标题
因此,h2[1][./span[@id='title']]
结果为false,因此不返回此p
示例xml的结果如下:
<root>
<h2>
<span id="title">Title</span>
</h2>
<p>Content 1</p>
<p>Content 2</p>
<p>Content 3</p>
<p>Content 4</p>
<h2>Some other header</h2>
<p>Do not want this content</p>
<p>Do not want this content too</p>
</root>
标题
内容1
内容2
内容3
内容4
其他一些标题
我不想要这个内容
我也不想要这个内容
是:
“内容1”
“内容2”
“内容3”
“内容4”
谢谢。这对于更复杂的规则很有用。
'<p>Content 1</p>'
'<p>Content 2</p>'
'<p>Content 3</p>'
'<p>Content 4</p>'