鱼C论坛

 找回密码
 立即注册
查看: 1301|回复: 2

[已解决]关于爬虫xpath查询问题?

[复制链接]
发表于 2023-11-5 19:20:47 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
#使用的是别人的代码
import requests
from lxml import etree
#伪装UA
headers = {
    "User-Agent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/116.0.0.0 Safari/537.36 Edg/116.0.1938.54"
}


#发送请求
a = requests.get("https://www.52pojie.cn/",headers=headers).text
#解析
b = etree.HTML(a)

for i in range(1,5):
        #这段代码怎么理解b.xpath(f"//td[@valign='top'][{i}]//a//text()") 中括号里的 @ 代表什么意思,其他代码都理解
        #就是这段代码不太理解。。最好通俗点讲,,多谢!!
    c = b.xpath(f"//td[@valign='top'][{i}]//a//text()")
           
    for i in c:
        print(i)
最佳答案
2023-11-5 19:22:42
在这段代码中,b.xpath(f"//td[@valign='top'][{i}]//a//text()")是使用XPath语法从解析后的HTML文档中提取数据。

具体来说,b是通过etree.HTML(a)将获取的网页内容解析为一个Element对象。然后,b.xpath()方法用于在解析后的HTML文档中执行XPath查询。

在这个例子中,//td[@valign='top'][{i}]//a//text()是XPath表达式。让我们逐步解释它:

- //:表示从当前节点开始,选择所有符合条件的节点。
- td:选择所有<td>标签。
- [@valign='top']:选择具有valign属性且属性值为'top'<td>标签。
- [i]:选择第i个匹配的节点。
- //a:选择所有子孙节点中的<a>标签。
- //text():选择所有文本节点。

所以,b.xpath(f"//td[@valign='top'][{i}]//a//text()")的作用是从解析后的HTML文档中,选择第ivalign属性为'top'<td>标签下的所有子孙节点中的文本内容。

最后,使用for循环遍历提取到的文本内容,并打印出来。

希望以上解释能够帮助您理解这段代码的含义。如果您还有其他问题,请随时提问。

球一个最佳答案谢谢啦!这对我非常重要!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2023-11-5 19:21:09 | 显示全部楼层
在这段代码中, b.xpath(f"//td[@valign='top'][{i}]//a//text()")  是使用XPath语法来查询HTML文档中特定元素的文本内容。

在XPath中, //  表示选择文档中的所有节点, td  表示选择所有的  td  标签, [@valign='top']  表示选择具有  valign  属性值为  'top'  的  td  标签, [ i]  表示选择第  i  个匹配的  td  标签。

//a  表示选择  td  标签下的所有  a  标签, //text()  表示选择所有的文本节点。

因此, b.xpath(f"//td[@valign='top'][{i}]//a//text()")  表示选择具有  valign  属性值为  'top'  的第  i  个  td  标签下的所有  a  标签的文本内容。

最后,使用  for  循环遍历  c  中的每个元素,并打印出来。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-11-5 19:22:42 | 显示全部楼层    本楼为最佳答案   
在这段代码中,b.xpath(f"//td[@valign='top'][{i}]//a//text()")是使用XPath语法从解析后的HTML文档中提取数据。

具体来说,b是通过etree.HTML(a)将获取的网页内容解析为一个Element对象。然后,b.xpath()方法用于在解析后的HTML文档中执行XPath查询。

在这个例子中,//td[@valign='top'][{i}]//a//text()是XPath表达式。让我们逐步解释它:

- //:表示从当前节点开始,选择所有符合条件的节点。
- td:选择所有<td>标签。
- [@valign='top']:选择具有valign属性且属性值为'top'<td>标签。
- [i]:选择第i个匹配的节点。
- //a:选择所有子孙节点中的<a>标签。
- //text():选择所有文本节点。

所以,b.xpath(f"//td[@valign='top'][{i}]//a//text()")的作用是从解析后的HTML文档中,选择第ivalign属性为'top'<td>标签下的所有子孙节点中的文本内容。

最后,使用for循环遍历提取到的文本内容,并打印出来。

希望以上解释能够帮助您理解这段代码的含义。如果您还有其他问题,请随时提问。

球一个最佳答案谢谢啦!这对我非常重要!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-12-23 04:27

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表