打开Python爬虫实战练习页面带iframe的页面源码分析及数据爬取_S06_Spiderbuf,看到页面上的数据已经很熟悉了。
在页面上右键,留意一下,“显示网页源代码”正面多了一个“查看框架源代码”,这个菜单不是随机出现的,而是由你点击右键时的光标位置决定的。如果右键时光标位于框架内就会出现这个菜单。如果右键时没有这个菜单也没关系,我们点击显示网页源代码,发现数据并没有出现在HTML源码里面。
检查一下页面的HTML代码,对照页面上的内容,找到“设备信息”这里,页面上的内容是这几个字下面就是数据,但在HTML源码里面没有找到数据,紧跟着这几个字的内容出现了一个iframe标签。
iframe标签是HTML语法里面的一个标准标签,就是嵌入一个框架,这个框架可以加载一个独立的页面。加载的页面路径由src属性进行配置。
那我们就尝试把iframe中的src的属性值复制出来,跟域名拼接成一个完整的路径放到浏览器地址栏尝试一下。
发现浏览器打开了一个新的页面,我们想要的数据就在里面,而且看样式是我们在前面的练习中已经接触过了。于是,就直接使用Python编写爬虫代码。
url = 'http://spiderbuf.cn/playground/inner'
myheaders = {'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.164 Safari/537.36'}
html = requests.get(url, headers=myheaders).text
print(html)
运行代码就能发现数据已经爬取下来了。而且数据就存放在一个table表格里面,并且这个页面只有一个table,那我们就可以通过xpath的相对路径按行提取数据。
<tr>
<td>3</td>
<td><a href="#">192.168.201.243</a></td>
<td>D1-15-AB-1E-5F-59</td>
<td>交换机</td>
<td>交换机</td>
<td>HUAWEI</td>
<td>80,22,443</td>
<td>
<font color="green">在线</font>
</td>
</tr>
trs = root.xpath('//tr')
由于状态这一列会根据值的不同有不同的样式,但实际的值是包裹在这些样式里面的,我们可以直接忽略font的样式获取文本。之前有说过,要忽略样式直接提取文本就需要用到xpath的string(.)语法。
str(td.xpath('string(.)'))
这样我们就把这一个练习的数据爬下来并解析出来了。
完整示例代码:示例代码