爬取内容

用交互式的方式输入想查询的职位并循环输出职位简要信息,为了方便阅读,本文使用到的变量并不是以目标变量的英文来命名,而是为了方便而取的变量名,各位大牛请谅解。(因贵网站爬取一定量数据后需要登陆,所以只能爬取前几页内容,本文仅供新手参考)

需要用到的第三方库

from selenium import webdriver
import time

设置Google驱动的路径

selenium需要用到的谷歌浏览器驱动driver可在官方自行下载官方驱动下载网址,找到与自己谷歌浏览器对应的前两位数字版本后,下载好后解压,复制于当前使用的编辑器python的目录下的Scripts文件夹中,并在环境变量的系统变量中添加设置此路径即可。
例如:

lj = r'C:\Users\1111\AppData\Local\Programs\Python\Python36\Scripts'

为了方便理解,如上的命名不规范,请读者谅解。

用selenium打开浏览器驱动

def turnChrome():
print('正在打开浏览器')
lj = r'C:\Users\1111\AppData\Local\Programs\Python\Python36\Scripts'#路径变量lj
driver = webdriver.Chrome(executable_path=(lj+"\chromedriver")) #启动浏览器
time.sleep(1)
return driver

目标爬取网站

def driverturn(driver):
driver.get('https://www.lagou.com')

排除干扰项(*)

(1)读者可先打开目标爬取网站,使用右键检查的copy中的Xpath路径截取下目标量,如打开网页后一步一步点击输入框并查询,而后点击确定等,详情可理解如下:

driver.find_element_by_xpath('//*[@id="changeCityBox"]/p[1]/a').click()       #点击'全国'按钮
driver.find_element_by_xpath('//*[@id="search_input"]').send_keys(jobname) #输入内容
time.sleep(1)
driver.find_element_by_xpath('//*[@id="search_button"]').click() #查询

(2)而后是干扰项:
例如网站有广告红包需要点击等,对你进行了阻碍无法让爬虫运行,那么可以如下解决:

    try:
driver.find_element_by_xpath("/html/body/div[9]/div/div[2]").click() #点掉红包
except:
pass

因为爬取时查询的数据不同,有些时候会出现干扰项而有些时候并不会,所以当你加入了干扰项排除后如不加入try except模块则会报错,如加入后逻辑就是干扰项出现时就自动进行取消,如没有干扰项则跳过,此外,贵网站的广告红包xpath经常会变化,例如:
一周前是:

driver.find_element_by_xpath("/html/body/div[8]/div/div[2]").click()

一周后则是:

driver.find_element_by_xpath("/html/body/div[9]/div/div[2]").click()

body中的div标签不同导致爬虫无法进行,读者第一次如遇到无法进行爬虫可先将红包的xpath重新进行爬取,再继续尝试。
还有一个是弹框询问你是否感兴趣的干扰项也可如上进行排除,例如:

    try:
driver.find_element_by_xpath('//*[@id="main_container"]/div[1]/div[4]/div/div/div[2]/button').click()
except:
pass

整理后进行放入方法

def ganrao(driver,jobname):     #进行干扰项排除
driver.find_element_by_xpath('//*[@id="changeCityBox"]/p[1]/a').click() #点击全国
driver.find_element_by_xpath('//*[@id="search_input"]').send_keys(jobname) #输入
time.sleep(1)
driver.find_element_by_xpath('//*[@id="search_button"]').click() #查询
try:
driver.find_element_by_xpath("/html/body/div[9]/div/div[2]").click() #点掉红包
except:
pass
try:
driver.find_element_by_xpath('//*[@id="main_container"]/div[1]/div[4]/div/div/div[2]/button').click()
except:
pass

进行爬取

自行打开查询后,可看到一整页的职位信息,然后选其中一个进行右键xpath索取,然后小编发现一页有16个数据,可用for循环进行逐个爬取,如下:

def Paqu(driver,yeshu):
CPname = [] #公司名
Jobname = [] #职位名
XZJY = [] #薪资经验
Address = [] #地址
for num in range(yeshu):
time.sleep(1)
for i in range(1, 16): # //*[@id="s_position_list"]/ul/li[1]/div[1]/div[2]/div[1]/a
a = driver.find_element_by_xpath('//*[@id="s_position_list"]/ul/li[{}]/div[1]/div[2]/div[1]/a'.format(i))
b = driver.find_element_by_xpath('//*[@id="s_position_list"]/ul/li[{}]/div[1]/div[1]/div[1]/a/h3'.format(i))
c = driver.find_element_by_xpath('//*[@id="s_position_list"]/ul/li[{}]/div[1]/div[1]/div[2]/div'.format(i))
d = driver.find_element_by_xpath('//*[@id="s_position_list"]/ul/li[{}]/div[1]/div[1]/div[1]/a/span/em'.format(i))
CPname.append(a.text)
Jobname.append(b.text)
XZJY.append(c.text)
Address.append(d.text)
if yeshu-num == 1:
print('爬取结束')
else:
driver.find_element_by_class_name("pager_next").click() driver.quit()
return CPname,Jobname,XZJY,Address

