It's been a while.
#前言
最近在做一些数据抓取的事情。利用xpath在网页中定位元素十分便捷,而且理解了就容易上手
简单来说,把整个html网页视作为一棵大树,那么xpath则通过告诉你如何在每个树杈处拐弯从而到达目的终端枝桠
html网页结构应该都有数吧
要使用xpath进行元素查找,需要先引入lxml
模块
1 | import requests |
接下来,定位对应的元素就很简单了,html_page.xpath(f"{xpath_expression}")
。
#其他
定位元素很简单,但xpath表达式相对而言就稍微复杂点了
W3schools上面有很详细的xpath教程,基本上这个教程看懂也就能够上手xpath了
我这里想写一点我这段时间总结的几个事情
至少目前为止,还不能同事通过名称和次序来定位元素。例如如下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网页中基本不可能找到上面这样简单的段落。所以如果你想同事利用名称和次序来定位一个元素的话,想想别的办法吧^.^
几乎每个浏览器都可以通过检查元素的方法直接复制xpath。例如Microsoft Edge中按快捷键
F12
即可进入开发者工具箱。在对应的源码位值右键点击即可找到复制
->复制xpath
选项。不够,当你使用requests
去get
一个页面的时候,获得的页面代码和开发者工具中显示的源码有那么一点点区别。网上可以找到很多有关这两处代码区别的信息。或许可以试试POST方法,过一段时间试试看
永远不会有一篇能够教会你所有东西的教程。当你面对实际问题是总是要尝试些不同的东西。有时候元素在页面上显示的很呈规律,但在实际定位中可能需要一个元素一个元素地进行定位,这时候耐心就很重要了。
遇到问题继续补充在这里