Python爬虫——Selenium在获取网页数据方面的使用

这篇具有很好参考价值的文章主要介绍了Python爬虫——Selenium在获取网页数据方面的使用。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

目录

一、Selenium

(一)引入

 (二)启动浏览器

二、操作

(一)点击

(二)输入

三、数据获取

四、特点

五、抓取拉钩实例

六、其他操作

(一)窗口切换

代码

(二)操作下拉列表/无头浏览器

代码


一、Selenium

selenium读取网页数据,python,爬虫

(一)引入

        一个电影票房的网站里,响应数据是一串完全看不懂的字符串,这些字串解开之后就是左边的页面。因为解密过程有可能很痛苦,那换个角度,能否不用 requests,而让浏览器本身完成对这些数据的解密和执行,直接显示页面呢

        于是有思路:让程序连接浏览器,让浏览器完成复杂操作,此时我们只接收最终结果

        Selenium 可以实现,它本身是一款自动化测试工具,可以打开浏览器,像人一样操作浏览器,人们可以从 Selenium 中直接提取到网页上的各种信息,因为网页信息对于 Selenium 来说是透明的,其本质就是运行一个浏览器

安装说明:

        Selenium 的环境搭建需要安装包下载对应的浏览器驱动

        对应的浏览器驱动放在 Python 解释器所在的文件夹下并将名称改为 chromedriver(Pycharm执行结果前面的那个路径)

selenium读取网页数据,python,爬虫

 (二)启动浏览器

# 导入并启动
from selenium.webdriver import Chrome
# 1.创建浏览器对象
web=Chrome()
# 2.打开浏览器打开网址
web.get("http://www.baidu.com")

        启动成功,显示正在受自动测试软件控制,使用最新版的谷歌浏览器和驱动启动后会自动关闭浏览器,暂时不确定对于获取数据会不会有影响

selenium读取网页数据,python,爬虫

        这样就建立了程序和浏览器的关系,可以用程序使得浏览器跑起来(对于动态加载的数据会很有效) 

二、操作

(一)点击

        打开网页,比如我想在这个网页点击“全国”这个按钮,可以将 Xpath 复制过来

selenium读取网页数据,python,爬虫

         使用 find_element(有些版本是 find_element_by_xpath)

from selenium.webdriver import Chrome
# 1.创建浏览器对象
web=Chrome()
# 2.打开浏览器打开网址
web.get("http://lagou.com")

# 找到某个元素点击
el=web.find_element('xpath','//*[@id="changeCityBox"]/p[1]/a')    
# 这样子找到按钮,可以by许多东西,有s的会知道所有element
el.click()  # 点击

(二)输入

        想要输入,需要先找到输入框,输入后使用回车键,或者点击搜索按钮(与上面一直)

1.找到输入框

selenium读取网页数据,python,爬虫

2.在输入框输入"Python"

        找到输入框,find_element() 后使用 send_keys() 输入

        如果想按键盘的回车键,需要导包,使用Keys.xxx

from selenium.webdriver.common.keys import Keys

time.sleep(1)

web.find_element('xpath','//*[@id="search_input"]').send_keys('python',Keys.ENTER)

         Keys 可以操作很多键盘的按键

selenium读取网页数据,python,爬虫        输入前注意:上面选择“全国”选项之后,若网站是动态加载的,可能加载的比程序运行的滞后,所以可能没加载出来要找的内容而导致程序报错,所以 sleep 一秒钟

三、数据获取

        现在其实已经获取了想要的内容,找某个元素提取内容即可,观察网页结构每个岗位信息都在这个 list 里面,循环遍历<div class="item__10RTO">

selenium读取网页数据,python,爬虫

         刚开始通过 tag name 查找,发现有很多个 a 标签,就混乱了,于是根据复制的 xpath 结果来查找,也是用类似的方式继续查找其他信息,这里我找到了薪资、公司名和岗位一些岗位信息

# for a in div_list:
#     job_name=a.find_elements('tag name','a')   # a标签
#     for n in range(len(job_name)):
#         print(job_name[n].text)

        这里主要是通过属性、标签名、xpath 的相对路径完成对数据元素的定位

time.sleep(1)

div_list=web.find_elements('xpath','//*[@id="jobList"]/div[1]/div')

