我正在尝试从网站中提取文本
以下是部分 HTML 代码
</script>
<body onLoad="onLoad()">
<input id="batterystatus" value="Charging" type="hidden">
<input id="batterylevel" value="63%" type="hidden">
<input id="signalstrength" value="Good" type="hidden">
<input id="ulCurrentDataRate" value="19317 bps" type="hidden">
<input id="dlCurrentDataRate" value="4969 bps" type="hidden">
<input id="ConnectionTime" value="00:05:40:47" type="hidden">
<input id="imsi" value="XXXXXXXXXXXX" type="hidden">
<input id="devicemodel" value="JMR540" type="hidden">
<input id="connectedStatus" value="Attached" type="hidden">
<input id="physicalCellId" value="25" type="hidden">
<input id="noOfClient" value="3" type="hidden">
<input id="eutrancellid" value="4058640090041A411" type="hidden">
<div id="divAdminApp" width="100%" align="center">
我用来获取值的 Python 代码是
import requests
import lxml.html
html = requests.get('http://192.168.225.1')
doc = lxml.html.fromstring(html.content)
batVol = doc.xpath('/input [@id="batterylevel"]')
print('Battery Voltage: ', batVol)
我得到的输出是空白的
Output:
Battery Voltage: []
答案 0 :(得分:0)
我已经试过了,它应该可以工作
一旦您加载了 doc
,我们就可以使用 get_element_by_id()
函数来获取我们需要的元素,它的 id = 'batterylevel'。这将为您提供整个元素。
doc = lxml.html.fromstring(html.content)
required_element = doc.get_element_by_id('batterylevel')
<块引用>
输出:<InputElement 2515c0c39a0 name=None type='hidden'>
我们需要的是该元素内的值。我们可以使用 .attrib
来访问元素的所有属性,它为我们提供了一个字典:
print(required_element.attrib)
<块引用>
输出:{'id': 'batterylevel', 'value': '79%', 'type': 'hidden'}
现在我们可以正常访问此字典中的 'value'
键以获取电池电量:
print(required_element.attrib['value'])
<块引用>
输出:'79%'
旁注:我看到您正在使用 lxml
,这是一个非常古老的库,不支持像
find()
函数,它允许您搜索整个 HTML 并获取您正在寻找的任何特定文本/标签/类最后一个非常重要,因为当今大多数页面都是动态而非静态的,这意味着页面在使用 javascript 加载页面时即时生成内容,而不是将它们硬编码到 HTML 中,因为内容也是社交媒体(Instagram/facebook/等)、内容消费(youtube/netflix/等)等网站每秒都在变化
如今支持这些功能的更常用的网络抓取库是 requests_html
、BeautifulSoup
,我建议您开始研究它们。