xpath定位中./和//定位的区别
时间: 2023-07-19 16:21:18 浏览: 156
XPath 中的 `./` 和 `//` 都是用来定位元素的,二者的区别在于定位的起点不同。
- `./` :表示从当前节点开始查找,即当前节点下的子节点。
- `//` :表示在整个文档中查找,即不论当前节点在文档中的位置,都会从文档的根节点开始查找。
举个例子,假设我们有以下 HTML 代码:
```html
<div id="parent">
<p>第一个段落</p>
<p>第二个段落</p>
<div>
<p>第三个段落</p>
</div>
</div>
```
如果我们要定位第一个段落的元素,可以使用以下两种方式:
- 使用 `./` :
```xpath
./p[1]
```
这个 XPath 表达式表示从当前节点(即 `div` 元素)开始查找子节点中的第一个 `p` 元素。
- 使用 `//` :
```xpath
//p[1]
```
这个 XPath 表达式表示在整个文档中查找第一个 `p` 元素。
因此,二者的区别在于定位的起点不同,使用 `./` 表示从当前节点开始查找,使用 `//` 表示在整个文档中查找。
相关问题
html_etree = etree.HTML(repones) #利用lxml解析上面爬取的html文件 html_etree = etree.HTML(repones) #过滤 li = html_etree.xpath('//*[@id="content"]/div/div[1]/ol/li') for a in li: #电影名称 name = a.xpath('./div/div[2]/div[1]/a/span[1]/text()')[0] # print (name) #链接 dy_url = a.xpath('./div/div[2]/div[1]/a/@href')[0] # print (dy_url) #评分 rating = a.xpath('./div/div[2]/div[2]/div/span[1]/@class')[0] # print (rating) rating_num = a.xpath('./div/div[2]/div[2]/div/span[2]/text()')[0] # print (rating_num) content = a.xpath('./div/div[2]/div[2]/div/span[4]/text()')[0] print (content,name,dy_url,rating,rating_num)
根据你提供的代码,你使用了 `lxml` 库对爬取到的 HTML 内容进行解析,并从中提取了电影名称、链接、评分等信息。
首先,你使用 `etree.HTML()` 方法将 `repones`(即爬取到的 HTML 内容)传递给 `etree.HTML`,以便使用 `lxml` 解析库解析 HTML。
然后,你使用 `xpath()` 方法从解析后的 HTML 树中提取所需的信息。在这个例子中,你使用了 XPath 表达式来定位电影列表的每个 `<li>` 元素。然后,对于每个 `<li>` 元素,你使用 XPath 表达式来提取电影名称、链接、评分等信息。
最后,你使用 `print()` 函数将提取到的电影信息打印出来。
请注意,代码中的 XPath 表达式是根据具体页面结构编写的,如果你爬取的网页结构有所变化,可能需要相应调整 XPath 表达式来匹配正确的元素。
headers = { 'User-Agent': "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/101.0.4951.67 Safari/537.36 " } resp = requests.get(url, headers=headers) tree = etree.HTML(resp.text) tbody = tree.xpath('/html/body/div[7]/div[1]/div[4]/ul/li')[0:] order = [0, 1, 2, 3, 4] for tr in tbody: day = [] for i in order: if i == 0: day.append( tr.xpath('./div/text()')[i].strip().replace(' 星期日', '').replace(' 星期一', '').replace(' 星期二','').replace(' 星期三', '').replace(' 星期四', '').replace(' 星期五', '').replace(' 星期六', '')) if i == 1: day.append(tr.xpath('./div/text()')[i].strip().replace('℃', '')) if i == 2: day.append(tr.xpath('./div/text()')[i].strip().replace('℃', '')) else: day.append(tr.xpath('./div/text()')[i].strip()) del day[3] del day[1] data.append(day)请问我发的这部分代码的功能是什么?
根据您提供的代码,可以看出以下功能:
1. 设置请求头部信息,其中包括User-Agent,用于模拟浏览器发送请求。
2. 使用requests库发送GET请求,获取指定URL的响应。
3. 使用lxml库的etree模块解析HTML文本。
4. 在解析的HTML文本中通过XPath定位到指定的元素,获取其中的文本内容。
5. 将获取到的数据进行处理和清洗,去除不需要的字符或标记。
6. 将处理后的数据存储到一个列表中。
总体来说,这段代码的功能是从指定URL获取网页内容,然后使用XPath提取特定的信息,并对提取到的数据进行处理和存储。具体涉及到的数据处理和存储逻辑,需要查看完整代码才能做出准确的判断。
阅读全文