业界动态
python爬虫之selenium库,浏览器访问搜索页面并提取信息,及隐藏浏览器运行
2024-10-31 20:50

如果链接简单,爬虫可以通过链接用requests库提取页面信息,如爬取豆瓣top250影片信息,链接简单易懂。参考:爬取豆瓣top250影片信息

python爬虫之selenium库,浏览器访问搜索页面并提取信息,及隐藏浏览器运行

但如果遇到一些搜索之类的,基于js动态加载的网页,以上就不适合,如爬虫b站,搜索“爬虫”页面,第一页链接如下,第二页又是很长没规律的链接。很难用requests库提取页面。

针对以上情况,我们可以通过浏览器直接访问每个页面,然后提取页面。当然是让爬虫自己打开浏览器,输入内容访问,然后提取页面元素。这个过程就要用到 selenium 库。

selenium其实它就是一个自动化测试工具,支持各种主流的浏览器。遇到python,selenium 就变成了爬虫利器。

1、安装

下载浏览器驱动,我用的是 Chrome 浏览器,所以下载Chrome驱动即可,当然你可以下载其他浏览器驱动。下载链接:ChromeDriver,找到和自己浏览器版本一致或者最接近的。

2、配置环境变量

下载解压后,配置环境变量。

解压,然后创建一个存放浏览器驱动的目录,如: D:PythonDriver , 将下载的浏览器驱动文件(例如:chromedriver、geckodriver)丢到该目录下,我这里是chromedriver。

我的电脑–>属性–>系统设置–>高级–>环境变量–>系统变量–>Path,将“D:PythonDriver”目录添加到Path的值中。比如:Path字段;D:PythonDriver

