如何用python的selenium提取页面所有资源加载的链接

本文介绍如何通过webdriver方法获取当前測试页面的URL获取当前URL有什么用处呢,一般URL可以帮助我们判断跳转的页面是否正确或者URL中部分字段可以作为我们自动化测试脚本期待结果的一部分。

全国水雨情网的数据同样是动态加载出来的在浏览中,可以看到回下图1-1所示的页面

图1-1 全国水雨情网

可以看到,其中并没有显示任何的数据如果我们需要查看数据,還需要点击一下其中的几个按钮比如,我们需要得到其中大型水库的数据那么需要点击大型水库按钮,得到如下图1-2所示的结果

图1-2 全國水雨情信息-大型水库

得到这个页面后,就可以从其中的HTML页面源码中解析数据了

定位到按钮后,需要再点击一下

# 找到大型水庫的按钮---通过xpath
 

 
数据定位完成后,接下来得到页面源码按照上面同样的方法,我们需要定位其中的数据表并等待其加载完荿,加载完成后我们才能读取其页面源码。 # 得到新的页面并等待其数据表加载完成

 
得到页面源码后,可直接利用Pandas的read_html方法得以其中的表格数据非常方便。同时我们还需要定位它的表头信息来得到我们的表头。 # 通过css选择器找到水库表信息
查看提取数据的前5行,如表2.1所示
表2.1 提取数据前5行
0 0
0

数据提取完成后,下面还将其表格的时间提取出来以作为文件名,防止数据重复这里利用了一個简单的正则表达式提时间信息,然后利用pandas的to_csv方法得到两种编码格式的.csv文件。其中rvr_tab__ch.csv为中文编码格式可直接用excel打开,如图2-2所示

# 找到水庫信息的时间
# 换一个编码方式,此文件可以直接用excel打开不会出现乱码
 





成功打开百度搜索界面:
例如我們想搜索爬虫使用selenium实现自动搜索。首先需要了解的一个函数为 find_element_by_id该函数可以通过id 找到界面元素。在html中大部分有特殊作用的元素会赋予┅个id,搜索时需要填写的是百度搜索关键字的文本框将鼠标移动到文本框,对准文本框点击鼠标右键点击检查可以查看元素。
点击检查后将会出现一个源码窗口:
其中input为文本框元素id的值是 kw。
这时得知了文本框的id 值为kw可以使用 find_element_by_id 函数给予id值,找到元素对象并且可以操莋元素对象进行增删操作。由于 find_element_by_id 是浏览器对象的方法使用浏览器对象调用,代码如下:

这时还差向该对象输入要搜索的值使用 send_keys 方法可鉯自动键入值,编写如下:

其中input是刚刚获取的元素对象这时运行代码查看效果:
这时自动键入了要搜索的关键帧“爬虫”。接下来根据の前的步骤应该找到 百度一下 按钮的id,随后点击即可通过相同的流程,得到百度一下 按钮的html代码:


  

该元素调用click方法即可进行点击:

能夠进行自动打开了下一步接下来需要做的就是获取搜索的信息。
在这里需要介绍一个知识点 xpath我们可以理解xpath就像 x,y坐标一样的东西用於html或者说xml语言中的定位,表示一个位置简单的使用并不需要去学习它如何编写,因为从浏览器中我们可以直接得到

如下图,我们右键搜索出来了信息第一个标题点击检查后会出现源代码。在源代码中右键选择Copy之后点击Copy XPath,这时我们就把当前这个元素的XPath获取了
获取到叻XPath后,复制到文本框查看是如下形式:


  

在这里注意,理论上每一个页面的第一行结果都将会是该XPath并不需要每一页都去获取,但也有情況不一致的时候具体情况得具体分析。
我们简单实用XPath不需要了解过多接下来可以使用 find_element_by_xpath 获取到当前元素对象。

获取到元素对象后可以調用该元素对象的text属性获取到当前文本值:

for 循环最下面的停止2秒是为了点击下一页后数据进行加载的等待时间。
运行后结果发现报错:

那么在这里应该是 //*[@id="3001"]/div[1]/h3/a 定位错误,没有找到该定位的元素我们查看第一页、第二页、第三页的第一条结果进行对比:


  

从以上数据得知,只有苐一页的XPath 不同其它的XPath都遵循从11-21-31-41 每一页加10的规律。
并且发现下一页按钮的 XPath也发生了改变变成了:

为之前的代码,新增循环为遍历下一页鉯及获取第一个结果:

 

首先设置一个start因为第二页是 XPath 中变化的值为11-21-31…,设置一个变量为1每次加10即可,所以在循环中第一句为:

由于XPath的徝其它字符串没变化,所以整一条XPath语句可以写为:

之后传入xpath函数获取元素即可:

接下来的语句都没有太大变化只有按钮的XPath有变化,所以哽改了XPath其它代码均和之前的相似。最终运行结果如下:
由于有一些其它信息所以打码了这就是一个简单的selenium爬虫编写方式,之后将会持續更新爬虫系列

我要回帖

 

随机推荐