鱼C论坛

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

[已解决]关于pytharm中用xpath提取标题不完全的问题

[复制链接]
发表于 2024-4-14 16:21:15 | 显示全部楼层 |阅读模式
2鱼币
# 拿到页面源代码,提取解析数据
import requests
from lxml import etree

url = "https://www.zbj.com/fw/?k=saas"
resp = requests.get(url)

# 解析
html = etree.HTML(resp.text)

# 拿到每个服务商的div
divs = html.xpath('//*[@id="__layout"]/div/div[3]/div/div[4]/div/div[2]/div[1]/div')
for div in divs:
    price = div.xpath("./div/div[3]/div[1]/span/text()")[0].strip("¥")
    title = div.xpath("./div/div[3]/div[2]/a/text()")
    cname = div.xpath("./div/a/div[2]/div[1]/div/text()")
    print(title)
其中title打印出来会缺少搜索关键字saas,因为在网页源代码中saas是作为高亮(hl)显示的,请问大佬这种情况应该如何解决
最佳答案
2024-4-14 16:21:16
大佬这里来了!要解决这个问题,你需要对XPath表达式进行一些修改。由于“saas”是作为高亮显示的,它实际上位于`<em>`元素内部。因此,只需将XPath表达式修改为提取`<a>`标签下所有文本和子元素的文本,就可以包含高亮显示的关键字“saas”。下面是修改后的代码示例:

  1. # 拿到每个服务商的div
  2. divs = html.xpath('//*/div/div/div/div/div/div/div/div')
  3. for div in divs:
  4.     price = div.xpath("./div/div/div/span/text()").strip("&#165;")
  5.     title = div.xpath("./div/div/div/a//text()")
  6.     cname = div.xpath("./div/a/div/div/div/text()")
  7.     print(title)
复制代码


上述代码中的`./div/div/div/a//text()`使用了两个斜杠(`//`)来表示提取`<a>`标签下所有文本和子元素的文本。这样,你应该能够正确地提取标题。

希望这能帮到你!继续加油编程吧!如果有更多问题,欢迎随时提问。

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
1713082787961.png
1713082775103.png
1713082799042.png

最佳答案

查看完整内容

大佬这里来了!要解决这个问题,你需要对XPath表达式进行一些修改。由于“saas”是作为高亮显示的,它实际上位于``元素内部。因此,只需将XPath表达式修改为提取``标签下所有文本和子元素的文本,就可以包含高亮显示的关键字“saas”。下面是修改后的代码示例: 上述代码中的`./div/div/div/a//text()`使用了两个斜杠(`//`)来表示提取``标签下所有文本和子元素的文本。这样,你应该能够正确地提取标题。 希望这能帮到 ...

本帖被以下淘专辑推荐:

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2024-4-14 16:21:16 | 显示全部楼层    本楼为最佳答案   
大佬这里来了!要解决这个问题,你需要对XPath表达式进行一些修改。由于“saas”是作为高亮显示的,它实际上位于`<em>`元素内部。因此,只需将XPath表达式修改为提取`<a>`标签下所有文本和子元素的文本,就可以包含高亮显示的关键字“saas”。下面是修改后的代码示例:

  1. # 拿到每个服务商的div
  2. divs = html.xpath('//*/div/div/div/div/div/div/div/div')
  3. for div in divs:
  4.     price = div.xpath("./div/div/div/span/text()").strip("&#165;")
  5.     title = div.xpath("./div/div/div/a//text()")
  6.     cname = div.xpath("./div/a/div/div/div/text()")
  7.     print(title)
复制代码


上述代码中的`./div/div/div/a//text()`使用了两个斜杠(`//`)来表示提取`<a>`标签下所有文本和子元素的文本。这样,你应该能够正确地提取标题。

希望这能帮到你!继续加油编程吧!如果有更多问题,欢迎随时提问。

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2024-4-14 16:33:42 | 显示全部楼层
FishC 发表于 2024-4-14 16:21
大佬这里来了!要解决这个问题,你需要对XPath表达式进行一些修改。由于“saas”是作为高亮显示的,它实际 ...

感谢感谢
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-5-2 06:37

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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