HA多重抓取
[![GitHub发布][releases-shield]][releases]
![许可证][license-shield]
[![pre-commit][pre-commit-shield]][pre-commit]
[![Black][black-shield]][black]
[![hacs][hacsbadge]][hacs]
[![项目维护][maintenance-shield]][user_profile]
[![请我喝咖啡][buymecoffeebadge]][buymecoffee]
[![Discord][discord-shield]][discord]
[![社区论坛][forum-shield]][forum]
重要提示:故障排除
如果您无法抓取所需的值,请启用调试日志和log_response
。这将为您提供大量信息以进行进一步调查。log_response
会将所有响应写入文件。如果您想抓取的值不在BeautifulSoup输出的文件(*-soup.txt)中,Multiscrape将无法抓取它。很可能是通过JavaScript在后台获取的。在这种情况下,您最好的办法是在浏览器的开发者工具中调查网络流量,并尝试找到包含您要查找的值的JSON响应。
如果以上方法都无法解决问题,请使用Home Assistant论坛。我无法为每个人提供个人帮助,除非您确定存在bug,否则请不要创建GitHub问题。 查看wiki获取抓取指南和有关此组件功能的其他详细信息。
重要提示:做个好公民,认识到您的责任
您,且仅您自己,对您的抓取活动负责。做个好的(网络)公民。设置合理的scan_interval
时间,在抓取之前寻求明确许可,并遵守当地和国际法律。尊重网站政策,以道德方式处理数据,注意资源使用,并定期监控您的行为。坚持这些原则以确保道德和可持续的抓取实践。
HA MultiScrape自定义组件
这个Home Assistant自定义组件可以通过单个HTTP请求从网页中抓取多个字段(使用CSS选择器),而现有的抓取传感器只能抓取单个字段。抓取的数据会以单独的传感器形式呈现。
该组件基于现有的Rest传感器和Scrape传感器。Rest和Scrape传感器的大部分属性都适用于此组件。
安装
[![hacs][hacsbadge]][hacs]
通过HACS(默认商店)安装或手动安装,将文件复制到新的'custom_components/multiscrape'目录中。
配置示例(YAML)
multiscrape:
- name: HA抓取器
resource: https://www.home-assistant.io
scan_interval: 3600
sensor:
- unique_id: ha_latest_version
name: 最新版本
select: ".release-date"
value_template: "{{ value | trim }}"
- unique_id: ha_release_date
icon: >-
{% if is_state('binary_sensor.ha_version_check', 'on') %}
mdi:alarm-light
{% else %}
mdi:bat
{% endif %}
name: 发布日期
select: ".release-date"
attribute: "title"
value_template: "{{ (value.split('released')[1]) }}"
binary_sensor:
- unique_id: ha_version_check
name: 最新版本 == 2021.7.0
select: ".release-date"
value_template: '{{ value | trim == "2021.7.0" }}'
attributes:
- name: 发布说明链接
select: ".release-date"
attribute: href
选项
基于最新(预)发布版本。
名称 | 描述 | 必填 | 默认值 | 类型 |
---|---|---|---|---|
name | 集成的名称。 | 否 | 字符串 | |
resource | 用于获取网站的URL或输出URL的模板。当提供resource_template 时不需要。 | 是 | 字符串 | |
resource_template | 渲染后输出URL的模板。仅当未提供resource 时需要。 | 是 | 模板 | |
authentication | 配置HTTP认证。basic 或digest 。与用户名和密码字段一起使用。 | 否 | 字符串 | |
username | 访问URL的用户名。 | 否 | 字符串 | |
password | 访问URL的密码。 | 否 | 字符串 | |
headers | 请求的头部。 | 否 | 模板 - 列表 | |
params | 请求的查询参数。 | 否 | 模板 - 列表 | |
method | 请求的方法。POST 或GET 。 | 否 | GET | 字符串 |
payload | 可选的POST请求负载。 | 否 | 字符串 | |
verify_ssl | 验证端点的SSL证书。 | 否 | True | 布尔值 |
log_response | 记录HTTP响应和BeautifulSoup解析的HTML到文件中。(将写入/config/multiscrape/配置名称) | 否 | False | 布尔值 |
timeout | 定义等待端点数据的最长时间。 | 否 | 10 | 整数 |
scan_interval | 确定请求URL的频率。 | 否 | 60 | 整数 |
parser | 确定与beautifulsoup一起使用的解析器。lxml 或html.parser 。 | 否 | lxml | 字符串 |
list_separator | 与select_list 功能结合使用的分隔符。 | 否 | , | 字符串 |
form_submit | 参见表单提交 | 否 | ||
sensor | 参见传感器 | 否 | 列表 | |
binary_sensor | 参见二进制传感器 | 否 | 列表 | |
button | 参见刷新按钮 | 否 | 列表 |
传感器/二进制传感器
配置用于抓取数据的传感器。
名称 | 描述 | 必填 | 默认值 | 类型 |
---|---|---|---|---|
unique_id | 将用作entity_id并允许在UI中编辑实体 | 否 | 字符串 | |
name | 传感器的友好名称 | 否 | 字符串 | |
参见选择器字段 | 是 | |||
attributes | 参见传感器属性 | 否 | 列表 | |
unit_of_measurement | 定义传感器的测量单位 | 否 | 字符串 | |
device_class | 设置传感器或二进制传感器的设备类别 | 否 | 字符串 | |
state_class | 定义传感器的状态类别(如果有)。(measurement, total 或 total_increasing)(不适用于二进制传感器) | 否 | None | 字符串 |
icon | 定义传感器图标或图标模板。选择器的值(或给定value_template时的值)作为模板的输入。对于二进制传感器,该值被解析为布尔值。 | 否 | 字符串/模板 | |
picture | 包含本地图像的路径,并将其设置为实体图片 | 否 | 字符串 | |
force_update | 即使值未更改也发送更新事件。在历史记录中需要有意义的值图表时很有用。 | 否 | False | 布尔值 |
刷新按钮
配置手动触发抓取的刷新按钮。
名称 | 描述 | 必填 | 默认值 | 类型 |
---|---|---|---|---|
unique_id | 将用作entity_id并允许在UI中编辑实体 | 否 | 字符串 | |
name | 按钮的友好名称 | 否 | 字符串 |
传感器属性
配置可以通过额外抓取值设置的传感器属性。
名称 | 描述 | 必填 | 默认值 | 类型 |
---|---|---|---|---|
name | 属性的名称(将被转换为小写并用下划线替换空格) | 是 | 字符串 | |
参见选择器字段 | 是 |
表单提交
配置表单提交功能,使您能够在抓取网站之前提交(登录)表单。有关此功能如何工作的更多详细信息可以在wiki上找到。
名称 | 描述 | 必填 | 默认值 | 类型 |
---|---|---|---|---|
resource | 包含表单的网站URL | 否 | 字符串 | |
select | 用于在HTML中选择表单的CSS选择器。如果省略,则直接提交输入字段。 | 否 | 字符串 | |
input | 一个名称/值字典,将与表单上的输入字段合并 | 否 | 字符串 - 字典 | |
input_filter | 不应与表单一起提交的输入字段列表 | 否 | 字符串 - 列表 | |
submit_once | 仅在启动时提交一次表单,而不是每个扫描间隔都提交 | 否 | False | 布尔值 |
resubmit_on_error | 遇到抓取错误后重新提交表单 | 否 | True | 布尔值 |
variables | 参见表单变量 | 否 | 列表 |
表单变量
配置将从form_submit
响应中抓取的变量。这些变量可以在当前集成的主配置的value_template
中使用:传感器/属性中的selector
或头部中。一个常见用例是填充X-Login-Token
头部,该头部是登录的结果。
名称 | 描述 | 必填 | 默认值 | 类型 |
---|---|---|---|---|
name | 变量的名称 | 是 | 字符串 | |
参见选择器字段 | 是 |
示例:
multiscrape:
- resource: "https://somesiteyouwanttoscrape.com"
form_submit:
submit_once: True
resource: "https://authforsomesiteyouwanttoscrape.com"
input:
email: "<email>"
password: "<password>"
variables:
- name: token
value_template: "{{ ... }}"
headers:
X-Login-Token: "{{ token }}"
sensor: ...
选择器
用于配置抓取选项。
名称 | 描述 | 必填 | 默认值 | 类型 |
---|---|---|---|---|
select | 用于获取属性值的CSS选择器。仅当未提供select_list 或value_template 时才需要。 | 否 | 字符串/模板 | |
select_list | 用于多个元素的多个值的CSS选择器,将作为CSV返回。仅当未提供select 或value_template 时才需要。 | 否 | 字符串/模板 | |
attribute | 从选定元素读取的值的属性。 | 否 | 字符串 | |
value_template | 定义应用于从选择器结果(如果提供)或原始页面(如果未提供选择器)提取值的模板 | 否 | 字符串/模板 | |
on_error | 参见错误处理 | 否 |
错误处理
配置在抓取错误(CSS选择器未返回值)情况下应该发生什么。
名称 | 描述 | 必填 | 默认值 | 类型 |
---|---|---|---|---|
log | 确定在抓取错误情况下是否以及如何记录日志。值可以是'false'、'info'、'warning'或'error'。 | 否 | error | 字符串 |
value | 确定在抓取错误情况下传感器/属性应获得的值。值可以是'last',表示值不改变;'none',导致HA在传感器上显示'未知';或'default',将显示指定的默认值。 | 否 | none | 字符串 |
default | 当错误处理值设置为'default'时使用的默认值。 | 否 | 字符串 |
服务
对于每个multiscrape实例,将创建一个服务,以通过自动化触发抓取运行。(对于手动触发,现在可以配置按钮实体。)
这些服务命名为multiscrape.trigger_{integration name}
。
Multiscrape还提供了get_content
和scrape
服务。get_content
检索您想要抓取的网站内容。它显示的数据与您现在需要启用log_response
并打开page_soup.txt文件时看到的相同。
scrape
顾名思义就是进行抓取。它抓取网站并提供传感器和属性。
这两个服务接受与您在配置yaml中提供的相同配置(上面描述的内容),但有一个小而重要的注意事项:如果服务输入包含模板,这些模板在调用服务时会被Home Assistant自动解析。对于像resource
和select
这样的模板来说没问题,但对于需要应用于抓取数据本身的模板(如value_template
),在调用服务时不能解析。因此,您需要稍微修改语法,在中间添加一个!
。例如,{{
变成{!{
,%}
变成%!}
。然后Multiscrape会理解这个字符串需要在服务调用后作为模板处理。
如果有人有更好的解决方案,请告诉我!
要调用这些服