852563049 发表于 2024-4-14 16:21:15

关于pytharm中用xpath提取标题不完全的问题

# 拿到页面源代码,提取解析数据
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/div/div/div/div/div/div')
for div in divs:
    price = div.xpath("./div/div/div/span/text()").strip("¥")
    title = div.xpath("./div/div/div/a/text()")
    cname = div.xpath("./div/a/div/div/div/text()")
    print(title)
其中title打印出来会缺少搜索关键字saas,因为在网页源代码中saas是作为高亮(hl)显示的,请问大佬这种情况应该如何解决

FishC 发表于 2024-4-14 16:21:16

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

# 拿到每个服务商的div
divs = html.xpath('//*/div/div/div/div/div/div/div/div')
for div in divs:
    price = div.xpath("./div/div/div/span/text()").strip("¥")
    title = div.xpath("./div/div/div/a//text()")
    cname = div.xpath("./div/a/div/div/div/text()")
    print(title)

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

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

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

852563049 发表于 2024-4-14 16:33:42

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

感谢感谢{:5_109:}
页: [1]
查看完整版本: 关于pytharm中用xpath提取标题不完全的问题