for a in div_list:
    job_name=a.find_element('id','openWinPostion').text
    price=a.find_element('class name','money__3Lkgq').text
    company_name=a.find_element('xpath','./div[1]/div[2]/div/a').text
    print(job_name,price,company_name)
    # .表示从当前节点开始,//表示某个父节点的所有后代,*为任意节点的id属性为 "openWinPostion" 的文本

        这里的一点 xpath 基础:. 表示从当前节点开始,// 表示某个父节点的所有后代,* 为任意节点的id属性为为"openWinPostion" 的文本

        成功

selenium读取网页数据,python,爬虫

四、特点

        selenium使用便捷,易于编写,可以屏蔽许多js加密、解密问题,但是其运行速度较慢,且一些网站会针对通过 selenium 方法进行的访问做反爬,所以使用的时候并不是万能的

五、抓取拉钩实例

# 启动
from selenium.webdriver import Chrome
from selenium.webdriver.common.keys import Keys
import time
# 1.创建浏览器对象
web=Chrome()
# 2.打开浏览器打开网址
web.get("http://lagou.com")

# 找到某个元素点击
el=web.find_element('xpath','//*[@id="changeCityBox"]/p[1]/a')    # 这样子找到按钮,可以by许多东西,有s的会知道所有element
el.click()  # 点击

time.sleep(1)

# 找到输入框,用 send_keys 输入 Python
# 想要输入键盘按钮指令需要导包
web.find_element('xpath','//*[@id="search_input"]').send_keys('python',Keys.ENTER)

time.sleep(1)

div_list=web.find_elements('xpath','//*[@id="jobList"]/div[1]/div')

for a in div_list:
    job_name=a.find_element('id','openWinPostion').text
    price=a.find_element('class name','money__3Lkgq').text
    company_name=a.find_element('xpath','./div[1]/div[2]/div/a').text
    print(job_name,price,company_name)
    # .表示从当前节点开始,//表示某个父节点的所有后代,*为任意节点的id属性为 "openWinPostion" 的文本

-------------------------------------------------------分割线--------------------------------------------------------------- 

六、其他操作

        以下为 selenium 的一些补充操作

(一)窗口切换

        假设在搜索 "Python" 关键词后到了新页面后,想点击进入新窗口查看岗位描述,此时会开启一个新窗口

selenium读取网页数据,python,爬虫selenium读取网页数据,python,爬虫

        注意:不同于人类视角,对于 selenium 而言,打开窗口之后其视角仍然是上一个窗口,并没有新页面的内容

        那如何对新窗口的内容进行提取呢,要做的就是窗口切换

web.switch_to.window(web.window_handles[-1]) # 转移到选项卡为-1窗口

        上面这句代码是核心,若没有进行切换程序将直接报错,因为程序连接的是原来的窗口 

        这样 selenium 就会调整到新窗口上,此时可以直接提取新窗口内容了

job_detail=web.find_element('xpath','//*[@id="job_detail"]/dd[2]/div').text
print(job_detail)

        成功

selenium读取网页数据,python,爬虫

        处理完后可以将新窗口关闭,记得将 selenium 视角变更回来(也可使用 switch_to_default_content() 换到最开始切换前的窗口),此时可以尝试打印原窗口的内容,说明视角已经切换回来了

web.close()

web.switch_to.window(web.window_handles[0])

        如果在页面中遇到了 iframe ,想要提取里面的内容必须先拿到 iframe 然后切换视角到 iframe ,然后再拿到数据,用下面这个函数即可selenium读取网页数据,python,爬虫

        切换到 iframe 后进行 find 就是以 iframe 里面为准了

代码

from selenium.webdriver import Chrome
from selenium.webdriver.common.keys import Keys
import time

# 创建浏览器对象
web = Chrome()
# 打开浏览器打开网址
web.get("http://lagou.com")

# 找到某个元素点击
el = web.find_element('xpath', '//*[@id="changeCityBox"]/p[1]/a')
el.click()  # 点击

time.sleep(1)

web.find_element('xpath', '//*[@id="search_input"]').send_keys('python', Keys.ENTER)

time.sleep(1)

web.find_element('xpath', '//*[@id="openWinPostion"]').click()

time.sleep(1)

web.switch_to.window(web.window_handles[-1])  # 转移到选项卡为-1窗口

