selenium实例登陆拉勾网 外加手动验证验证码

article/2025/7/11 9:28:33

selenium模拟登陆拉钩网

from selenium import webdriver
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
import os, json, time
from urllib import parse
from lxml import etree
from fake_useragent import UserAgent
from pwd import username,password
from pymongo import MongoClientua = UserAgent()
#搜索的关键字
keywords_ls = ['python','java','web','c']
#搜索的热门城市
citys_ls = ['北京','上海','深圳','广州','杭州','成都','南京','武汉','西安','厦门','长沙','苏州','天津']class LaGouselenium():def __init__(self,keywords_ls=keywords_ls,citys_ls=citys_ls):self.keywords_ls=keywords_lsself.citys_ls=citys_lsself.crawl_city=[] #已经爬取的城市#断点续传crawledCityPath='./lagou_crawled_city.json'if os.path.exists(crawledCityPath):with open(crawledCityPath,'r',encoding='utf8') as f:ls = json.load(f)self.crawled_city=lsself.col = MongoClient()['selenium']['LGW']#抓取条数print('已抓取',self.col.count_documents({}))#生成游览对象self.chrome = webdriver.Chrome('D:\data\chromedriver\chromedriver.exe')#隐式等待三秒self.chrome.implicitly_wait(3)def login(self):loginUrl='https://passport.lagou.com/login/login.html'self.chrome.get(loginUrl)#账号 密码 登录self.chrome.find_element_by_xpath('//form[@class="active"]/div[@data-propertyname="username"]/input').send_keys(username)self.chrome.find_element_by_xpath('//form[@class="active"]/div[@data-propertyname="password"]/input').send_keys(password)self.chrome.find_element_by_xpath('//form[@class="active"]/div[@data-propertyname="submit"]/input').click()#遇到验证码后  阻塞  手动验证c = input('如果出现验证码 手动验证后 回车, 否则直接回车')def crawl(self):#点击红包页面init=Truefor k in self.keywords_ls:#爬取哪一个关键字的信息print(k)#https://www.lagou.com/jobs/list_java/p-city_2?px=default#filterBox#最新发布排序url = 'https://www.lagou.com/jobs/list_{}/p-city_0?px=new&#filterBox'.format(k)self.chrome.get(url)if 'sec.lagou.com' in self.chrome.current_url: #301重定向input('欢迎进入验证码页面!手动处理完成后回车')#红包页面只点一次if init:self.chrome.find_element_by_class_name('body-btn').click()init = Falsefor city in self.citys_ls:print(city)#维护断点续传if (k,city) in self.crawl_city:continue#点击城市self.chrome.find_element_by_link_text(city).click()if 'sec.lagou.com' in self.chrome.current_url: #301重定向input('欢迎进入验证码页面!手动处理完成后回车')#循环翻页while 1:#总页面totalpage = int(self.chrome.find_element_by_class_name('totalNum').text.strip())#当前页面curpage = int(self.chrome.find_element_by_class_name('curNum').text.strip())print('翻页',curpage,'/',totalpage)self.parseListPage(k,city)if curpage == totalpage:breakelse:self.chrome.find_element_by_class_name('next').click()if 'sec.lagou.com' in self.chrome.current_url: #301重定向input('欢迎进入验证码页面!手动处理完成后回车')#一定要刷新  否则下一次循环  无法定位城市self.chrome.refresh()#这个字段的城市已经爬取self.crawl_city.append((k,city))with open('./lagou_crawled_city.json','w',encoding='utf8') as f:print('已爬+++++++++++++',city,k)#存储json.dump(self.crawl_city,f,ensure_ascii=False)self.checkDetailPage()def handleTime(self,timestr):passdef parseListPage(self,keyword,city):WebDriverWait(self.chrome,3).until(EC.presence_of_all_elements_located(('class name','con_list_item')))time.sleep(1)for ele in self.chrome.find_elements_by_class_name('con_list_item'):item = {"keyword":keyword,'city':city}try:url = ele.find_element_by_xpath('./div/div/div/a').get_attribute('href')jd_id = url.split('.html')[0].split('/')[-1].strip()print(jd_id)except:returnif self.col.find_one({'jd_id':jd_id}):print('重复',jd_id)#continue #如果是初次爬取 continue 后期增量爬取 breakbreakitem['jd_id'] = jd_idtext = ele.find_element_by_xpath('./div').textls = text.split('\n')title = ls[0]addr =ls[1]#pubtime =self.handleTime(ls[2])item['title'] =titleitem['addr'] =addr#其他字段 自行添加salaryRange=ls[3].split(' ')[0].split('-')item['salaryRange']=salaryRangeprint(item,'***********')self.col.insert_one(item)def checkDetailPage(self):'''在数据库中遍历 补全信息'''for item in self.col.find({'job_description':False}):url = 'https://www.lagou.com/jobs/%s.html'%item['jd_id'].strip()self.chrome.get(url)des = self.chrome.find_element_by_class_name('job-detail').text.strip()self.col.update_one({'jd_id':item['jd_id']},{'$set':{'job_description':des}})if __name__ == "__main__":lagou = LaGouselenium(keywords_ls,citys_ls)lagou.login()lagou.crawl()

