python爬虫 senlenium爬取拉勾网招聘数据
时间:2022-07-25
本文章向大家介绍python爬虫 senlenium爬取拉勾网招聘数据,主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
文章目录
一、基本思路
目标url:https://www.lagou.com/
用selenium爬虫实现,输入任意关键字,比如 python 数据分析,点击搜索,得到的有关岗位信息,爬取下来保存到Excel。
有30页,每个页面有15条招聘信息。
二、selenium爬虫
from selenium import webdriver
import time
import logging
import random
import openpyxl
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')
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)")
get_data()
time.sleep(random.randint(3, 5))
def get_data():
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}'
logging.info(data)
sheet.append([job_name, company_name, city,industry, salary, experience_edu, welfare, job_label])
def main():
browser.get('https://www.lagou.com/')
time.sleep(random.randint(1, 3))
search_product(keyword)
wb.save('job_info.xlsx')
if __name__ == '__main__':
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,运行结果如下:
三、查看数据
作者:叶庭云 微信公众号:修炼Python CSDN:https://yetingyun.blog.csdn.net/ 本文仅用于交流学习,未经作者允许,禁止转载,更勿做其他用途,违者必究。 觉得文章对你有帮助、让你有所收获的话,期待你的点赞呀,不足之处,也可以在评论区多多指正。
- 腾讯云Fintech云端系列论坛首站北京,揭秘如何全链路赋能互联网金融
- Flask入门笔记(一)
- 刷脸还是指纹识别,that's a question
- c#:使用using关键字自动释放资源未必一定就会有明显好处
- MongoDB 学习笔记(原创)
- Silverlight:ScorllViewer随Tab键自动跟随子控件的Focus滚动
- 老域名做新站如何能快速得上首页?
- Silverlight:分包下载及SEO优化方案
- jQuery调用RESTful WCF示例(GET方法/POST方法)
- "RDLC"报表-参数传递及主从报表
- 初探小程序之运营及未来方向
- 微信小程序深夜开放NFC等连接能力,未来可直接刷公交?
- Silverlight:获取ContentTemplate中的命名控件
- silverlight向wcf传递大于8192字节(8k)的字符串
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- Android ProgressDialog用法之实现app上传文件进度条转圈效果
- Android实现获取meta-data和build.gradle的值
- 浅谈Android Studio导出javadoc文档操作及问题的解决
- Android获取清单文件中的meta-data,解决碰到数值为null的问题
- android studio 打包自动生成版本号与日期,apk输入路径详解
- 详解关于AndroidQ获取不到imsi解决方案
- 解决webview 第二次调用loadUrl页面不刷新的问题
- 浅谈 Android 7.0 多窗口分屏模式的实现
- Kotlin中的对象表达式和对象声明的具体使用
- Android 实现为点击事件添加震动效果
- 解决Android studio Error:(30, 31) 错误: 程序包 不存在的问题
- AndroidQ 沙箱适配多媒体文件(小结)
- Bitcron 主题 Berry(简约wordpress主题)
- Android 实现图片转二进制流及二进制转字符串
- Android 如何实现exclude aar包中的某个jar包