Selenium Python爬虫入门

本文介绍了Selenium工具,它是一个用于Web应用程序测试的工具,能够模拟用户在浏览器中的操作。文章详细阐述了Selenium的优点和缺点,如能处理Ajax加载的页面但效率较低。通过实例展示了如何安装和使用Selenium,包括设置Chrome浏览器选项、找到并操作页面元素,以及如何抓取网易云音乐用户的听歌排行。最后,文章总结了Selenium在web自动化测试和爬虫中的应用及其优缺点。
摘要由CSDN通过智能技术生成

Selenium Python爬虫

一. Selenium介绍

  1. 简介
    Selenium 是一个用于Web应用程序测试的工具。Selenium测试直接运行在浏览器中,就像真正的用户在操作一样。
    简单来说,就是模仿我们去访问网页.

  2. 优点
    现在越来越多网页使用Ajax来加载网页,通常我们使用requests库获取这样的页面获取的源码与实际并不相符。这时我们可以使用Selenium更加方便。

  3. 缺点
    因为通过模仿用户使用浏览器,所以费时,效率低.

  4. 安装
    直接在cmd中输入:

pip install selenium

即可. 但我们还需要一个webdriver来配合selenium使用,这里以Chrome浏览器为例(需已经安装过Chrome浏览器).
可以通过访问:chormedriver
进行下载,进入后根据自己安装的Chrome浏览器版本对应下载即可.
windows系统可以直接将chromedriver.exe拖到Python的Scripts目录下.
安装完成后,可以用程序测试:

from selenium import webdriver
browser = webdriver.Chrome()

如果弹出一个空白的Chrome浏览器,即配置成功.
如果弹出后闪退,可能是ChromeDriver版本和Chrome版本不兼容.

二. 应用实例

我们以访问wyy音乐随便爬取一个用户的听歌排行为例。
我们首先要获取一个浏览器对象browser,并使用get方法获取到网页页面,这时启动程序便会看到弹出Chrome浏览器,并访问到了页面,这时我们请求一个用户的名称赋给变量username,而option.binary_location变量可以直接右键自己桌面上的Chrome浏览器图标找到属性中的目标路径复制过来即可。

from selenium import webdriver
from selenium.webdriver.common.keys import Keys
from selenium.webdriver.support.wait import WebDriverWait

def getChrome():
    option = webdriver.ChromeOptions()
    option.binary_location = '' #这里需要填写你自己Chrome浏览器启动程序位置
    browser = webdriver.Chrome(chrome_options=option)
    return browser

browser = getChrome()
url = 'https://music.163.com/'
browser.get(url)
username = input("请输入查找用户名\n")

现在显然我们要完成搜索操作,正常我们只需找到页面上的搜索框,并在里面输入名称即可,但程序显然不能直接看到搜索框的所在,他看到的只是一堆代码,所以现在我们需要调用一些方法,来帮助程序找到搜索框。

#找到搜索框
text_input = browser.find_element_by_id('srch')
text_input.send_keys(username)
text_input.send_keys(Keys.ENTER)

我们看到这里调用了 browser的find_element_by_id函数,该函数通过一个id参数找到指定id的元素对象并返回。(id参数每个网站一般都是不同的,我们可以通过打开网页后使用开发者工具通过指针(开发者工具页面左上角箭头)点击搜索框查看源代码找到id。)然后调用send_keys函数把要搜索的用户名传递给他。并在调用一次传递一个ENTER代表输入完成开始搜索。

上述代码执行完毕后我们进入了一个新页面。
在这里插入图片描述
接下来我们点击上述信息栏中的用户,然后在里面找到我们需要的用户
这里我们打开开发者工具分析,发现<用户>这个元素在一个iframe里面,此时我们需要切换到iframe里才能实现接下来的操作。

#找到子页面
browser.switch_to.frame('contentFrame') #该函数接受iframe的id和name作为参数
browser.implicitly_wait(1)

这里调用了一个implicitly_wait隐式等待函数,等待frame切换完成。
切换到iframe后,我们找到 用户 这个元素位置:

#找到用户栏
button = browser.find_element_by_xpath('//*[@data-type=1002]') #该函数参数较复杂,此处略去
button.click()

找到用户元素直接调用click()函数便可以模仿鼠标点击。切换到用户栏内容。

此时浏览器在用户栏显示了你搜索的那个用户
我们使用用户名构造出find_element_by_xpath参数格式的一个字符串,并搜索这个元素。

#找到目标用户
s = '//*[@title="' + username + '"]'
target_user =browser.find_element_by_xpath(s)
target_user.click()
browser.implicitly_wait(1)

完成点击操作,并隐式等待页面加载完成后,我们便已经进入到我们要搜索的用户的页面。

此时,我们只需以同样的方法获取听歌排行歌曲名称并保存下来即可。

#找到目标用户听歌记录
songs = browser.find_elements_by_xpath('//*[@class="song"]/div/div/span/a/b')
#将目标用户听歌记录在本地记录
with open('songs_record.html', 'w', encoding='utf-8') as file:
    i = 1
    for song in songs:
        s = str(i) + ' ' + song.text + '\n' 
        file.write(s)
        print(s, end='')
        i += 1
#关闭浏览器
browser.close()

程序结束后,我们便可在程序目录下找到名为songs_record.html的文件,打开后里面记载了指定用户的听歌排行。

三. 总结

以上,就是Selenium的一些介绍和简单用法。
Selenium是当今最流行的web自动化测试工具。在Selenium爬虫里,我们可以简单地通过模拟网页下拉,来加载Ajax请求。而使用其他库可能需要更复杂的操作来实现。而它的缺点显然是必须调用浏览器,且模拟操作更加耗时。

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值