安装Selenium自动化测试框架、并用Selenium爬取拉勾网最新职位数据

2021-08-05 14:45:19 浏览数 (1)

本文主要讲解selenium的安装和基础使用,然后利用selenium爬取拉勾网最新的职位信息。

安装Selenium

selenium 的安装只需要在命令端输入以下命令。

代码语言:javascript复制
pip install selenium

selenium安装好之后,还需要安装相应浏览器的Driver,本文用到的是Chrome浏览器,所以拿Chrome浏览器为例,安装相应的ChromeDriver 来驱动浏览器。

ChromeDriver下载地址:

代码语言:javascript复制
http://npm.taobao.org/mirrors/chromedriver/

在下载之前先来确认下我们使用的浏览器版本:

通过ChromeDriver的下载链接,找到Chrome浏览器相近版本电脑系统进行下载。

下载完成之后,解压,将其放置在Python安装路径下的文件夹中即可。

接着我们测试一下,用Selenium操控浏览器打开百度网页:

代码语言:javascript复制
from selenium import webdriver
wb = webdriver.Chrome()
wb.get('https://www.baidu.com/')

这时浏览器会自动打开百度的首页,左上角会出现“Chrome正受到自动测试软件控制”。

任务实战

目标网站:

代码语言:javascript复制
https://www.lagou.com/zhaopin/1/?filterOption=3&sid=32e5402e4e034a3b929d06c764ba52c6

selenium 有个很大的好处就是不用怎么考虑网站是动态还是静态,只要你在浏览器上看到的就能爬取直接下来,因为 selenium 和我们所看到的网页一样,都是已经经过渲染的。

而我们要考虑的是网页的翻页以及如何定位到数据。

网页翻页

selenium进行翻页可以直接修改相关参数,然后建立一个循环进行传入参数,这是最普遍的。还有另一种就是找到网页进行翻页的按钮,进行模拟点击,或者对网页进行模拟向下拉动,显示更多的内容。本文用的是第一种方法。

拉勾网页数有限定,只能显示 30 页,点击下一页链接,参数 zhaopin 后面的数字会发生递增变化:

数据定位

selenium数据的定位方法有以下几种:

这里要注意的是elementelements的区别,后一个加了 selement是查找一个,elements是查找全部。本文用到find_element_by_xpathfind_elements_by_xpath

find_element_by_xpathlxml库的xpath语法一样,也是用在 XML 文档中对元素和属性进行遍历。这里可以在开发者工具中复制xpath语法,但查找多个元素时,还需要适当修改下xpath语法,所以我建议自己编写。

我们需要的数据存在多个li标签下,所以我们需要先提取li标签:

代码语言:javascript复制
wb.find_elements_by_xpath('//div[@class="s_position_list "]/ul[@class="item_con_list"]/li')

接着建立for循环提取我们需要的文本数据:

代码语言:javascript复制
for li in ul:
    zw_h3 = li.find_element_by_xpath('./div/div/div/a/h3').text  

思路和基本用法都已经讲解清楚了,过多的就不再赘述,这里直接贴出完整代码:

代码语言:javascript复制
# -*-codEing = utf-8 -*-
# @Time : 2021/2/13 13:19
# @Author : 锋小刀
# @File : 拉勾网.PY
# @Software : PyCharm

from selenium import webdriver
import pandas as pd
import time

df = pd.DataFrame()
wb = webdriver.Chrome()
for i in range(1, 6):
    wb.get(f'https://www.lagou.com/zhaopin/{i}/?filterOption=3&sid=32e5402e4e034a3b929d06c764ba52c6')
    time.sleep(2)
    ul = wb.find_elements_by_xpath('//div[@class="s_position_list "]/ul[@class="item_con_list"]/li')
    for li in ul:
        zw_h3 = li.find_element_by_xpath('./div/div/div/a/h3').text  # 职位名称
        dd_em = li.find_element_by_xpath('./div/div/div/a/span/em').text  # 工作地点
        span_div = li.find_element_by_xpath('./div/div/div[2]/div').text  # 工资|经验|学历
        gs_div = li.find_element_by_xpath('./div/div[2]/div').text  # 公司名称
        gm_div = li.find_element_by_xpath('./div/div[2]/div[2]').text  # 公司规模
        fl_div = li.find_element_by_xpath('./div[2]/div[2]').text  # 公司福利
        print(zw_h3, dd_em, span_div, gs_div, gm_div, fl_div, sep='  |  ')
        data = pd.DataFrame(
            {'职位名称': [zw_h3], '工作地点': [dd_em], '工资|经验|学历': [span_div], '公司名称': [gs_div], '公司规模': [gm_div],
             '公司福利': [fl_div]})
        df = pd.concat([df, data])
df.to_csv('拉勾网最热门职位.csv', index=False, mode='a ')

0 人点赞