Xpath学习笔记

It's been a while.

#前言

最近在做一些数据抓取的事情。利用xpath在网页中定位元素十分便捷,而且理解了就容易上手

简单来说,把整个html网页视作为一棵大树,那么xpath则通过告诉你如何在每个树杈处拐弯从而到达目的终端枝桠

html网页结构应该都有数吧

要使用xpath进行元素查找,需要先引入lxml模块

1
2
3
import requests
from lxml import etree
html_page = etree.HTML(requests.get(url).text)

接下来,定位对应的元素就很简单了,html_page.xpath(f"{xpath_expression}")

#其他

定位元素很简单,但xpath表达式相对而言就稍微复杂点了

W3schools上面有很详细的xpath教程,基本上这个教程看懂也就能够上手xpath了

我这里想写一点我这段时间总结的几个事情

  1. 至少目前为止,还不能同事通过名称和次序来定位元素。例如如下html段落中,要定位go,那么xpath表达式应该是'//div[@class="main"]/div[5]/p/text()',意为主div下的第五个div,而无法通过表达主div下第三个类名称为"h"的div来定位

    1
    2
    3
    4
    5
    6
    7
    <div class="main">
    <div class="h"><p>He</p></div>
    <div class="j"><p>and</p></div>
    <div class="J"><p>I</p></div>
    <div class="h"><p>will</p></div>
    <div class="h"><p>go</p></div>
    </div>

    可能这个例子看起来并没有那么复杂,但如果主div下有上千个div呢?实际的html网页中基本不可能找到上面这样简单的段落。所以如果你想同事利用名称和次序来定位一个元素的话,想想别的办法吧^.^

  2. 几乎每个浏览器都可以通过检查元素的方法直接复制xpath。例如Microsoft Edge中按快捷键F12即可进入开发者工具箱。在对应的源码位值右键点击即可找到复制->复制xpath选项。不够,当你使用requestsget一个页面的时候,获得的页面代码和开发者工具中显示的源码有那么一点点区别。网上可以找到很多有关这两处代码区别的信息。

    或许可以试试POST方法,过一段时间试试看

  3. 永远不会有一篇能够教会你所有东西的教程。当你面对实际问题是总是要尝试些不同的东西。有时候元素在页面上显示的很呈规律,但在实际定位中可能需要一个元素一个元素地进行定位,这时候耐心就很重要了。

  4. 遇到问题继续补充在这里

小工具汇总 Python操作Excel表格
Your browser is out-of-date!

Update your browser to view this website correctly. Update my browser now

×