拉勾网登陆后,选择某城市,搜索任意关键字,采集岗位信息数据

起始参考网址:全国数据分析岗位招聘

前一篇是搜索关键词网址发生变化的情况,接下来就处理搜索关键词不发生变化情况下的数据爬取,就以上一篇提及的‘数据分析’作为关键词,进行相同字段数据的爬取

爬虫逻辑:【登陆】-【访问页面 + 采集岗位信息 - 翻页】

1)函数式编程

函数1:login(u,username,password) → 【登陆】
         u:起始网址
         username:用户名
         password:密码

函数2:get_data(ui,table,page_n) → 【访问页面 + 采集岗位信息 - 翻页
         ui:数据页面网址
         table:mongo集合对象
         page_n:翻页次数

2)上一篇文章是以第一种方式获取字段的内容,那么这一篇就使用第二种方式

区别在于方法一是找到了字段内容所在的【li】标签,然后再【li】标签内部查找对应标签的信息,方法二是直接在全局的范围里面,直接通过xpath定位,然后进行遍历输出

前期准备和封装第一个函数都是和之前的一样

import re
import time
import random
import pymongo
from selenium import webdriverdef login(u,username,password):browser.get(u)browser.find_element_by_xpath('//*[@id="changeCityBox"]/p[1]/a').click()#选择全国站browser.find_element_by_xpath('//*[@id="lg_tbar"]/div/div[2]/ul/li[3]/a').click()#点击登录按钮user_name = browser.find_element_by_xpath('/html/body/div[2]/div[1]/div/div/div[2]/div[3]/div[1]/div/div[1]/form/div[1]/div/input')#用户名pass_word = browser.find_element_by_xpath('/html/body/div[2]/div[1]/div/div/div[2]/div[3]/div[1]/div/div[1]/form/div[2]/div/input')user_name.clear()pass_word.clear()#清空里面的内容user_name.send_keys(username)pass_word.send_keys(password)#输入个人信息browser.find_element_by_xpath('/html/body/div[2]/div[1]/div/div/div[2]/div[3]/div[2]/div[2]/div[2]').click()print(browser.current_url)#点击登录按钮并返回当前页面的网址if __name__ == '__main__':browser = webdriver.Chrome()login('https://www.lagou.com/', 'xxx','xxx')

这里完成拉勾网账号的登录,和封装第一个函数

相应字段内容的获取和时间问题

前一个函数的功能,只是会进入到登录之后的拉勾网界面,这时候,可以将页面跳转到“数据分析”为关键的页面上,可以执行如下代码,为了防止浏览器未反应过来,这一部分要给系统一个反应时间(包含了之前的手动输入验证码的时间,建议是15s)

time.sleep(15)
browser.get('https://www.lagou.com/jobs/list_%E6%95%B0%E6%8D%AE%E5%88%86%E6%9E%90/p-city_0?px=default#filterBox')
#跳转到‘数据分析’搜索的界面
browser.find_element_by_xpath('/html/body/div[6]/div/div[2]').click()
#这一步是因为会弹出来一个广告,因此需要过滤掉

然后就是进入了以"数据分析"为关键字的招聘信息的界面,这时候先选择第一页的内容进行爬虫试错,如下:

dic = {}
dic['岗位名称'] = browser.find_element_by_xpath(f'//*[@id="s_position_list"]/ul/li[1]/div[1]/div[1]/div[1]/a/h3').text
dic['发布时间'] = browser.find_element_by_xpath(f'//*[@id="s_position_list"]/ul/li[1]/div[1]/div[1]/div[1]/span').text
dic['公司名称'] = browser.find_element_by_xpath(f'//*[@id="s_position_list"]/ul/li[1]/div[1]/div[2]/div[1]/a').text
info1 = re.split(r'[ /]+', browser.find_element_by_xpath(f'//*[@id="s_position_list"]/ul/li[1]/div[1]/div[1]/div[2]/div').text)
dic['薪酬'] = info1[0]
dic['经验水平'] = info1[1]
dic['学历要求'] = info1[2]
info2 = browser.find_element_by_xpath(f'//*[@id="s_position_list"]/ul/li[1]/div[1]/div[2]/div[2]').text.split(' / ')
dic['企业类型'] = info2[0]
dic['融资情况'] = info2[1]
dic['公司规模'] = info2[2]
print(dic)

输出的结果是:

进行数据验证,可以确定是需要爬取的数据:

接下来就可以配置数据库和进行第二个函数的封装了,首先是进行数据库的设置(数据库的创建与命名以及保存数据的集合)

myclient = pymongo.MongoClient('https://localhost:27017/')
db = myclient['拉勾网数据(2)']
datatable = db['data']

三行代码配置好数据库的问题,接着就是封装第三个函数,就是遍历输出加上翻页的功能(模仿人的操作)

