python-3.x - Python 使用 xpath 从 HTML 中提取内容
问题描述
我正在尝试从此 HTML https://republic.co/1821-drinks中提取公司名称18.21 Drinks。我能够成功地将内容下载为 HTML 并在浏览器上本地打开文件并进行验证。
下面是我的代码:
import lxml.html
# The HTML Content is available as String in crawlOutput variable
htmlDocument = lxml.html.fromstring(crawlOutput)
print ( htmlDocument.xpath("/html/body/div[2]/div[2]/div/div[1]/div/div/div/header/div/div[2]/div[1]/div/div[1]/div[2]/h1"))
print ( htmlDocument.xpath("/html/body/div[2]/div[2]/div/div[1]/div/div/div/header/div/div[2]/div[1]/div/div[1]/div[2]/h1/text()"))
print ( htmlDocument.xpath('/html/body/div[2]/div[2]/div/div[1]/div/div/div/header/div/div[2]/div[1]/div/div[1]/div[2]/h1'))
print ( htmlDocument.xpath('/html/body/div[2]/div[2]/div/div[1]/div/div/div/header/div/div[2]/div[1]/div/div[1]/div[2]/h1/text()'))
print(htmlDocument.xpath("//h1[@class='c-primaryTitle offerings-show-header-title__company-name']/text()"))
输出
[]
[]
[]
[]
['\n18.21 Drinks\n']
请帮助我在哪里出错 xpath ?
解决方案
目前尚不清楚“提取公司名称 18.21 Drinks”是什么意思。
无论如何,您的直接问题是您应该将字符串传递给 xpath 函数。将路径用引号括起来:
print ( htmlDocument.xpath('/html/body/div[2]/div[2]/div/div[1]/div/div/div/header/div/div[2]/div[1]/div/div[1]/div[2]/h1'))
print ( htmlDocument.xpath('/html/body/div[2]/div[2]/div/div[1]/div/div/div/header/div/div[2]/div[1]/div/div[1]/div[2]/h1/text()'))
不是答案的一部分,但考虑使用元素的类名而不是使用 xpaths 来获取值。这将使代码更容易理解。
print ( htmlDocument.xpath("//h1[@class='c-primaryTitle offerings-show-header-title__company-name']/text()"))
推荐阅读
- git - Git忽略文件在Windows 10下不起作用
- python - IndexError:列表索引超出范围 - Python/Arduino
- python - 根据条件获取索引和列
- laravel - 如何在 Laravel Passport 中创建角色?
- docker - 在 Flask 中使用 Sentry 查找 Heroku H10 错误的原因
- angular - 配置中的 Angular 设置构建命令行参数(--host / --disable-host-check for --configuration=production)
- laravel - Dockerize Laravel 流明
- django - 从 POST 获取 form.cleaned_data 后如何将其传递给另一个视图?
- ios - Firebase 不适用于 iOS 的生产版本
- c - EOF 和未使用的二维数组的空闲部分