使用 lxml 进行网页抓取时无输出

No output when web scraping using lxml

我正在尝试从网站中提取文本

下面是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:  []

我已经试过了,应该可以的

加载 doc 后,我们可以使用 get_element_by_id() 函数获取我们需要的元素,其 id = 'batterylevel'。这将为您提供整个元素。

doc = lxml.html.fromstring(html.content)
required_element = doc.get_element_by_id('batterylevel')

output:<InputElement 2515c0c39a0 name=None type='hidden'>

我们需要的是那个元素里面的值。我们可以使用 .attrib 来访问元素的所有属性,这给了我们一个字典:

print(required_element.attrib)

output: {'id': 'batterylevel', 'value': '79%', 'type': 'hidden'}

现在我们可以正常访问此字典中的 'value' 键来获取电池电量:

print(required_element.attrib['value'])

output: '79%'

旁注:我看到您正在使用 lxml,这是一个相当古老的库,不支持

等常见功能
  • css classes/selectors,
  • 发现
  • 一个很好的 find() 功能,它允许您搜索整个 HTML 并获得您正在寻找的任何特定 text/tag/class
  • 在页面上呈现 javascript

最后一个非常重要,因为当今大多数页面都是动态的而不是静态的,这意味着页面的内容是在使用 javascript 加载页面时即时生成的,而不是将它们硬编码到 HTML,因为社交媒体(Instagram/facebook/etc.)、内容消费(youtube/netflix/etc.)

等网站上的内容也在每秒都在变化

目前支持这些功能的更常用的网络抓取库是 requests_htmlBeautifulSoup,我建议您开始研究它们。