大家好,在之前我们讲解过很多基于requests bs4
的爬虫,现在换个口味,本文将基于Selenium
讲解如何爬取并使用openpyxl
存储拉勾网招聘数据。
需求说明
目标url:https://www.lagou.com/
用Selenium
爬虫实现下方需求
输入任意关键字,比如 python 数据分析
,点击搜索,得到的有关岗位信息,爬取下来保存到Excel
可以看到,当前共有30页,每个页面有15条招聘信息。
Selenium爬取
首先导入需要用到的库
代码语言:javascript复制"""
@Author :叶庭云
@CSDN :https://yetingyun.blog.csdn.net/
"""
from selenium import webdriver
import time
import logging
import random
import openpyxl
接着进行一些初始配置
代码语言:javascript复制wb = openpyxl.Workbook() # 创建工作薄对象
sheet = wb.active # 获取活动的工作表
# 添加列名
sheet.append(['job_name', 'company_name', 'city','industry', 'salary', 'experience_edu','welfare','job_label'])
# 输出日志的基本配置
logging.basicConfig(level=logging.INFO, format='%(asctime)s - %(levelname)s: %(message)s')
现在写根据关键词搜索、翻页爬取的函数,主要就是实用Selenium模拟浏览器操作,实现并不困难,如果需要详细了解可以查看注释。
代码语言:javascript复制# 根据关键词搜索、翻页爬取函数
def search_product(key_word):
browser.find_element_by_id('cboxClose').click() # 关闭让你选城市的窗口
time.sleep(2)
browser.find_element_by_id('search_input').send_keys(key_word) # 定位搜索框 输入关键字
browser.find_element_by_class_name('search_button').click() # 点击搜索
browser.maximize_window() # 最大化窗口
time.sleep(2)
browser.find_element_by_class_name('body-btn').click() # 关闭弹窗 啥领取红包窗口
time.sleep(random.randint(1, 3))
browser.execute_script("scroll(0,3000)") # 下拉滚动条
get_data() # 调用抓取数据的函数
# 模拟点击下一页 翻页爬取数据 每爬取一页数据 休眠 控制抓取速度 防止被反爬 可能会让输验证码
for i in range(29):
browser.find_element_by_class_name('pager_next ').click()
time.sleep(1)
browser.execute_script("scroll(0,3000)") # 执行js代码下拉滚动条
get_data() # 调用抓取该页数据的函数
time.sleep(random.randint(3, 5)) # 休眠
下面就是遍历页面并使用.find_element_by_xpath
定位数据所在的位置,之后写入数据并输出日志。
# 抓取每页数据函数
def get_data():
# Xpath提取想要的数据
items = browser.find_elements_by_xpath('//*[@id="s_position_list"]/ul/li')
# 遍历 获取这一页的每条招聘信息
for item in items:
job_name = item.find_element_by_xpath('.//div[@class="p_top"]/a/h3').text
company_name = item.find_element_by_xpath('.//div[@class="company_name"]').text
city = item.find_element_by_xpath('.//div[@class="p_top"]/a/span[@class="add"]/em').text
industry = item.find_element_by_xpath('.//div[@class="industry"]').text
salary = item.find_element_by_xpath('.//span[@class="money"]').text
experience_edu = item.find_element_by_xpath('.//div[@class="p_bot"]/div[@class="li_b_l"]').text
welfare = item.find_element_by_xpath('.//div[@class="li_b_r"]').text
job_label = item.find_element_by_xpath('.//div[@class="list_item_bot"]/div[@class="li_b_l"]').text
data = f'{job_name},{company_name},{city},{industry},{salary},{experience_edu},{welfare},{job_label}'
# 爬取数据 输出日志信息
sheet.append([job_name, company_name, city,industry, salary, experience_edu, welfare, job_label])
logging.info(data)
搞定基本爬取逻辑与代码后,最后就是写爬取主函数,将目标URL和关键词传入即可!
代码语言:javascript复制def main():
# 访问目标url https://www.lagou.com/
browser.get('https://www.lagou.com/')
time.sleep(random.randint(1, 3))
search_product(keyword)
# 保存数据
wb.save('job_info.xlsx')
if __name__ == '__main__':
# 待关键词 比如Python 数据分析
keyword = 'Python 数据分析'
# 本地chromedriver.exe的路径
chrome_driver = r'D:pythonpycharm2020chromedriver.exe'
options = webdriver.ChromeOptions()
# 关闭左上方 Chrome 正受到自动测试软件的控制的提示
options.add_experimental_option('useAutomationExtension', False)
options.add_experimental_option("excludeSwitches", ['enable-automation'])
browser = webdriver.Chrome(options=options, executable_path=chrome_driver)
main()
browser.quit() # 关闭浏览器
让我们来试一下,从下图可以看到程序没有报错,成功爬取数据!
生成的Excel如下
最后将数据导入pandas
并查看,当然也可以利用数据做一些简单的数据分析,这些就交给感兴趣的读者!
本文就到这里,如果文章对你有所帮助的话,欢迎点赞收藏,你的支持是对作者最大的鼓励,不足之处可以多多指正,交流学习!
作者:叶庭云 CSDN:https://blog.csdn.net/fyfugoyfa 注意:本文仅用于交流学习,未经授权,禁止转载,更勿做其他用途,违者必究! 源码下载: https://pan.baidu.com/s/1y5WJWnmc3oo0evg3JzC1_g 密码: pp8h
-END-