job_detail = web.find_element('xpath', '//*[@id="job_detail"]/dd[2]/div').text
print(job_detail)

web.close()

web.switch_to.window(web.window_handles[0])

print(web.find_element('xpath', '//*[@id="openWinPostion"]'))

(二)操作下拉列表/无头浏览器

        回到原来的那个票房网页

selenium读取网页数据,python,爬虫

from selenium.webdriver import Chrome
web = Chrome()
web.get("https://www.endata.com.cn/BoxOffice/BO/Year/index.html")

        打开浏览器,这里可以选择年份(需要点击),这是通过网页的 select 标签存放的

selenium读取网页数据,python,爬虫

        这个列表这个是通过 css 动态加载的,不需要鼠标点击就能出现

selenium读取网页数据,python,爬虫

        如何处理下拉框对年份进行筛选:先定位到下拉框,使用 selenium 拿到该节点

selenium读取网页数据,python,爬虫

        在拿到该节点之后由于是一个下拉列表,需要对元素包装一下,包装成一个下拉菜单,这样就可以调整 select 的位置了。

sel=Select(sel_el) # 把元素放进去包装成 Select 类型的东西
print(sel,type(sel),id(sel))

<selenium.webdriver.support.select.Select object at 0x00000269EFA82910> <class 'selenium.webdriver.support.select.Select'> 2654015596816
# 是一个select类型的对象

selenium读取网页数据,python,爬虫

        如图不同年份之间的选项是以不同的 option 存储的,我想随意切换所有选项如何做?几乎固定的操作:

# 让浏览器调整选项让浏览器调整选项
for i in range(len(sel.options)): # 下拉框的所有选项的长度,i是下拉框每个选项索引位置
    sel.select_by_index(i) # 按照索引进行切换
    # time.sleep(3)
    movie_table=web.find_element('xpath','//*[@id="TableList"]/table')
    print(movie_table.text)

        代码解释:根据下拉框选项的长度循环,按索引进行选择,找到数据,打印

        除了刚刚的索引,可以根据以下三种方法进行下拉框选择,区分三个 by:

selenium读取网页数据,python,爬虫

selenium读取网页数据,python,爬虫

        无头浏览器就是让浏览器在后台默默运行,如果不想看到浏览器运行界面,可以对生成的web对象做配置文章来源地址https://www.toymoban.com/news/detail-723068.html

from selenium.webdriver.chrome.options import Options
# 设置参数
opt=Options()
opt.add_argument("--headless") # 无头
opt.add_argument("--disable-gpu") #不用显卡
web = Chrome(options=opt) # 参数配置到浏览器中

代码

from selenium.webdriver import Chrome
from selenium.webdriver.support.select import Select
import time
from selenium.webdriver.chrome.options import Options
# 设置参数
opt=Options()
opt.add_argument("--headless") # 无头
opt.add_argument("--disable-gpu") #不用显卡
web = Chrome(options=opt)

web.get("https://www.endata.com.cn/BoxOffice/BO/Year/index.html")

# 定位到下拉列表,拿到节点
sel_el=web.find_element('xpath','//*[@id="OptionDate"]')

time.sleep(1)

sel=Select(sel_el) # 把元素放进去包装成 Select 类型的东西

# 让浏览器调整选项让浏览器调整选项
for i in range(len(sel.options)):   # 下拉框的所有选项的长度,i是下拉框每个选项索引位置
    sel.select_by_index(i) # 按照索引进行切换
    # time.sleep(3)
    movie_table=web.find_element('xpath','//*[@id="TableList"]/table')
    print(movie_table.text)

