Python爬虫实战S06带iframe的页面源码分析及数据爬取图文教程

2025-01-01阅读数:83
上一篇:Python爬虫实战S07ajax动态加载数据的爬取图文教程
下一篇:Python爬虫实战S05网页图片的爬取及本地保存图文教程

打开Python爬虫实战练习页面带iframe的页面源码分析及数据爬取_S06_Spiderbuf,看到页面上的数据已经很熟悉了。

在页面上右键,留意一下,“显示网页源代码”正面多了一个“查看框架源代码”,这个菜单不是随机出现的,而是由你点击右键时的光标位置决定的。如果右键时光标位于框架内就会出现这个菜单。如果右键时没有这个菜单也没关系,我们点击显示网页源代码,发现数据并没有出现在HTML源码里面。

检查一下页面的HTML代码,对照页面上的内容,找到“设备信息”这里,页面上的内容是这几个字下面就是数据,但在HTML源码里面没有找到数据,紧跟着这几个字的内容出现了一个iframe标签。

iframe标签是HTML语法里面的一个标准标签,就是嵌入一个框架,这个框架可以加载一个独立的页面。加载的页面路径由src属性进行配置。

那我们就尝试把iframe中的src的属性值复制出来,跟域名拼接成一个完整的路径放到浏览器地址栏尝试一下。

https://spiderbuf.cn/playground/inner

发现浏览器打开了一个新的页面,我们想要的数据就在里面,而且看样式是我们在前面的练习中已经接触过了。于是,就直接使用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(.)'))

这样我们就把这一个练习的数据爬下来并解析出来了。

完整示例代码:示例代码