BOSS直聘招聘信息获取之使用webdriver进行爬取
时间:2022-07-22
本文章向大家介绍BOSS直聘招聘信息获取之使用webdriver进行爬取,主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
进行网页数据爬取的方式有很多,我前面使用了requests模块添加浏览器的cookies来对页面数据进行爬取的,那我们是不是可以直接使用浏览器来获取数据呢,当然是可以的。
虽然boss对这种自动化测试软件也是做了限制的,但是比上一版的爬虫程序来说还是可以爬到更多的数据,BOSS的反爬策略:
- 前几次使用自动化爬取时会提示进行活体验证
- 再继续爬的话就会被限制访问,当然不会影响你登录的用户
- 密码登录这个时候也会被策略限制,智能扫码登录了
可以操作浏览器的模块
WebDriver
导入浏览器驱动,用get方法打开浏览器,例如:
import time
from selenium import webdriver
def mac():
driver = webdriver.Chrome() //打开Chrome浏览器
# driver = webdriver.Firefox() //打开Firefox浏览器
# driver = webdriver.Ie() //打开IE浏览器
driver.implicitly_wait(5)
driver.get("http://www.baidu.com")
chromedriver.exe的下载地址为 http://chromedriver.storage.googleapis.com/index.html 选择版本是看下安装的浏览器版本,需要和它是一致的。
webbrowser
通过导入python的标准库webbrowser打开浏览器,例如:
import webbrowser
webbrowser.open("C:\Program Files\Internet Explorer\iexplore.exe")
webbrowser.open("C:\Program Files\Internet Explorer\iexplore.exe")
Splinter
Splinter的使用必修依靠Cython、lxml、selenium这三个软件。所以,安装前请提前安装 Cython、lxml、selenium。以下给出链接地址: 1)http://download.csdn.net/detail/feisan/4301293 2)http://code.google.com/p/pythonxy/wiki/AdditionalPlugins#Installation_no 3)http://pypi.python.org/pypi/selenium/2.25.0#downloads 4)http://splinter.cobrateam.info/
#coding=utf-8
import time
from splinter import Browser
def splinter(url):
browser = Browser()
#login 126 email websize
browser.visit(url)
#wait web element loading
time.sleep(5)
#fill in account and password
browser.find_by_id('idInput').fill('xxxxxx')
browser.find_by_id('pwdInput').fill('xxxxx')
#click the button of login
browser.find_by_id('loginBtn').click()
time.sleep(8)
#close the window of brower
browser.quit()
if __name__ == '__main__':
websize3 ='http://www.126.com'
splinter(websize3)
我们这次使用的是WebDriver
WebDriver常用方法
- 可以使用
get
方法请求网页 -
find_element
可以查找元素 -
find_element_by_xx
提供对 id、name、class_name等的查询 -
send_keys
输入 -
click
点击按钮、连接等 -
text
获取元素的文本
爬虫程序
# -*- coding: utf-8 -*-
from bs4 import BeautifulSoup as bs
from selenium import webdriver
import time
HOST = "https://www.zhipin.com"
def extract_data(content):
# 处理职位列表
job_list = []
for item in content.find_all(class_="job-primary"):
job_title = item.find("div", attrs={"class": "job-title"})
job_name = job_title.a.attrs["title"]
job_href = job_title.a.attrs["href"]
data_jid = job_title.a['data-jid']
data_lid = job_title.a["data-lid"]
job_area = job_title.find(class_="job-area").text
job_limit = item.find(class_="job-limit")
salary = job_limit.span.text
exp = job_limit.p.contents[0]
degree = job_limit.p.contents[2]
company = item.find(class_="info-company")
company_name = company.h3.a.text
company_type = company.p.a.text
stage = company.p.contents[2]
scale = company.p.contents[4]
info_desc = item.find(class_="info-desc").text
tags = [t.text for t in item.find_all(class_="tag-item")]
job_list.append([job_area, company_type, company_name, data_jid, data_lid, job_name, stage, scale, job_href,
salary, exp, degree, info_desc, "、".join(tags)])
return job_list
def get_job_text(driver):
"""
通过driver.text 也可以获取到页面数据 但是解析不太方便
"""
time.sleep(5)
job_list = driver.find_elements_by_class_name("job-primary")
for job in job_list:
print job.text
def main(host):
chrome_driver = "chromedriver.exe"
driver = webdriver.Chrome(executable_path=chrome_driver)
driver.get(host)
# 获取到查询框 输入查询条件
driver.find_element_by_name("query").send_keys("python")
# 点击查询按钮
driver.find_element_by_class_name("btn-search").click()
job_list = []
while 1:
time.sleep(5)
content = driver.execute_script("return document.documentElement.outerHTML")
content = bs(content, "html.parser")
job_list += extract_data(content)
next_page = content.find(class_="next")
if next_page:
driver.find_element_by_class_name("next").click()
else:
break
driver.close()
if __name__ == "__main__":
main(HOST)
end
- 使用无觅相关文章插件一定要删除的代码
- 管理混合云环境的5个要点
- Team Foundation Server 2010 – Basic Installation
- 富文本编辑器的一键排版功能
- 通过ProGet搭建一个内部的Nuget服务器
- Mercury Editor学习心得
- 无意禁止使用:英伟达官方回应GeForce软件条款更改
- Ext JS 6 新特性和工具
- 为你的WordPress 博客文章页面增加多彩排版条
- java: web应用中不经意的内存泄露
- java: web应用中不经意的内存泄露
- velocity模板引擎学习(4)-在standalone的java application中使用velocity及velocity-tools
- mac上开启ftp
- Web前端开发的四个阶段
- 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 数组属性和方法
- Http Post 快速使用
- 有赞Flutter插件开发与发布
- 国标GB28181协议客户端EasyGBS国标视频平台级联EasyNVR:EasyGBS如何实现调阅EasyNVR的视频通道?
- gitlab CI/CD 相关问题
- 微信jssdk分享接口
- 有赞 Flutter 混编方案
- 最近开发问题
- echarts相关问题总结
- 视频上云EasyNTS组网硬件设备登录后自动下线并清除设备信息是什么原因?
- 震惊! 再也不怕蹭网被发现了!
- 国标GB28181协议客户端EasyGBS国标视频平台级联EasyNVR:EasyNVR到EasyGBS上是如何注册及注销的?
- git全局忽略文件配置
- 2018-10-16近期vue开发总结
- 有赞埋点实践
- 树莓派配置LEDE(openwrt衍生版)拨号