本文主要讲解selenium
的安装和基础使用,然后利用selenium
爬取拉勾网最新的职位信息。
安装Selenium
selenium
的安装只需要在命令端输入以下命令。
pip install selenium
selenium
安装好之后,还需要安装相应浏览器的Driver,本文用到的是Chrome浏览器
,所以拿Chrome浏览器为例,安装相应的ChromeDriver
来驱动浏览器。
ChromeDriver
下载地址:
http://npm.taobao.org/mirrors/chromedriver/
在下载之前先来确认下我们使用的浏览器版本:
通过ChromeDriver
的下载链接,找到Chrome浏览器
相近版本电脑系统进行下载。
下载完成之后,解压,将其放置在Python安装路径
下的文件夹中即可。
接着我们测试一下,用Selenium
操控浏览器打开百度网页:
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
数据的定位方法有以下几种:
这里要注意的是element
和elements
的区别,后一个加了 s
,element
是查找一个,elements
是查找全部。本文用到find_element_by_xpath
和find_elements_by_xpath
。
find_element_by_xpath
和 lxml
库的xpath语法一样,也是用在 XML 文档中对元素和属性进行遍历。这里可以在开发者工具中复制xpath语法,但查找多个元素时,还需要适当修改下xpath语法,所以我建议自己编写。
我们需要的数据存在多个li
标签下,所以我们需要先提取li
标签:
wb.find_elements_by_xpath('//div[@class="s_position_list "]/ul[@class="item_con_list"]/li')
接着建立for循环
提取我们需要的文本数据:
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 ')