我使用Python 3.6处理一大块HTML,我遇到的问题是循环下面的代码正在运行,但atag.xpath
查询正在搜索整个HTML源代码并返回data-size
的所有四个标记值。
我尝试做的是,为PAGE_RAW
循环处理for
时,对于包含item
类的每个DIV实例,它会找到具有padding
类的子DIV,并为该一个标记提取data-size
属性,而不是在HTML源中找到所有标记。
HTML
<div class="item">
<div class="padding" data-size="12"></div>
</div>
<div class="item">
<div class="padding" data-size="13"></div>
</div>
<div class="item">
<div class="padding" data-size="14"></div>
</div>
<div class="item">
<div class="padding" data-size="15"></div>
</div>
代码
import lxml.html as LH
...
PAGE_RAW = driver.page_source
PAGE_RAW = LH.fromstring(PAGE_RAW)
for atag in PAGE_RAW.xpath("//div[contains(@class, 'item')]"):
data = atag.xpath("//div[contains(@class, 'padding')]/@data-size")
答案 0 :(得分:3)
您在此处遇到的问题是,在您的第二个xpath中,//
告诉它在文档中搜索任何地方(如果不是当前节点是特定的div
,它始终从开始搜索。
要查找当前节点下的任何节点,请将//
替换为.//
(.
表示搜索以当前节点开始,而不是根目录。)
import lxml.html as LH
...
PAGE_RAW = driver.page_source
PAGE_RAW = LH.fromstring(PAGE_RAW)
for atag in PAGE_RAW.xpath("//div[contains(@class, 'item')]"):
data = atag.xpath(".//div[contains(@class, 'padding')]/@data-size")