效果演示

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述


http://chatgpt.dhexx.cn/article/aVhPLTWP.shtml

相关文章

python -- 拉勾网爬虫模拟登录

入门爬虫一段时间,最近在做一个拉勾网的数据爬虫分析,项目也快接近尾声了,于是抽个时间写一下这个项目中遇到的一些问题。 目前拉勾网的反爬虫机制还是可以的,一开始用scrapy shell 分析拉勾网,发现拉勾网要校验usera…

基于Python的拉勾网的模拟登录获取cookie

lagou_login 拉勾网的模拟登录获取cookie,为爬虫做准备, 喜欢的点个赞,谢谢 入门爬虫一段时间,最近在做一个拉勾网的数据爬虫分析,项目也快接近尾声了,于是抽个时间写一下这个项目中遇到的一些问题。 目前拉勾网的反…

selenium模拟登陆拉勾网

初学selenium,尝试了一下模拟登录拉勾网,感觉还挺好玩的 就剩下最后的验证码不会处理了。。。 思路就是在网页代码中找到对应的框的属性进行查询,然后点击、输入就进行了。 之后就会看到Chrome弹出来自动完成一系列动作,感觉很…

如何高效地学习编程语言?

学习编程语言是一种技巧:做好了,你会感受到掌握新事物之后的快感;做不好,就会接二连三的沮丧,甚至放弃。下面我将介绍一些技巧与方法,以便帮助大家高效地学习。 持续测试自己以抵抗胜任力错觉 最不济的学习…

完全零基础,到底该怎样学习编程?

学习编程的过程,大致如下: 看书、看博客、学课程或者看视频等 模仿着书上或者博客的代码,进行复现,复现不重要,思考才是关键 ⚠️ 思考学习别人思路后,脱离书本和博客,完全自己实现功能 自己…

学习编程先学什么?怎么学习编程?

怎么学习编程 随着IT行业的快速发展,现在越来越多的人看中IT行业的前景,很多的人选择IT行业。其中大部分人会选择了学习编程语言,那么,怎么学习编程语言、学习编程先学什么就是人们最常遇到的困难,因此,小编…

我是如何学习编程的

我是如何学编程的 前世因今世果一轮回一回眸理论基础资源选择编程没有捷径合格程度兴趣培养学习时长解决问题推荐资源 学习资源推荐 微信扫码关注公众号 :前端前端大前端,追求更精致的阅读体验 ,一起来学习啊关注后发送关键资料,免费获取一整…

骨灰级程序员告诉你,怎样学习编程,才能快速从0基础,变成编程大师

本文章向大家介绍怎样学习编程,才能快速从0基础,变成编程大师,主要包括骨灰级程序员告诉你,怎样学习编程,才能快速从0基础,变成编程大师使用实例、应用技巧、基本知识点总结和需要注意事项,具有…

新手如何学习编程?

文章来源:微信公众号丨代码情缘 这篇文章就和大家简单聊聊,如何学习编程? 2021 年内卷、躺平从一个小圈子话题快速升温为社会话题,其实很多人都想过躺平,那么首先问一下自己,有什么资本躺平? …

想自学编程,先学什么好?给你三个建议,自己斟酌

