【问题标题】:No output when web scraping using lxml使用 lxml 抓取网页时没有输出
【发布时间】:2021-08-08 17:05:45
【问题描述】:

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

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

【问题讨论】:

  • DOM 中的这些值是否使用 JavaScript 填充?
  • 可能想看看使用bs4.BeautifulSoup
  • 实际上,这个网站托管在一个便携式 wifi 设备上,我开发了一个充电设置,它将根据电池电量打开充电继电器。上面的代码是wifi设备的主页
  • 问题是,网站是静态的(所有内容都包含在 HTML 中)还是动态的(在 HTML 加载后是否使用 javascript 加载元素)?
  • 我不知道 wifi 设备是 Jio Wifi,因此涉及的设备型号不同,并且在检查网页时,每个设备都有不同的网络响应格式。只有主页有这部分代码,所有模型都通用

标签: python parsing web-scraping lxml


【解决方案1】:

我试过了,应该可以的

一旦你加载了doc,我们就可以使用get_element_by_id() 函数来获取我们需要的元素,它的id = 'batterylevel'。这将为您提供整个元素。

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

输出:&lt;InputElement 2515c0c39a0 name=None type='hidden'&gt;

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

print(required_element.attrib)

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

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

print(required_element.attrib['value'])

输出:'79%'

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

之类的常见功能
  • 按 css 类/选择器查找,
  • 一个很好的 find() 函数,可让您搜索整个 HTML 并获取您正在寻找的任何特定文本/标签/类
  • 在页面上呈现 javascript

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-01-15
    • 1970-01-01
    相关资源
    最近更新 更多