lla*_*ato 2 python xpath python-3.x
我正在使用Python 3.6处理大量HTML,但我遇到的问题是,下面的循环代码可以正常工作,但atag.xpath查询正在搜索整个HTML源,并返回的所有四个标记值data-size。
我想做的是,在PAGE_RAW处理for循环时,对于包含该类的DIV的每个实例,item它将找到具有的类的子DIV padding并提取该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>
Run Code Online (Sandbox Code Playgroud)
码
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")
Run Code Online (Sandbox Code Playgroud)
您在这里面临的问题是,在第二个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")
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
695 次 |
| 最近记录: |