到了这里,关于Python爬虫——Selenium在获取网页数据方面的使用的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Python爬虫基础(三):使用Selenium动态加载网页

    Python爬虫基础(一):urllib库的使用详解 Python爬虫基础(二):使用xpath与jsonpath解析爬取的数据 Python爬虫基础(三):使用Selenium动态加载网页 Python爬虫基础(四):使用更方便的requests库 Python爬虫基础(五):使用scrapy框架 (1)Selenium是一个用于Web应用程序测试的工具。

    2024年02月06日
    浏览(21)
  • python 爬虫热身篇 使用 requests 库通过 HTTP 读取网络数据,使用 pandas 读取网页上的表格,使用 Selenium 模拟浏览器操作

    在过去,收集数据是一项繁琐的工作,有时非常昂贵。机器学习项目不能没有数据。幸运的是,我们现在在网络上有很多数据可供我们使用。我们可以从 Web 复制数据来创建数据集。我们可以手动下载文件并将其保存到磁盘。但是,我们可以通过自动化数据收集来更有效地做

    2023年04月08日
    浏览(21)
  • python爬虫篇:使用Selenium自动打开小说网页并自动浏览

    需求:python,pycharm,Selenium库,火狐或ie浏览器 文章目录 一、 自动打开小说网页并浏览 简单使用Selenium库,实现对浏览器的自动化操作 一、自动打开小说网页并浏览 方法:使用命令行下载或者在pycharm中下载 使用命令行下载:打开cmd终端,输入pip install selenium  在pycharm中下

    2024年02月10日
    浏览(19)
  • 关于使用Selenium获取网页控制台的数据

    需要获取网页的控制台的数据,如下图 Pycharm安装 Selenium安装 Selenium中的find_element方法 //供参考 这里使用Chrome有一个技巧可以直接复制元素的信息 到此我们已经完成了一部分简单的自动化操作了 接下来我们需要记录和获取控制台的信息,这部分参考可参考 jmeter-调用python脚本

    2024年02月02日
    浏览(23)
  • Selenium + Chrome WebDriver + JS:实现高级爬虫技巧,获取网页响应状态码!

    随着爬虫技术的发展,我们使用requests库能够轻松获取响应状态码,但对于Selenium爬虫,同样可以迎刃而解。通过执行JavaScript脚本,我们可以智能地捕获网页的响应状态码,实现高级的爬虫功能。 在开始之前,确保你已正确安装Selenium和Chrome WebDriver,并配置好环境变量。 以下

    2024年02月07日
    浏览(19)
  • 一个月学通Python(三十四):使用Selenium模拟人工操作及获取网页内容

    结合自身经验和内部资料总结的Python教程,每天3-5章,最短1个月就能全方位的完成Python的学习并进行实战开发,学完了定能成为大佬!加油吧!卷起来! 全部文章请访问专栏:《Python全栈教程(0基础)》 再推荐一下最近热更的:《大厂测试高频面试题详解》 该专栏对近年

    2024年02月13日
    浏览(19)
  • Python 自动获取大批量excel数据并填写到网页表单(pandas;selenium)

    自动获取大批量excel数据并填写到网页表单 部分网页获取下拉列表点击的方式有所差异 这个请根据网页源码自做选择 一定要学会使用IPDB调试工具 太好用了!!!! 可能需要pip update一下 看提示 很好解决 没有报错最好啦 Python真是太好用了 办公利器啊!!!!

    2024年02月12日
    浏览(22)
  • 爬虫实战(一)Python+selenium自动化获取数据存储到Mysql中

      行话说得好,“爬虫学得好,牢饭吃到饱!”哈哈博主是因这句话入的坑,不为别的就为邀大家一起铁窗泪(bushi),本人虽小牛一只,但是喜爱捣鼓技术,有兴趣的小伙伴们可以共同探讨,也欢迎各位大佬们的指点,愿共同进步!   这次计划是翻墙爬取外网某网站

    2024年01月17日
    浏览(19)
  • python爬虫进阶篇:Scrapy中使用Selenium模拟Firefox火狐浏览器爬取网页信息

    接着上一篇的笔记,Scrapy爬取普通无反爬、静态页面的网页时可以顺利爬取我们要的信息。但是大部分情况下我们要的数据所在的网页它是动态加载出来的(ajax请求后传回前端页面渲染、js调用function等)。这种情况下需要使用selenium进行模拟人工操作浏览器行为,实现自动化

    2024年02月04日
    浏览(14)
  • java爬虫遇到网页验证码怎么办?(使用selenium模拟浏览器并用python脚本解析验证码图片)

            笔者这几天在爬取数据的时候遇到了一个很闹心的问题,就是在我爬取数据的时候遇到了验证码,而这个验证码又是动态生成的,尝试了很多方法都没能绕开这个验证码问题。         我的解决方案是:使用selenium模拟浏览器行为,获取到动态生成的验证码后用

    2024年02月09日
    浏览(19)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包