def get_data(page_num,table):count = 0for j in range(page_num):     for i in range(1,16):dic = {}dic['岗位名称'] = browser.find_element_by_xpath(f'//*[@id="s_position_list"]/ul/li[{i}]/div[1]/div[1]/div[1]/a/h3').textdic['发布时间'] = browser.find_element_by_xpath(f'//*[@id="s_position_list"]/ul/li[{i}]/div[1]/div[1]/div[1]/span').textdic['公司名称'] = browser.find_element_by_xpath(f'//*[@id="s_position_list"]/ul/li[{i}]/div[1]/div[2]/div[1]/a').textinfo1 = re.split(r'[ /]+', browser.find_element_by_xpath(f'//*[@id="s_position_list"]/ul/li[{i}]/div[1]/div[1]/div[2]/div').text)dic['薪酬'] = info1[0]dic['经验水平'] = info1[1]dic['学历要求'] = info1[2]info2 = browser.find_element_by_xpath(f'//*[@id="s_position_list"]/ul/li[{i}]/div[1]/div[2]/div[2]').text.split(' / ')dic['企业类型'] = info2[0]dic['融资情况'] = info2[1]dic['公司规模'] = info2[2]table.insert_one(dic)print(dic)count += 1browser.find_element_by_xpath('//*[@id="s_position_list"]/div[2]/div/span[6]'.click()print(n)get_data(3,datatable)

运行结果是,程序可以正常运行,也会把数据存放到数据库,经过检查核对发现,并不是我们所要爬取的前三页数据,只是爬取了第一页后,浏览器翻页翻到了最后一页(第30页),因此尝试着将3改成10 ,最后输出的数据全是第30页的招聘信息

究其原因,发现,原来“下一页”这个按钮的出现的位置有一定的差异,自然就导致其对应的标签位置有所改变,由上面直接输出30页,可以推测第一页的位置和最后一页的位置是相同的,下面就开始查找

//*[@id="s_position_list"]/div[2]/div/span[6] #第一页
//*[@id="s_position_list"]/div[2]/div/span[7] #第二页
//*[@id="s_position_list"]/div[2]/div/span[8] #第三页
//*[@id="s_position_list"]/div[2]/div/span[9] #第四页
//*[@id="s_position_list"]/div[2]/div/span[9] #第五页
//*[@id="s_position_list"]/div[2]/div/span[9] #第二十七页
//*[@id="s_position_list"]/div[2]/div/span[8] #第二十八页
//*[@id="s_position_list"]/div[2]/div/span[7] #第二十九页 这一页翻完就是最后一页了
//*[@id="s_position_list"]/div[2]/div/span[6] #第三十页

看一下,“下一页”按钮的布置情况:

1)第一页中,“下一页”按钮的位置

2)第三十页中,“下一页”按钮的位置(可以看出是与第一页相同的)

3)第二页中,“下一页”按钮的位置(多一个按钮)

4)第三页中,“下一页”按钮的位置(又多一个按钮)

5)第四页中,“下一页”按钮的位置(又多一个按钮)

6)第五页中,“下一页”按钮的位置(和第4块的一致了,之后的都是一致的)

7)第二十八页中,“下一页”按钮的位置(开始少了一块)

8)第二十九页中,“下一页”按钮的位置(又少一个按钮)

9)就是第三十页,和第一页的位置一样,因此就可以看出规律,从第一页至第四页逐渐加一,最后四页逐渐减一

最终的修改代码为:

if j < 3:browser.find_element_by_xpath('//*[@id="s_position_list"]/div[2]/div/span[{}]'.format(6+j)).click()sleeptime = 5print('程序正在休息......',sleeptime)time.sleep(sleeptime)
else:browser.find_element_by_xpath(f'//*[@id="s_position_list"]/div[2]/div/span[{9}]').click()sleeptime = 5print('程序正在休息......',sleeptime)time.sleep(sleeptime)

这里的停止时间一定需要给够,不然页面没有及时刷新成功,就会导致系统报错,因为每一页的“下一页”翻页按钮都和程序的下一步执行有关系,注意爬取的页数这里设置,如果要设置爬取的页数多少的话不可以超过27,这也是“下一页”按钮设置的规律决定的

最终的输出结果

进行登录界面和跳转到以“数据分析”为关键字的招聘页面

最后的数据爬取过程如下:(这里选取前十页进行数据爬取)

