繁体   English   中英

Python:节点内的XPATH搜索

[英]Python: XPATH search within node

我有一个看起来像这样(缩短)的html代码;

<div id="activities" class="ListItems">
<h2>Standards</h2>
        <ul>
                    <li>
                        <a class="Title" href="http://www.google.com" >Guidelines on management</a>
                        <div class="Info">
                            <p>
                                text
                            </p>
                                <p class="Date">Status: Under development</p>
                        </div>
                    </li>
        </ul>
</div>
<div class="DocList">
    <h3>Reports</h3>
        <p class="SupLink">+ <a href="http://www.google.com/test" >View More</a></p>
            <ul>
                <li class="pdf">
                    <a class="Title" href="document.pdf" target="_blank" >Document</a>
                    <span class="Size">
                        [1,542.3KB]
                    </span>
                    <div class="Info">
                                <p>
                                    text <a href="http://www.google.com" >Read more</a>
                                </p>
                        <p class="Date">
                            14/03/2018
                        </p>
                    </div>
                </li>
            </ul>
</div>

我正在尝试通过使用以下代码在'a class =“ Title”'下的'href ='中选择值:

def sub_path02(url):
    page = requests.get(url)
    tree = html.fromstring(page.content)
    url2 = []
    for node in tree.xpath('//a[@class="Title"]'):
        url2.append(node.get("href"))

    return url2

但是我得到了两个返回,也返回了“ div class =“ DocList”“下的一个。

我试图更改我的xpath表达式,以便只在节点内查看,但无法使其正常工作。

有人可以帮助我了解如何在特定节点内“搜索”。 我已经阅读了多个xpath文档,但似乎无法弄清楚。

尝试以下xpath表达式以递归方式选择具有特定id的div:

'//div[@id="activities"]//a[@class="Title"]'

所以:

def sub_path02(url):
    page = requests.get(url)
    tree = html.fromstring(page.content)
    url2 = []
    for node in tree.xpath('//div[@id="activities"]//a[@class="Title"]'):
        url2.append(node.get("href"))

    return url2

注意 :

最好选择一个ID而不是一个类,因为ID应该是唯一的(在现实生活中,有时候错误的代码在同一页面中有多个相同的ID ,但是一个可以重复N次)

使用//您已经选择了文档中的所有a元素。

要搜索特定的div尝试使用//指定父对象,然后再次使用// a查找div中的任何位置

//div[@class="ListItems"]//a[@class="Title"]

for node in tree.xpath('//div[@class="ListItems"]//a[@class="Title"]'):url2.append(node.get("href"))

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM