1. 使用的工具

selenium+xpath+ 手动输入登录

2. 实现的功能:

   1.手动登录后,按终端提示,就能下载所需要的内容

 

import requests
import json
import time
import random
from lxml import etree
from concurrent.futures import ThreadPoolExecutor
from selenium import webdriver import pymongo # 连接mongo 数据库
client = pymongo.MongoClient()
db = client.lougou
collention =db.lou # 进入拉钩首页
url ='https://www.lagou.com/'
bro = webdriver.Chrome() bro.get(url) input('在登录页面手动登录后,按回车键:') # 进入了自己登录页面
# 找到收缩框
search_input = bro.find_element_by_id('search_input') # 找到搜索按钮
search_button = bro.find_element_by_id('search_button') # 输入你需要搜索的职位
search_msg = input('请输入你要搜索的职位:') # 在输入框自动填入搜索内容
search_input.send_keys(search_msg) # 自动点击搜索按钮
search_button.click() def get_data():
'''
提取页面数据 将数据存入 mongo 数据库
'''
time.sleep(1) # 获取页面内容
page=bro.page_source
time.sleep(2) tree = etree.HTML(page) li_list =tree.xpath("//ul[@class='item_con_list']/li") for li in li_list:
item={} item['title'] =li.xpath('.//h3/text()')[0] # 职位标题
item['position_link'] = li.xpath(".//a[@class='position_link']/@href")[0] # 职位详情链接
item['addr'] = li.xpath(".//span[@class='add']/em/text()")[0].strip() # 公司区域
item['money'] = li.xpath(".//div[@class='li_b_l']/span/text()")[0] # 岗位工资
item['work_year'] = li.xpath(".//div[@class='p_bot']/div[@class='li_b_l']//text()") #
item['work_year'] = [i.strip() for i in item['work_year'] if i.strip()]
item['work_year'] =item['work_year'][1] # 工作经历
item['company_name'] = li.xpath(".//div[@class='company_name']/a/text()")[0] # 公司名字
item['industry'] = li.xpath(".//div[@class='industry']/text()")[0].strip() # 公司所属行业 print(item)
# 将数据存到MongoDB 中 collention.insert(item) get_data() # 翻页下载该搜索也的所有页的数据
while 1: try:
# 下一页
next =bro.find_element_by_xpath('//span[@class="pager_next "]')
next.click() get_data() except : print('没有下一页了。。。。。') break # 进入循环 ,实现 用户再次 输入 不同职位进行下载该类职位的信息 ,用户可以按 q 或 Q 退出下载
while 1: keyword_input = bro.find_element_by_id('keyword') # 搜索框
submit_btn = bro.find_element_by_id('submit') # 搜索按钮 # 清空输入搜索框的内容
keyword_input.clear() # 重新进行搜索
msg2 =input('请输入你要下载的职位信息:') # 退出循环条件,退出下载
if msg2.upper()=='Q':
break keyword_input.send_keys(msg2)
# 点击搜索
submit_btn.click() # 下载该页面的数据
get_data() while 1: try:
# 下一页
next =bro.find_element_by_xpath('//span[@class="pager_next "]')
next.click() # 进入下一页,进行下载该页的数据
get_data() except : print('没有下一页了。。。。。') break # 关闭数据库
client.close() # 关闭浏览器 bro.quit()

代码

  2. 你第一次输入的职位下载完会提醒你,你可以再次下载你所需要的其他职位的数据

3. 数据保存在了 mongo中,此处没有做扩展,存文件或其他数据库

lagou数据爬取的更多相关文章

  1. 爬虫1.5-ajax数据爬取

    目录 爬虫-ajax数据爬取 1. ajax数据 2. selenium+chromedriver知识准备 3. selenium+chromedriver实战拉勾网爬虫代码 爬虫-ajax数据爬取 ...

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

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

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

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

  4. Python爬虫 股票数据爬取

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

  5. quotes 整站数据爬取存mongo

    安装完成scrapy后爬取部分信息已经不能满足躁动的心了,那么试试http://quotes.toscrape.com/整站数据爬取 第一部分 项目创建 1.进入到存储项目的文件夹,执行指令 scra ...

  6. Ajax数据爬取

    Ajax的基本原理 以菜鸟教程的代码为例: XMLHTTPRequest对象是JS对Ajax的底层实现: var xmlhttp; if (window.XMLHttpRequest) { // IE ...

  7. Python爬虫入门教程 15-100 石家庄政民互动数据爬取

    石家庄政民互动数据爬取-写在前面 今天,咱抓取一个网站,这个网站呢,涉及的内容就是 网友留言和回复,特别简单,但是网站是gov的.网址为 http://www.sjz.gov.cn/col/14900 ...

  8. 基于 PHP 的数据爬取(QueryList)

    基于PHP的数据爬取 官方网站站点 简单. 灵活.强大的PHP采集工具,让采集更简单一点. 简介: QueryList使用jQuery选择器来做采集,让你告别复杂的正则表达式:QueryList具有j ...

  9. Scrapy 框架 CrawlSpider 全站数据爬取

    CrawlSpider 全站数据爬取 创建 crawlSpider 爬虫文件 scrapy genspider -t crawl chouti www.xxx.com import scrapy fr ...

随机推荐

  1. 【LeetCode】894. All Possible Full Binary Trees 解题报告(Python & C++)

    作者: 负雪明烛 id: fuxuemingzhu 个人博客: http://fuxuemingzhu.cn/ 目录 题目描述 题目大意 解题方法 日期 题目地址:https://leetcode.c ...

  2. 【剑指Offer】把二叉树打印成多行 解题报告(Python)

    [剑指Offer]把二叉树打印成多行 解题报告(Python) 标签(空格分隔): 剑指Offer 题目地址:https://www.nowcoder.com/ta/coding-interviews ...

  3. Sort(hdu5884)

    Sort Time Limit: 3000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Submis ...

  4. matplotlib 进阶之Customizing Figure Layouts Using GridSpec and Other Functions

    目录 对Gridspec的一些精细的调整 利用SubplotSpec fig.add_grdispec; gs.subgridspec 一个利用Subplotspec的复杂例子 函数链接 matplo ...

  5. CS5213设计说明书|Capstone CS5213|CS5213设计参考电路

    Capstone CS5213是一款HDMI到VGA转换器结合了HDMI输入接口和模拟RGB DAC输出且带支持片上音频数模转换器.CS5213芯片设计简单,整体芯片尺寸精悍,外围电路集成优化度较高, ...

  6. Struts2中通过Ajax传递json数据

    1.导入Struts2所需要的jar包 下载Struts2的jar包时,可以下载struts-2.5.13-min-lib.zip,然后放到项目的/WebContent/WEB-INF/lib路径下s ...

  7. Drools创建Maven工程

    1.说明 本文介绍创建Drools的Maven工程的方法, 仅使用Eclipse开发工具, 不使用Drools的相关插件, 先创建一个Maven工程, 然后引入Drools的相关依赖即可, 最后再写一 ...

  8. Storm对DRPC权限控制Version1.0.1

    对Storm的DRPC进行权限控制, 并且设计相应的测试验证. 1.集群安装 请参考Storm集群安装Version1.0.1 2.使用DRPC功能 请参考Storm集群使用DRPC功能Version ...

  9. Kafka基础教程(三):C#使用Kafka消息队列

    接上篇Kafka的安装,我安装的Kafka集群地址:192.168.209.133:9092,192.168.209.134:9092,192.168.209.135:9092,所以这里直接使用这个集 ...

  10. Flink sql 之 两阶段聚合与 TwoStageOptimizedAggregateRule(源码分析)

    本文源码基于flink1.14 上一篇文章分析了<flink的minibatch微批处理>的源码 乘热打铁分析一下两阶段聚合的源码,因为使用两阶段要先开启minibatch,至于为什么后面 ...