本篇文章给大家谈谈selenium获取网页数据每次顺序不一样,以及selenium爬取网页数据对应的知识点,希望对各位有所帮助,不要忘了收藏本站喔。
本文目录一览:
- 1、如何用python爬取网页中隐藏的div内容?
- 2、selenium 获取元素方法-注解
- 3、selenium获取测试对象的内容和状态
- 4、selenium超全教程(4)-持续更新中
- 5、用爬虫抓取网页得到的源代码和浏览器中看到的不一样运用了什么技术?
如何用python爬取网页中隐藏的div内容?
你说的隐藏的div内容,应该是动态加载的数据吧,不在网页源码中显示,只在加载网页时才请求数据进行显示,一般情况下,这种数据都保存在一个json文件中,只要抓包分析出这个json文件的url地址,然后再根据json文件结构进行解析,很快就能获取到动态加载的div数据,下面我以爬取人人贷上面的散标数据为例,简单介绍一下python如何爬取div动态加载的数据,实验环境win10+python3.6+pycharm5.0,主要步骤如下:
1.首先,打开散标数据,如下,爬取的信息主要包括年利率、借款标题、期限、金额和进度这5个字段信息:
右键对应元素进行检查,可以看出所有的数据嵌套在div标签中,如下:
打开网页源码,我们按Ctrl+F查找对应的数据,会发现所查找的数据都未在网页源码中,如下,即数据都是动态加载,所以直接解析原网页是找不到div嵌套的数据的:
2.接着,我们按F12调出开发者工具,依次点击“Network”-“XHR”,F5刷新页面,就会看到动态加载的json文件,查看这个文件,内容如下,左边为json文件的url地址,右边就是我们需要爬取的div数据:
3.最后对应上面的json文件,我们就可以直接获取并解析json了,这里主要用到requests和json这2个模块,其中requests用于根据url地址获取json文件,json用于解析json文件,提取出我们所需要的信息,即div动态加载的数据,测试代码如下,非常简单:
运行程序,截图如下,已经成功爬取到div加载的数据:
至此,我们就完成了利用python爬取div动态加载的数据。总的来说,整个过程非常简单,最主要的还是抓包分析,只要你有一定的爬虫基础,熟悉一下上面的代码,多调试几遍程序,很快就能掌握的,当然,你也可以使用selenium进行爬取,直接解析就行,网上也有相关教程和资料可供参考,非常丰富,希望以上分享的内容能对你有所帮助吧,也欢迎大家评论、留言。
selenium 获取元素方法-注解
selenium 查找页面元素方法
1、 Selenium by查找元素
特别强调一下:By.xpath()
绝对路径以单/号表示,而下面要讲的相对路径则以//表示,这个区别非常重要。另外需要多说一句的是,当xpath的路径以/开头时,表示让Xpath解析引擎从文档的根节点开始解析。当xpath路径以//开头时,则表示让xpath引擎从文档的任意符合的元素节点开始进行解析。
查找页面上id为loginForm的form元素:
查找页面上具有name属性为username的input元素:
2、 注解获取页面元素
方式有3种:@FindBy、@FindBys、@FindAll。
下文对3中类型的区别和使用场景进行介绍
1)@FindBy
2)@FindBys
@FindBys 相当于是取交集,是先根据第一个注解获取到对应元素,然后根据第二个注解再帅选出对应的页面元素,。如先找到符合classname=A的元素,再在这些元素集中找到id=B的所有元素
就像如下操作:
3)@FindAll
@FindAll相当于是取并集,如找到id=A和id=B的所有元素
selenium获取测试对象的内容和状态
1.获取当前网页标题:String title=driver.getTitle();
2.获取当前网页的URL:String url=driver.getCurrentUrl();
3.获取元素的文本值,比如链接,纯文本等:String text=driver.findElement(By location).getText();
4.获取元素指定属性的值:String attribute=driver.findElement(By location).getAttribute("属性"); //这里的参数可以是class、name等任意属性
5.获取元素输入框内的文本值:String attribute=driver.findElement(By location).getAttribute("value");
6.获取元素标签名称:String tagName=driver.findElement(By location).getTagName();
1.是否显示:使用element.is_displayed()方法。
2.是否存在:使用find_element_by_xxx()方法,捕获其抛出的异常, 如果存在异常的话则可以确定该元素不存在。
3.是否被选中:一般判断表单元素,如radio或checkbox是否被选中,使用element.is_selected()方法( 返回true代表已被选中,返回false代表未被选中 )。
4.是否有效:即是否为灰化状态,使用element.is_enabled()方法( 可用于判断button/checkbox/radio是否置灰 )。
selenium超全教程(4)-持续更新中
单选比较好操作,先定位需要单选的某个元素,然后点击一下即可。
多选好像也比较容易,依次定位需要选择的元素,点击即可。
下拉框的操作相对复杂一些,需要用到Select模块。
先导入该类
在select模块中有以下定位方法
测试页面
然后,再演示下拉框的不同选择的方式
Selenium打开一个页面之后,默认是在父页面进行操作,此时如果这个页面还有子页面,想要获取子页面的节点元素信息则需要切换到子页面进行擦走,这时候switch_to.frame()就来了。如果想回到父页面,用switch_to.parent_frame()即可。
既然是模拟浏览器操作,自然也就需要能模拟鼠标的一些操作了,这里需要导入ActionChains 类。
左键
这个其实就是页面交互操作中的点击click()操作。
右键
context_click()
在上述操作中
双击
double_click()
drag_and_drop(source,target)拖拽操作嘛,开始位置和结束位置需要被指定,这个常用于滑块类验证码的操作之类。
selenium中的Keys()类提供了大部分的键盘操作方法,通过send_keys()方法来模拟键盘上的按键。
引入Keys类
常见的键盘操作
send_keys(Keys.BACK_SPACE):删除键(BackSpace)
send_keys(Keys.SPACE):空格键(Space)
send_keys(Keys.TAB):制表键(TAB)
send_keys(Keys.ESCAPE):回退键(ESCAPE)
send_keys(Keys.ENTER):回车键(ENTER)
send_keys(Keys.CONTRL,'a'):全选(Ctrl+A)
send_keys(Keys.CONTRL,'c'):复制(Ctrl+C)
send_keys(Keys.CONTRL,'x'):剪切(Ctrl+X)
send_keys(Keys.CONTRL,'v'):粘贴(Ctrl+V)
send_keys(Keys.F1):键盘F1
send_keys(Keys.F12):键盘F12
实例操作演示:
定位需要操作的元素,然后操作即可!
如果遇到使用ajax加载的网页,页面元素可能不是同时加载出来的,这个时候尝试在get方法执行完成时获取网页源代码可能并非浏览器完全加载完成的页面。所以,这种情况下需要设置延时等待一定时间,确保全部节点都加载出来。
等待有三种方式:强制等待、隐式等待和显式等待
1.强制等待
直接time.sleep(n)强制等待n秒,在执行get方法之后执行。
2.隐式等待
implicitly_wait()设置等待时间,如果到时间有元素节点没有加载出来,就会抛出异常。
3. 显式等待
设置一个等待时间和一个条件,在规定时间内,每隔一段时间查看下条件是否成立,如果成立那么程序就继续执行,否则就抛出一个超时异常。
WebDriverWait的参数说明:
WebDriverWait(driver,timeout,poll_frequency=0.5,ignored_exceptions=None)
driver: 浏览器驱动
timeout: 超时时间,等待的最长时间(同时要考虑隐性等待时间)
poll_frequency: 每次检测的间隔时间,默认是0.5秒
ignored_exceptions:超时后的异常信息,默认情况下抛出NoSuchElementException异常
until(method,message='')
method: 在等待期间,每隔一段时间调用这个传入的方法,直到返回值不是False
message: 如果超时,抛出TimeoutException,将message传入异常
until_not(method,message='')
until_not 与until相反,until是当某元素出现或什么条件成立则继续执行,until_not是当某元素消失或什么条件不成立则继续执行,参数也相同。
其他等待条件
还有一些操作,比如下拉进度条,模拟javaScript,使用execute_script方法来实现。
在selenium使用过程中,还可以很方便对Cookie进行获取、添加与删除等操作。
输出:
用爬虫抓取网页得到的源代码和浏览器中看到的不一样运用了什么技术?
网页源代码和浏览器中看到的不一样是因为网站采用了动态网页技术(如AJAX、JavaScript等)来更新网页内容。这些技术可以在用户与网站进行交互时,通过异步加载数据、动态更新页面内容,实现更加流畅、快速的用户体验。而这些动态内容无法通过简单的网页源代码获取,需要通过浏览器进行渲染后才能看到。
当使用爬虫抓取网页时,一般只能获取到网页源代码,而无法获取到经过浏览器渲染后的页面内容。如果要获取经过浏览器渲染后的内容,需要使用一个浏览器渲染引擎(如Selenium)来模拟浏览器行为,从而获取到完整的页面内容。
另外,网站为了防止爬虫抓取数据,可能会采用一些反爬虫技术,如设置验证码、限制IP访问频率等。这些技术也会导致爬虫获取到的页面内容与浏览器中看到的不一样。
selenium获取网页数据每次顺序不一样的介绍就聊到这里吧,感谢你花时间阅读本站内容,更多关于selenium爬取网页数据、selenium获取网页数据每次顺序不一样的信息别忘了在本站进行查找喔。
2、本站永久网址:https://www.yuanmacun.com
3、本网站的文章部分内容可能来源于网络,仅供大家学习与参考,如有侵权,请联系站长进行删除处理。
4、本站一切资源不代表本站立场,并不代表本站赞同其观点和对其真实性负责。
5、本站一律禁止以任何方式发布或转载任何违法的相关信息,访客发现请向站长举报
6、本站资源大多存储在云盘,如发现链接失效,请联系我们我们会第一时间更新。
源码村资源网 » selenium获取网页数据每次顺序不一样(selenium爬取网页数据)
1 评论