如上中式英语的变量方便理解,如有不适请见谅。

存入文本

拿到四个数据的列表后,可进行数据清洗的存储工作了:

def Save(CPname,Jobname,XZJY,Address):
with open('职位原始记录.txt','w+',encoding='utf-8') as f:
#l1 = ['ID','公司名','职位名','薪资','经验','学历','地址']
for i in range(len(CPname)):
k = str(XZJY[i]).replace(" / "," ").split(' ')
l2 = [str(i+1),CPname[i],Jobname[i],k[0],k[1],k[2],Address[i]]
#dabao = str(dict(zip(l1,l2))).replace("'",'"')
f.write(str(l2).replace('[','').replace(']','')+'\n')
print(l2)

可以清洗成自己想要的样子,这个读者自行编写。

全部源码

#coding=utf-8
from selenium import webdriver
import time
import sqlite3 def turnChrome():
print('正在打开浏览器')
lj = r'C:\Users\38376\AppData\Local\Programs\Python\Python36\Scripts'
driver = webdriver.Chrome(executable_path=(lj+"\chromedriver")) #启动浏览器
time.sleep(1)
return driver def driverturn(driver):
driver.get('https://www.lagou.com') def ganrao(driver,jobname): #进行干扰项排除
driver.find_element_by_xpath('//*[@id="changeCityBox"]/p[1]/a').click() #点击全国
driver.find_element_by_xpath('//*[@id="search_input"]').send_keys(jobname) #输入
time.sleep(1)
driver.find_element_by_xpath('//*[@id="search_button"]').click() #查询
try:
driver.find_element_by_xpath("/html/body/div[9]/div/div[2]").click() #点掉红包
except:
pass
try:
driver.find_element_by_xpath('//*[@id="main_container"]/div[1]/div[4]/div/div/div[2]/button').click()
except:
pass def Paqu(driver,yeshu):
CPname = []
Jobname = []
XZJY = []
Address = []
for num in range(yeshu):
time.sleep(1)
for i in range(1, 16): # //*[@id="s_position_list"]/ul/li[1]/div[1]/div[2]/div[1]/a
a = driver.find_element_by_xpath('//*[@id="s_position_list"]/ul/li[{}]/div[1]/div[2]/div[1]/a'.format(i))
b = driver.find_element_by_xpath('//*[@id="s_position_list"]/ul/li[{}]/div[1]/div[1]/div[1]/a/h3'.format(i))
c = driver.find_element_by_xpath('//*[@id="s_position_list"]/ul/li[{}]/div[1]/div[1]/div[2]/div'.format(i))
d = driver.find_element_by_xpath('//*[@id="s_position_list"]/ul/li[{}]/div[1]/div[1]/div[1]/a/span/em'.format(i))
CPname.append(a.text)
Jobname.append(b.text)
XZJY.append(c.text)
Address.append(d.text)
if yeshu-num == 1:
print('爬取结束')
else:
driver.find_element_by_class_name("pager_next").click() driver.quit()
return CPname,Jobname,XZJY,Address def Save(CPname,Jobname,XZJY,Address):
with open('职位原始记录.txt','w+',encoding='utf-8') as f:
#l1 = ['ID','公司名','职位名','薪资','经验','学历','地址']
for i in range(len(CPname)):
k = str(XZJY[i]).replace(" / "," ").split(' ')
l2 = [str(i+1),CPname[i],Jobname[i],k[0],k[1],k[2],Address[i]]
#dabao = str(dict(zip(l1,l2))).replace("'",'"')
f.write(str(l2).replace('[','').replace(']','')+'\n')
print(l2) if __name__=='__main__':
jobname = input('请输入你想查询的职位名:')
yeshu = int(input('你想查询多少页,最高30页:'))
driver = turnChrome()
driverturn(driver)
ganrao(driver,jobname)
CPname,Jobname,XZJY,Address = Paqu(driver,yeshu)
Save(CPname,Jobname,XZJY,Address)

本文的文字及图片来源于网络,仅供学习、交流使用,不具有任何商业用途,如有问题请及时联系我们以作处理

想要获取更多Python学习资料可以加QQ:2955637827私聊或加Q群630390733大家一起来学习讨论吧!