关于环境变量不生效的问题
1:尝试将浏览器驱动,直接放在python安装目录试试
2:配置环境变量后,重启电脑生效(我就是重启才生效

1、浏览器自动访问

代码,打开浏览器,并访问。

以上,执行代码自动打开浏览器
在这里插入图片描述

2、输入关键字并搜索

分析代码,可以看到,搜索框和按钮键的class元素值为 nav-search-input 和 nav-search-btn
在这里插入图片描述
找到元素后,用find_element方法定位找到此元素,定位有多种方式。

以上也可以用 的方式,对应值。

我这里用class值定位即可。

:以上如果报错提示没有By这个类型,需要导入包from selenium.webdriver.common.by import By

执行效果
在这里插入图片描述

以上基本的搜索动作就完成了。

有网页了,可以用以前学的BeautifulSoup库提取页面代码元素了。

1、切换窗口

由于搜索页面是重新打开了一个页面,所以还需要在代码种切换,否则默认的都是第一个页面。

window_handles:获取页面句柄,返回值的为列表list。
switch_to.window:切换页面。

以上得到的print(windows)句柄值,值为

2、获取页面源代码提取元素

切换页面后,用 获取页面源代码。

获取源代码后,就可以提取元素了,分别找到对应的class值即可。这里提取值有,视频名称,up主,播放量,时长,链接,日期。
在这里插入图片描述
最后代码为

执行结果为

这样单个页面的所有视频信息提取完成了。

以上代码种,切换页面后,有一个等待5秒的代码。

如果不加这行,有时候获取不到完整的信息而报错,因为代码元素没有加载完成,代码就执行完了,从而获取不到元素值而报错,所以必须加一个等待时间。报错如下

time.sleep(5),如果临时调试,也可以用,但是在实际环境,尽量少用,因为实际环境网络差异,可能5秒也加载不出,而报错。所以需要灵活点的方式,有三种等待方法。

1、强制等待

sleep(x) x单位为s,sleep等待的是元素 。

不管你浏览器是否加载完了,程序都得等待,时间一到,继续执行下面的代码,作为调试很有用。

隐性等待和显性等待可以同时用。

注意:等待的最长时间取两者之中的大者

2、隐性等待

隐性等待的是页面,implicitly_wait(x) x单位为s。

一旦设置,这个隐式等待会在WebDriver对象实例的整个生命周期起作用,它不针对某一个元素,是全局元素等待,即在定位元素时,需要等待页面全部元素加载完成,才会执行下一个语句。

如果超出了设置时间的则抛出异常。

缺点:当页面某些js无法加载,但是想找的元素已经出来了,它还是会继续等待,直到页面加载完成(浏览器标签左上角圈圈不再转,才会执行下一句。某些情况下会影响脚本执行速度

3、显性等待

需要通过from selenium.webdriver.support.wait import WebDriverWait导入模块

  • driver:浏览器驱动
  • timeout:最长超时时间,默认以秒为单位
  • poll_frequency:检测的间隔步长,默认为0.5s
  • ignored_exceptions:超时后的抛出的异常信息,默认抛出NoSuchElementExeception异常。

配合该类的until()和until_not()方法
程序每隔poll_frequency秒看一眼,如果条件成立了,则执行下一步,否则继续等待,直到超过设置的最长时间,然后抛出TimeoutException。

WebDriverWait与expected_conditions结合使用,示例

expected_conditions类提供的预期条件判断的方法

4、更改代码等待方式

3个地方等待,输入关键词,点击按钮,还有切换页面。

输入搜索框,并确定。

调整页面等待,By.CLASS_NAME定位一个class值,并不能很准确,所以这里用By.CSS_SELECTOR定位。

对CSS_SELECTOR规则不熟的,直接查看源代码复制即可,当然也不一定非要最底层的元素值,我这里到div.video.i_wrapper.search-all-list即可。

在这里插入图片描述

最终代码为

如果长时间运行,不可能一直打开浏览器,这时候就需要用无UI的浏览器,或者隐藏浏览器无界面运行。

方法一:PhantomJS浏览器

PhantomJS一个基于webkit内核的无头浏览器,即没有UI界面,即它就是一个浏览器,只是其内的点击、翻页等人为相关操作需要程序设计实现。

:最新版selenium(4.x.x)已经放弃PhantomJS,会报错AttributeError: module ‘selenium.webdriver‘ has no attribute ‘PhantomJS‘

如需要用这种浏览器,需要卸载最新的selenium,安装3.8.0版本或以下的。

phantomjs下载地址:https://phantomjs.org/download.html,和安装chrome驱动一致,解压,配置环境变量即可。

安装完成后,在代码种将webdriver.Chrome()改成webdriver.PhantomJS()即可。

方法二:配置options无头模式

通过配置options的headless属性。无头模式有可能被检测,容易被发现。

headless属性来配置ChromeDriver以使用Selenium在无头模式下启动google-chrome浏览器。然后将参数传入webdriver.Chrome即可。

方法三:在虚拟显示器上工作

推荐使用这种在服务器上执行,这种方式,推荐是在Linux服务器中进行。因为windows容易报错,而且windows不支持某些包。

如报错:ModuleNotFoundError: No module named ‘fcntl’,原因是fcntl包并不支持在window上面运行。

1:Linux安装chrome和下载chromedriver驱动

Linux安装chrome

安装完成后,查看chrome版本

Linux下载chromedriver驱动,根据chrome版本下载在官网相应驱动版本。

2:虚拟显示器执行

使用虚拟桌面前,服务器需要安装xvfb支持虚拟桌面

安装包pyvirtualdisplay

倒入包名,开启虚拟显示器。

或者用另一个包xvfbwrapper,也可以使用虚拟桌面。

安装包

倒入

    以上就是本篇文章【python爬虫之selenium库,浏览器访问搜索页面并提取信息,及隐藏浏览器运行】的全部内容了,欢迎阅览 ! 文章地址:http://dfvalve.xrbh.cn/news/2246.html 
     资讯      企业新闻      行情      企业黄页      同类资讯      首页      网站地图      返回首页 迅博思语资讯移动站 http://keant.xrbh.cn/ , 查看更多   
最新新闻
“撒旦”人血鞋?碰瓷新疆棉花的耐克,又开始喊冤了?
继主动碰瓷新疆棉花把自己搞得股价大跌之后耐克秉承着“no zuo no die”的精神又开始暗搓搓搞“阴间操作”限量发售含人血的“撒
tiktok怎么搭建外网 详细教程及步骤
TikTok怎么搭建外网(详细教程及步骤)TikTok是一款非常流行的短视频社交应用程序,它在全球范围内拥有数亿用户。在使用TikTok的
《以案释法》步数越多,收益越高?别被“走路也能赚钱”的理财广告忽悠了
  走路也能赚到钱的理财  “丑的人还在睡觉,美的人已经跑出一杯星巴克了。”2016年的一天,一个女孩晒出的朋友圈截图引起了
如何用生意参谋算出同行店铺真实销售额
怎么经过生意顾问算出同行店肆实在销售额?大多数在淘宝天猫工作过的人都知道,他们的背景显现了同行商铺的买卖数据,这被称为买
一款最近比较火的网站统计分析系统,易分析具有什么样的功能呢?
一、产品简介北京普艾斯科技有限公司成立于2009年,服务客户1000+,包括电商、金融、保险、政务服务等行业。私有化部署,全渠道
向佐快乐大本营2024年精彩回顾:四年时光共欢笑
张大大谢娜力捧下的综艺新星张大大一位在娱乐圈中颇具人气的主持人他的成名之路离不开谢娜的提携回顾张大大的成名之路可以说谢娜
PingTools app
《PingTools app》是一款非常好用的实用工具软件,软件内拥有丰富的功能,包含了包括浏览器扫描等。使用非常简单,直接下载安装
抖音能看到谁搜索过自己吗?
尊敬的用户,您好。针对抖音平台是否能够查看谁搜索过自己的问题,我们需要做一些详细说明。首先,根据我们了解到的情况,在抖音
什么是人工智能“语料库”?为什么每个人都在谈论它?
编者按:比尔盖茨(Bill Gates)、Reddit 首席执行官和其他科技领袖越来越多地谈论“语料库”,现在是时候了解它是“何方神圣”
LED行业词语中英对应
1、led 灯具构成英文led 球泡灯:led bulbLed 贴片灯珠:SMD LEDLed驱动电源:led driver隔离电源:isolated driver非隔离电源:
本企业新闻

点击拨打: