目录
一、说明
环境:win10家庭版
编辑器:pycharm edu
python版本:py 3.10
使用的浏览器:火狐(Firefox)
本次内容:获取目标工作岗位的信息,并在同级目录下生成一个excl表格直观展示结果
二、Firefox驱动下载并配置环境变量
2.1、下载火狐浏览器驱动
下载链接如下:
进入页面后,滑到以下内容:
下载完成后,将压缩包解压出来的文件,放到和当前编辑器(pycharm)python解释器安装文件夹下,如下(安装包放哪里无所谓,但是解压出来的东西如果在后面有一个数字,记得把重命名把数字清除掉):
方法一、命令行命令找到安装路径,命令为:py -0p
方法二、pycharm 编辑器查看
运行一个当前文件夹的.py程序,在控制台会出现安装路径,如下(但是我的就没有出现,不建议使用这个方法):
2.2、配置驱动环境变量
配置windows环境变量可参考文章:环境变量的添加
三、selenium概念
3.1、概念引入
selenium是Web的自动化测试工具,最初是为网站自动化测试而开发的,selenium 可以运行在浏览器,支持所有主流的浏览器。在爬虫方面使用selenium一般是为了绕过JS加密,直接获取页面内容。
selenium可以使用:id,name,tagName,className,linkText,partialLinkeText,css,
XPATH等等进行页面源代码的解析,从而获取页面的内容。
关键词:自动化测试、运行在浏览器、绕过JS、获取页面内容
3.2、一些函数
3.2.1、切换不同窗口
driver.switch_to.window(driver.window_handles[-1]) #这代表着切换到最后一个打开的窗口
3.2.2、切换到不同iframe
1、找到页面里的iframe的XPATH路径
2、使用switch_to.frame(路径),把不同的iframe路径放入即可切换到不同的iframe
3.2.3、无头浏览器
解释:数据在后台加载,浏览器不进行显示
用法:
1)导入支持包,如下:
from selenium.werdriver.浏览器类型.options import Options
2)创建配置,如下:
opt = Options()
opt.add_argument("--headless")
opt.add_argument("--disbale-gpu")
web = 浏览器对象(options=opt)
四、运行步骤
本文主要使用XPATH进行数据的提取,对XPATH简单介绍:XPATH入门
4.1、打开第一个窗口
说明:源代码不能直接放外链,审核通过不了,以下内容的url均使用文字代替,移植源代码测试注意识别并更改
from selenium.webdriver import Firefox # 导入火狐驱动
def get_info():
driver = Firefox() # 创建一个浏览器对象
driver.get("这里是访问的url") # 访问网页
if __name__ == '__main__': # 函数运行入口
get_info()
上面代码运行的结果就会直接在火狐浏览器(因为使用的Firefox驱动,生成的也是Firefox对象)打开发起请求的url(不过速度会比较慢,这也是selenium的特点)页面
4.2、更多信息
源代码如下,发起请求的url已替换为文字,测试使用注意识别:
from selenium.webdriver import Firefox # 导入火狐驱动
from selenium.webdriver.common.by import By # 导入需要的组件
from selenium.webdriver.common.keys import Keys
import time
import xlwt
def get_info():
# 在同级目录下创建一个excl存放数据
workbook = xlwt.Workbook(encoding='ascii')
worksheet = workbook.add_sheet("No.1")
worksheet.write(0, 0, '公司名称') # 1行1列
worksheet.write(0, 1, '岗位名称')
worksheet.write(0, 2, '岗位要求与薪资')
worksheet.write(0, 3, '发布时间')
driver = Firefox() # 创建一个浏览器对象
driver.get("访问的url") # 访问网页
# 访问页面后,出现登录或注册弹窗,影响下一步,所以要把弹窗关掉
# 右键检查,选项页面元素,直接复制xpath路径
driver.implicitly_wait(8)
# driver.switch_to.window(driver.window_handles[-1])
one_el = driver.find_element(By.XPATH, '//*[@id="cboxClose"]') # 定位标签位置,一般是打叉的位置
one_el.click() # 点击该位置,点击打叉也就是关闭弹窗
time.sleep(3)
# 在文本框输入内容,先定位,在输入值,敲回车或者点击搜索
driver.find_element(By.XPATH, '//*[@id="search_input"]').send_keys("python", Keys.ENTER)
time.sleep(3)
driver.refresh()
time.sleep(3)
all_li = driver.find_elements(By.XPATH, '/html/body/div/div[2]/div/div[2]/div[3]/div/div[1]/div')
a = 1
for li in all_li:
job_name = li.find_element(By.XPATH, './div/div/div/a').text
job_time = li.find_element(By.XPATH, './div/div/div/span').text
job_company = li.find_element(By.XPATH, './div/div[2]/div/a').text
job_requirement = li.find_element(By.XPATH, './div/div/div[2]').text
worksheet.write(a, 0, job_company) # 写入第1列
worksheet.write(a, 1, job_name) # 写入第2列
worksheet.write(a, 2, job_requirement) # 写入第3列
worksheet.write(a, 3, job_time) # 写入第4列
a += 1
print("写入成功%d次", a-1)
workbook.save('data.xls')
print("数据保存成功,同级目录下查看数据!")
if __name__ == '__main__': # 函数运行入口
get_info()
五、运行结果
5.1、程序运行结果
如下图1
图1
5.2、生成文件结果
如下图2、3:
图2
图3
六、完善
6.1、获取更多更详细的信息
点击进每一个岗位页面进行提取,提取结束后关掉,在进入下一个岗位,当页内容提取结束后,点击下一页继续提取,循环反复。
6.2、提升运行速度
没思路。