selenium 爬虫流程如下:
  1、对某职位进行爬虫 ---如:自动化测试
  2、用到IDE为 pycharm
  3、爬虫职位导入到MongoDB数据库中
  4、在线安装 pip install pymongo
  5、本次使用到脚本化无头浏览器 --- PhantomJS MongoDB安装说明连接:https://www.twblogs.net/a/5c27009bbd9eee16b3dba7bc/zh-cn
PhantomJS 下载地址和API连接:http://phantomjs.org/download.htmlhttp://phantomjs.org/api/下载后添加path中 --- CMD窗口输入 PhantomJS 按回车 --- 出现 phantomjs> 说明配置成功 如下为 51job.py 截图:

config配置文件如下:

pycharm 运行结果:

MongoDB 数据库截图:

如下为config 配置文件:


MONGO_URL = "mongodb://127.0.0.1:27017/" MONGO_DB = "自动化测试"
MONGO_TABLE = "自动化测试工程师"

KEYWORD = "自动化测试工程师"

SERVICE_ARGS = ["--load-images=false","--disk-cache=true"] #忽略缓存和图片加载

爬虫源码如下:
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support.wait import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
import time as t
from pyquery import PyQuery as pq
import re
#config -- 上面已展示
from Selenium_test.config import *
import pymongo #对MonGoDB进行实例化操作
client = pymongo.MongoClient(MONGO_URL)
#连接MongoDB数据库
db = client[MONGO_DB] #浏览器实例化
driver = webdriver.PhantomJS(service_args=SERVICE_ARGS)
# driver = webdriver.Chrome()
driver.set_window_size(1400,900)
driver.maximize_window()
driver.implicitly_wait(10)
#显示等待
wait = WebDriverWait(driver,10) def search():
print("正在搜索")
try:
driver.get("https://www.51job.com/")
element = wait.until(
EC.presence_of_element_located((By.ID,"kwdselectid"))
)
element.send_keys(KEYWORD)
# 取消选中城市
driver.find_element_by_id("work_position_input").click()
t.sleep(2)
selectedCityEles = driver.find_elements_by_css_selector(
"#work_position_click_center_right_list_000000 em[class=on]"
)
for one in selectedCityEles:
# print(one.text)
one.click()
# 选中城市
t.sleep(2)
driver.find_element_by_id("work_position_click_center_right_list_category_000000_040000").click()
t.sleep(2)
driver.find_element_by_id("work_position_click_bottom_save").click()
#点击搜索
t.sleep(2)
driver.find_element_by_css_selector("body > div.content > div > div.fltr.radius_5 > div > button").click()
# submit = wait.until(EC.element_to_be_clickable((By.CSS_SELECTOR,"body > div.dw_wp > form > div > div.dw_search_in > button")))
# submit.click()
#总计页数
total = wait.until(EC.presence_of_element_located((By.CSS_SELECTOR,"#resultList > div.dw_page > div > div > div > span:nth-child(2)")))
# get_products()
return total.text
except Exception:
return search() def next_page(page_number):
print("正在翻页",page_number)
try:
element = wait.until(
EC.presence_of_element_located((By.CSS_SELECTOR, "#jump_page"))
)
element.clear()
element.send_keys(page_number)
submit = wait.until(
EC.element_to_be_clickable((By.CSS_SELECTOR, "#resultList > div.dw_page > div > div > div > span.og_but")))
submit.click()
wait.until(EC.text_to_be_present_in_element((By.CSS_SELECTOR,"#resultList > div.dw_page > div > div > div > ul > li.on"),str(page_number)))
get_products()
except Exception:
next_page(page_number) def get_products():
# jobs = driver.find_elements_by_css_selector("#resultList div[class=el]")
wait.until(EC.presence_of_element_located((By.CSS_SELECTOR,"#resultList div[class=el]")))
html = driver.page_source
doc = pq(html)
items = doc("#resultList div[class=el]").items()
for item in items:
product = {
"职位":item.find(".t1").text(),
"公司":item.find(".t2").text(),
"工作点":item.find(".t3").text(),
"薪资":item.find(".t4").text(),
"发布时间":item.find(".t5").text()
}
print(product)
save_to_mongo(product) def save_to_mongo(result):
try:
if db[MONGO_TABLE].insert(result):
print("存储到MONGODB成功",result)
except Exception:
print("存储到MONGODB失败",result) def main():
try:
total = search()
total = int(re.compile("(\d+)").search(total).group(1))
for i in range(2,total + 1):
next_page(i)
except Exception:
print("出错")
finally:
driver.quit() if __name__ == '__main__':
main()