Python进行拉勾网数据爬取框架与思路的更多相关文章

  1. Python爬虫 股票数据爬取

    前一篇提到了与股票数据相关的可能几种数据情况,本篇接着上篇,介绍一下多个网页的数据爬取.目标抓取平安银行(000001)从1989年~2017年的全部财务数据. 数据源分析 地址分析 http://m ...

  2. python 手机app数据爬取

    目录 一:爬取主要流程简述 二:抓包工具Charles 1.Charles的使用 2.安装 (1)安装链接 (2)须知 (3)安装后 3.证书配置 (1)证书配置说明 (2)windows系统安装证书 ...

  3. 爬虫系列---scrapy全栈数据爬取框架(Crawlspider)

    一 简介 crawlspider 是Spider的一个子类,除了继承spider的功能特性外,还派生了自己更加强大的功能. LinkExtractors链接提取器,Rule规则解析器. 二 强大的链接 ...

  4. Scrapy框架爬虫初探——中关村在线手机参数数据爬取

    关于Scrapy如何安装部署的文章已经相当多了,但是网上实战的例子还不是很多,近来正好在学习该爬虫框架,就简单写了个Spider Demo来实践.作为硬件数码控,我选择了经常光顾的中关村在线的手机页面 ...

  5. 移动端数据爬取和Scrapy框架

    移动端数据爬取 注:抓包工具:青花瓷 1.配置fiddler 2.移动端安装fiddler证书 3.配置手机的网络 - 给手机设置一个代理IP:port a. Fiddler设置 打开Fiddler软 ...

  6. python实现人人网用户数据爬取及简单分析

    这是之前做的一个小项目.这几天刚好整理了一些相关资料,顺便就在这里做一个梳理啦~ 简单来说这个项目实现了,登录人人网并爬取用户数据.并对用户数据进行分析挖掘,终于效果例如以下:1.存储人人网用户数据( ...

  7. 芝麻HTTP:JavaScript加密逻辑分析与Python模拟执行实现数据爬取

    本节来说明一下 JavaScript 加密逻辑分析并利用 Python 模拟执行 JavaScript 实现数据爬取的过程.在这里以中国空气质量在线监测分析平台为例来进行分析,主要分析其加密逻辑及破解 ...

  8. 人人贷网的数据爬取(利用python包selenium)

    记得之前应同学之情,帮忙爬取人人贷网的借贷人信息,综合网上各种相关资料,改善一下别人代码,并能实现数据代码爬取,具体请看我之前的博客:http://www.cnblogs.com/Yiutto/p/5 ...

  9. 用Python介绍了企业资产情况的数据爬取、分析与展示。

    前言 文的文字及图片来源于网络,仅供学习.交流使用,不具有任何商业用途,版权归原作者所有,如有问题请及时联系我们以作处理. 作者:张耀杰 PS:如有需要Python学习资料的小伙伴可以加点击下方链接自 ...

随机推荐

  1. python菜鸟教程学习9:函数

    函数的定义 函数是组织好的,可重复使用的,用来实现单一,或相关联功能的代码段.python提供了很多内建函数,但我们依然可以自己创建函数,叫做用户自定义函数. 自定义函数 你可以定义一个由自己想要功能 ...

  2. 好端端的数据结构,为什么叫它SB树呢?

    大家好,今天给大家介绍一个很厉害的数据结构,它的名字就很厉害,叫SB树,业内大佬往往叫做傻叉树.这个真不是我框你们,而是它的英文缩写就叫SBT. SBT其实是英文Size balanced tree的 ...

  3. OpenCV计算机视觉学习(12)——图像量化处理&图像采样处理(K-Means聚类量化,局部马赛克处理)

    如果需要处理的原图及代码,请移步小编的GitHub地址 传送门:请点击我 如果点击有误:https://github.com/LeBron-Jian/ComputerVisionPractice 准备 ...

  4. sentinel配置

    登陆接口 QPS5,异常0.8,熔断10s 1.异地登陆同省逻辑降级security 2.可疑用户判断certification 3.是否是危险设备判断account 4.是否是自动化imei,ime ...

  5. 万字长文深度剖析面向对象的javascript

    目录 简介 什么是对象 构造函数 构造函数的特点 new命令的原理 prototype对象 Object的prototype操作 Object.getPrototypeOf Object.setPro ...

  6. node-sass版本问题

    node-sass sass-loader的问题 出现了版本的问题 版本太高 版本不兼容解决方法: cnpm i node-sass@4.14.1 cnpm i sass-loader@7.3.1 - ...

  7. 第八章、Designer组件属性编辑界面中QWidget类相关属性详解

    老猿Python博文目录 专栏:使用PyQt开发图形界面Python应用 老猿Python博客地址 声明:本文为老猿Python学习研究精心整理而成,禁止转载. 内容提纲 引言概述QWidget属性列 ...

  8. python安装Scrapy框架

    看到自己写的惨不忍睹的爬虫,觉得还是学一下Scrapy框架,停止一直造轮子的行为 我这里是windows10平台,python2和python3共存,这里就写python2.7安装配置Scrapy框架 ...

  9. 从零开始的sql注入学习(挖坑不填)

    首先,本人是小白,这篇文章也只是总结了一下大佬们的sql注入方法,要是有错,请各位大佬指出,以便学习. 虽然我是菜鸡,但是太过基础的sql注入问题也就不再重复的解释了.直接从常用的说起. 实战中常用的 ...

  10. 推荐系统(CTR领域)实战入门指南

    CTR经典模型如:FM,FFM,Wide&Deep,建议自己去复现一个完整的通用模型 先从pytorch版本入手(后期考虑tensorflow),从kaggle上找实际的比赛 github 相 ...