【python爬虫专项(27)】拉勾网数据采集(关键词网址不发生变化)相关推荐

  1. 【python爬虫专项(31)】链家二手房源数据采集4(噪声数据处理)

    清洗数据来源 数据是来自于python爬虫专项(28)和(29)里面采集的分页信息和深度信息,如下 1) data_1表格下面获取的分页信息 2) data_2表格下面获取的深度信息 清洗逻辑:[函数 ...

  2. 我妈给我介绍对象了,我大学还没毕业呢,先在婚介市场也这么卷了的吗?【Python爬虫实战:甜蜜蜜婚介数据采集】

    大家好,我是辣条. 说出来你们可能不信,我一个在校还没毕业的学生家里竟然给我介绍对象了-这么着急的吗?现在结婚市场都这么卷了吗?男孩们女孩们不努力的话是会被家里捉回去结婚的哦. 这是和我妈的聊天对话, ...

  3. 小白学 Python 爬虫(27):自动化测试框架 Selenium 从入门到放弃(上)

    人生苦短,我用 Python 前文传送门: 小白学 Python 爬虫(1):开篇 小白学 Python 爬虫(2):前置准备(一)基本类库的安装 小白学 Python 爬虫(3):前置准备(二)Li ...

  4. 【python爬虫专项(19)】blibli弹幕数据爬取(以全站搜索蔡徐坤的视频为例)

    blibli任意搜索关键字,相关视频的弹幕数据采集 参考网址:B站蔡徐坤 爬虫逻辑:[分页url采集]-[视频页面url采集]-[视频页面数据采集 / cid信息 / 弹幕xml数据采集] 弹幕xml ...

  5. python爬虫微博关键字_微博关键词爬虫——基于requests和aiohttp

    requests库是python爬虫中最常见的库,与内置的urllib库相比,它更加简洁高效,是每一个接触爬虫者都务必要掌握的基础:但它也是有缺点的,就是不支持异步操作,虽然可以通过多线程来解决,但当 ...

  6. 【python爬虫专项(28)】链家二手房源数据采集1(分页信息采集)

    链家二手房源信息采集 这里以采集 北京二手房源 为例,要进行获取的字段如下 爬虫逻辑:[分页url获取]–> [页面列表数据的获取] 函数式编程: 函数1:get_urls(city_url,n ...

  7. 【python爬虫专项(29)】链家二手房源数据采集2(深度信息采集)

    链家二手房源数据深度采集 这部分的实践是基于上一个博客获得的数据,具体的参考网址如下: 爬虫逻辑 :[提取mongo里面的具体网页的链接]–> [设置动态ip]–> [获取详细信息] 函数 ...

  8. 【python爬虫专项(10)】去哪儿网景点数据采集

    以上海旅游景点数据为例 参考网址:上海旅游景点 爬虫逻辑:[分页网页url采集]-[数据采集] 还是按照爬虫逻辑二进行获取数据 函数1:get_urls(city,n) → [分页网页url采集]   ...

  9. 【python爬虫专项(7)】爬虫实战项目一( 豆瓣图书类别的书籍信息数据获取——爬虫逻辑1)

    任意一图书类别的书籍信息数据 参考网址:豆瓣读书网 爬虫逻辑:[分页网页url采集]-[数据信息网页url采集]-[数据采集] 针对爬虫逻辑的三步走,采用函数式编程的方式进行数据爬取 函数1: get ...

  10. python爬虫,从hao123爬取网址信息

    最近研究python的爬虫,小小程序,拿下来分享,本人使用python3.7,纯粹兴趣爱好,希望能帮助大家激发兴趣.从hao123,爬取各种网址信息,代码如下. import urllib.reque ...

最新文章

  1. python图表交互控件_用djang中的交互式控件制作bokeh图表
  2. 美团架构师开源5万字的《面试手册》PDF免费下载!
  3. prefetch下载SRA 数据
  4. 获取指定目录下的所有文件名
  5. javap(反汇编命令)详解
  6. 转:RabbitMQ 消息队列特性知多少
  7. 你家的饮水机,到底可以有多脏?
  8. 老毛桃U盘快速装系统
  9. 大数据上的“大产品”
  10. python爬虫爬取多个页面_Python爬虫笔记:爬取单个页面
  11. 求一篇计算机word文档作业,计算机应用基础作业3:Word2003
  12. 【新冠肺炎】SIR模型预测与数据分析之代码篇
  13. 固态硬盘分为哪几种_通俗易懂 SSD固态硬盘接口有哪几种类型的图解
  14. Http 请求头中 X-Requested-With 的含义
  15. Flask实现简单搜索功能
  16. 快速将多个Excel表格合并为1个,你会吗?
  17. 文本摘要生成评价指标——rouge
  18. describe函数描述性统计
  19. 第12周项目4—点、圆的关系
  20. Learning to See in the Dark阅读札记

热门文章

  1. discuz模板制作中关于css使用的一些指导说明
  2. 绅士游戏 android绅士在线阅读,一骑当千游戏,绅士游戏 android绅士
  3. 考研数学笔记(更新中)
  4. 团队管理19--团队分工
  5. 江苏小高考计算机什么时候考,2021江苏小高考时间 什么时候考试
  6. 自定义结构体及初始化
  7. 2019世界互联网大会 聚焦网络安全发展新动能新要求 最新等保测评机构名录发布10月版
  8. Linux下查看电脑配置信息
  9. Ubuntu系统安装及su安装
  10. 【100+ python基础入门-26】python修改列表元素方法