要学一门编程语言,我们要了解相应的语法规则,大概知道计算机读取代码的逻辑,培养机器思维。 学习编程,最开始应该先了解一下计算机的历史,计算机基础。因为你在编程的时候,你需要让计算机知道你的思维&…

微信小程序map组件地图定位当前位置

小程序map组件的应用方式&#xff1a;简单版 wxml: <map id"map" latitude"{{latitude}}" longitude"{{longitude}}" controls"{{controls}}" bindcontroltap"controltap"markers"{{markers}}" bindmarkerta…

Android 开发百度地图定位显示当前位置

Android 开发百度地图定位显示当前位置 配置百度地图-获取 SHA1 找到自己安装 Android SDK 的位置&#xff08;&#xff0c;该位置下面有一个 .android 文件夹&#xff1b;使用 cmd 命令进入该文件夹下&#xff1b;然后执行命令 keytool -list -v -keystore debug.keystore&a…

uniapp获取当前位置(定位-经纬度及城市信息)

uniapp集成方法&#xff0c;跟小程序wx.getLocation不同&#xff0c;可直接获取经纬度及城市信息&#xff08;当然你也可以先获取经纬度再解析成具体城市&#xff09; uni.getLocation({type: wgs84,geocode:true,//设置该参数为true可直接获取经纬度及城市信息success: func…

Android 百度地图定位显示当前位置

配置百度地图 配置百度地图 获取 SHA1 在 Android Studio 中通过命令行获取&#xff0c;步骤如下&#xff1a; 点击左下角的 Terminal进入D:\Android\jre\bin输入指令keytool -list -v -keystore debug.keystore 获取百度地图密钥&#xff08;AK&#xff09; 进入百度地图官网&…

微信小程序 腾讯地图大头针定位,获取当前地址,地图移动选点,定位当前位置

主要实现功能&#xff1a; a.进入地图界面&#xff0c;会自动获取当前位置&#xff08;用户需授权地理位置权限&#xff09;&#xff0c;并显示省市区在左上角&#xff0c;根据个人需求&#xff0c;我只显示了区 b.大头针实现&#xff0c;拖动地图&#xff0c;大头针都能获取到…

[android] 百度地图开发 (三).定位当前位置及getLastKnownLocation获取location总为空问题

前一篇百度地图开发讲述"(二).定位城市位置和城市POI搜索"&#xff0c;主要通过监听对象MKSearchListener类实现城市兴趣点POI(Point of Interest)搜索。该篇讲述定位当前自己的位置及使用getLastKnownLocation获取location总时为空值的问题。 一. 定位当前位置的原…

Android进阶之路 - 定位当前位置、获取经纬度

最近又遇到定位场景&#xff0c;需要上传经纬度&#xff0c;正好同事写了&#xff0c;我就记录一下方便你我他 ~ ~ 今年开始用的kt比较多&#xff0c;所以篇内用的kt&#xff0c;见谅见谅 前情悉知 获取当前位置时&#xff0c;需要判断用户是否授权&#xff0c;这里用到的是 …

vue-amap实现实现初始化并定位当前位置,搜索,定位,增加点标记

实现如图展示&#xff0c;初始化并定位当前位置&#xff0c;搜索&#xff0c;定位&#xff0c;增加点标记 下载vue 1.vue页设置 如果是新版web-js的密钥&#xff0c;有配套的安全秘钥&#xff0c;则需要另外在created加入&#xff0c;否则会报undefined window._AMapSecurity…

vue3定位当前位置,获取当前位置的经纬度

vue3定位当前位置&#xff0c;获取当前位置的经纬度 注意事项&#xff08;访问地址必须是https&#xff09;获取当前位置经纬度 注意事项&#xff08;访问地址必须是https&#xff09; 在vue.config.js文件内设置https:true&#xff0c;然后重启一下项目 获取当前位置经纬度 …

新建文本文档

使用百度地图&#xff0c;定位你当前位置并显示 1、准备 注册百度开发者账号到百度地图开放平台创建应用&#xff08;as获取SHA1值&#xff09; 2、将sdk整到你的项目中去 - 在你app的gradle.build中添加 dependencies {...... compile files(libs/baidumapapi_base_v4_0…