selenium对51job进行职位爬虫的更多相关文章

  1. Selenium + PhantomJS + python 简单实现爬虫的功能

    Selenium 一.简介 selenium是一个用于Web应用自动化程序测试的工具,测试直接运行在浏览器中,就像真正的用户在操作一样 selenium2支持通过驱动真实浏览器(FirfoxDrive ...

  2. 基于selenium爬取拉勾网职位信息

    1.selenium Selenium 本是一个用于Web应用程序测试的工具.Selenium测试直接运行在浏览器中,就像真正的用户在操作一样.而这一特性为爬虫开发提供了一个选择及方向,由于其本身依赖 ...

  3. Selenium结合BeautifulSoup4编写简单爬虫

    在学会了抓包,接口请求(如requests库)和Selenium的一些操作方法后,基本上就可以编写爬虫,爬取绝大多数网站的内容. 在爬虫领域,Selenium永远是最后一道防线.从本质上来说,访问网页 ...

  4. selenium+chromdriver 动态网页的爬虫

    # 获取加载更多的数据有 2 种方法# 第一种就是直接找数据接口, 点击'加载更多' 在Network看下, 直接找到数据接口 # 第二种方法就是使用selenium+chromdriver # se ...

  5. python+selenium实现网页自动化与爬虫技术

    举例某购物网站,通过selenium与python,实现主页上商品的搜索,并将信息爬虫保存至本地excel表内. 一.python环境与selenium环境安装 python在官网下载并安装并且设置环 ...

  6. selenium+BeautifulSoup实现强大的爬虫功能

    sublime下运行 1 下载并安装必要的插件 BeautifulSoup selenium phantomjs 采用方式可以下载后安装,本文采用pip pip install BeautifulSo ...

  7. [python爬虫] Selenium常见元素定位方法和操作的学习介绍

    这篇文章主要Selenium+Python自动测试或爬虫中的常见定位方法.鼠标操作.键盘操作介绍,希望该篇基础性文章对你有所帮助,如果有错误或不足之处,请海涵~同时CSDN总是屏蔽这篇文章,再加上最近 ...

  8. python爬虫积累(一)--------selenium+python+PhantomJS的使用

    最近按公司要求,爬取相关网站时,发现没有找到js包的地址,我就采用selenium来爬取信息,相关实战链接:python爬虫实战(一)--------中国作物种质信息网 一.Selenium介绍 Se ...

  9. 使用Python + Selenium打造浏览器爬虫

    Selenium 是一款强大的基于浏览器的开源自动化测试工具,最初由 Jason Huggins 于 2004 年在 ThoughtWorks 发起,它提供了一套简单易用的 API,模拟浏览器的各种操 ...

随机推荐

  1. HDU-1022Train Problem I,简单栈模拟;

    Train Problem I                                                                                     ...

  2. [luoguP1021] 邮票面值设计(DFS + dp)

    传送门 数据很小,可以DFS,判断的时候用背包DP 然而不知到枚举到哪里.... 首先枚举前可以求一遍题目中的MAX,下一层DFS的时候可以只枚举到MAX + 1,因为再往上就必定会出现断层 蒟蒻很菜 ...

  3. 选学霸(codevs 3372)

    题目描述 Description 老师想从N名学生中选M人当学霸,但有K对人实力相当,如果实力相当的人中,一部分被选上,另一部分没有,同学们就会抗议.所以老师想请你帮他求出他该选多少学霸,才能既不让同 ...

  4. 自己打断点走的struts流程&拦截器工作原理

    ①. 请求发送给 StrutsPrepareAndExecuteFilter ②. StrutsPrepareAndExecuteFilter 判定该请求是否是一个 Struts2 请 求(Actio ...

  5. Android定位(是否使用GPS进行定位)

    TencentLocationRequest request = TencentLocationRequest.create(); request.setRequestLevel(TencentLoc ...

  6. Redis集群方案收集

    说明: 如果不考虑客户端分片去实现集群,那么市面上基本可以说就三种方案最成熟,它们分别如下所示: 系统 贡献者 是否官方Redis实现 编程语言 Twemproxy Twitter 是 C Redis ...

  7. top命令查看线程信息和jstack使用介绍

    top -Hp pid可以查看某个进程的线程信息 -H 显示线程信息,-p指定pid jstack 线程ID 可以查看某个线程的堆栈情况,特别对于hung挂死的线程,可以使用选项-F强制打印dump信 ...

  8. POJ3977 Subset 折半枚举

    题目大意是给定N个数的集合,从这个集合中找到一个非空子集,使得该子集元素和的绝对值最小.假设有多个答案,输出元素个数最少的那个. N最多为35,假设直接枚举显然是不行的. 可是假设我们将这些数分成两半 ...

  9. 重置网络命令win7

    开始→运行→输入:CMD 点击确定(或按回车键),打开命令提示符窗口. 在命令提示符中输入:netsh winsock reset (按回车键执行命令) 稍后,会有成功的提示:成功地重置Winsock ...

  10. Unity3D 游戏引擎之C#使用Socket与HTTP连接server数据传输包

    近期比較忙.有段时间没写博客拉.近期项目中须要使用HTTP与Socket.雨松MOMO把自己这段时间学习的资料整理一下. 有关Socket与HTTP的基础知识MOMO就不赘述拉,不懂得朋友自己谷歌吧. ...