拉购网职位搜索爬虫

分析职位搜索调用接口:

  1. 浏览器开发者模式(快捷键F12)切换手机模式,打开拉购网职位搜索链接 https://m.lagou.com/search.html
  2. 输入搜索关键词, 例如"Python" ,可以看到右侧的XHR中出现一个AJAX调用请求 https://m.lagou.com/search.json?city=%E5%85%A8%E5%9B%BD&positionName=Python&pageNo=1&pageSize=15
  3. 找到了AJAX接口后,我们就可以使用requests模拟发送请求来搜索职位信息了。

下面是实现源码:

#!/usr/bin/env python3
# -*-coding:utf8-*-
import logging
import traceback
import requests
from requests.adapters import HTTPAdapter
import json
import random
import sys def usage():
print("Usage:\n\t lagou_search <keyword> [page_number] [地理位置] \n\n\t<keyword> : 搜索职位名称\n\t[page_number]显示页数,每页15条\n------\n") if len(sys.argv) < 2:
usage()
sys.exit(1) keyword = sys.argv[1]
if len(sys.argv) > 2:
page_num = int(sys.argv[2])
else:
page_num = 1
if len(sys.argv) > 3:
city = sys.argv[3]
else:
city = '全国' LOG_FORMAT = "%(asctime)s - %(filename)s - %(funcName)s - %(lineno)s - %(levelname)s - %(message)s"
logging.basicConfig(filename=f'log.lagou.log', level=logging.DEBUG, filemode='a', format=LOG_FORMAT) def get_proxy():
proxy_uri = 'socks5://127.0.0.1:1084'
proxies = {
'http': proxy_uri,
'https': proxy_uri
}
return proxies def search_jobs(keyword, page):
proxies = get_proxy()
myheaders = {
'User-Agent': 'Mozilla/5.0 (Linux; Android 7.1.1; OS105 Build/NGI77B) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/62.0.3202.84 Mobile Safari/537.36',
}
headers = {
'Host': 'm.lagou.com',
'Accept': 'application/json,text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8',
'X-Requested-With': 'XMLHttpRequest',
'User-Agent': 'Mozilla/5.0 (Linux; Android 7.1.1; OS105 Build/NGI77B) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/62.0.3202.84 Mobile Safari/537.36',
'Referer': 'https://m.lagou.com/search.html',
'Accept-Language': 'zh-CN,zh;q=0.9'
}
payload = {
'city': city,
'positionName': keyword,
'pageNo': 1,
'pageSize': 15
}
result = {}
try:
s = requests.Session()
s.mount('http://', HTTPAdapter(max_retries=5))
s.mount('https://', HTTPAdapter(max_retries=5))
resp = s.get('https://m.lagou.com/search.html', headers=myheaders, proxies=proxies, timeout=10)
for pn in range(1, page+1):
payload['pageNo'] = pn
try:
resp = s.get('https://m.lagou.com/search.json', params=payload, proxies=proxies, timeout=10, headers=headers)
jscontent = resp.text
jsDict = json.loads(jscontent)
statusJson = jsDict['state'] if 'state' in jsDict.keys() else 0
if statusJson == 1:
if 'content' in jsDict.keys():
jsList = jsDict['content']['data']['page']['result']
for jsData in jsList:
result['positionId'] = jsData['positionId']
result['positionName'] = jsData['positionName']
result['city'] = jsData['city']
result['salary'] = jsData['salary']
result['companyFullName'] = jsData['companyFullName']
result['link'] = 'https://www.lagou.com/jobs/' + str(jsData['positionId']) + '.html'
print(json.dumps(result, ensure_ascii=False))
except Exception as e:
logging.exception(str(e))
except requests.exceptions.ProxyError as e:
logging.exception(f'proxy_error ' + str(e))
except Exception as e:
logging.exception(f'proxy: ' + str(e)) if __name__ == "__main__":
try:
search_jobs(keyword, page_num)
except Exception as e:
print(e)

脚本工具使用方法:

╰─ ./lagou_search.py
Usage:
lagou_search <keyword> [page_number] [地理位置] <keyword> : 搜索职位名称
[page_number]显示页数,每页15条
------

AJAX接口-拉购网职位搜索爬虫的更多相关文章

  1. 关于网易云音乐爬虫的api接口?

    抓包能力有限,分析了一下网易云音乐的一些api接口,但是关于它很多post请求都是加了密,没有弄太明白.之前在知乎看到过一个豆瓣工程师写的教程,但是被投诉删掉了,请问有网友fork了的吗?因为我觉得他 ...

  2. C#制作网盘搜索工具(简单的爬虫)

    最近学习C#编程,在网上发现一篇winform下制作百度网盘搜索器的文章,故而下载源码学习一二.无奈原博所用的网址失效,故而自己改写了网址和相关源代码,也进行了实现.因为初学,接触的知识较多,为免忘记 ...

  3. [PHP] 网盘搜索引擎-采集爬取百度网盘分享文件实现网盘搜索

    标题起的太大了,都是骗人的.最近使用PHP实现了简单的网盘搜索程序,并且关联了微信公众平台.用户可以通过公众号输入关键字,公众号会返回相应的网盘下载地址.就是这么一个简单的功能,类似很多的网盘搜索类网 ...

  4. 【Python3爬虫】网易云音乐爬虫

    此次的目标是爬取网易云音乐上指定歌曲所有评论并生成词云 具体步骤: 一:实现JS加密 找到这个ajax接口没什么难度,问题在于传递的数据,是通过js加密得到的,因此需要查看js代码. 通过断掉调试可以 ...

  5. Redis 实战 —— 10. 实现内容搜索、定向广告和职位搜索

    使用 Redis 进行搜索 P153 通过改变程序搜索数据的方式,并使用 Redis 来减少绝大部分基于单词或者关键字进行的内容搜索操作的执行时间. P154 基本搜索原理 P154 倒排索引 (in ...

  6. Python 微博搜索爬虫

    微博搜索爬虫 网页分析 由于网页端反爬虫机制比较完善所以才去移动端进行爬虫. url地址:https://m.weibo.cn/ 搜索框,输入关键词进行搜索 对网页进行抓包,找到相关数据 查看数据是否 ...

  7. 简单的抓取淘宝关键字信息、图片的Python爬虫|Python3中级玩家:淘宝天猫商品搜索爬虫自动化工具(第一篇)

    Python3中级玩家:淘宝天猫商品搜索爬虫自动化工具(第一篇) 淘宝改字段,Bugfix,查看https://github.com/hunterhug/taobaoscrapy.git 由于Gith ...

  8. 推荐一个百度网盘搜索工具www.sososo.me

    推荐一个百度网盘搜索工具 http://www.sososo.me

  9. 【百度地图API】如何使用suggestion--下拉列表方式的搜索建议

    原文:[百度地图API]如何使用suggestion--下拉列表方式的搜索建议 摘要: 百度地图上有一个很强大的搜索建议功能,以下拉列表的方式展示出来.比如,输入“百度”,下拉列表中就会出现“北京市海 ...

随机推荐

  1. Python实现的数据结构与算法之双端队列详解

    一.概述 双端队列(deque,全名double-ended queue)是一种具有队列和栈性质的线性数据结构.双端队列也拥有两端:队首(front).队尾(rear),但与队列不同的是,插入操作在两 ...

  2. matlab中get查询图形对象属性

    来源:https://ww2.mathworks.cn/help/matlab/ref/get.html?searchHighlight=get&s_tid=doc_srchtitle get ...

  3. 一、Mysql(1)

    数据库简介 人类在进化的过程中,创造了数字.文字.符号等来进行数据的记录,但是承受着认知能力和创造能力的提升,数据量越来越大,对于数据的记录和准确查找,成为了一个重大难题 计算机诞生后,数据开始在计算 ...

  4. try-finally的时候try里面带return

    最近学习的JVM小册中老师提了个问题: 最开始我觉得是1,结果程序跑出来是0,感到很疑惑,于是查看了下字节码: 从字节码可以看出: 0:定义变量0 1:将0存入本地变量表slot-0 2:加载slot ...

  5. 收集的照片信息都是Excel超链接?批量命名很困难?来试试这个自制的下载器吧!

    项目背景 作为大学的一名班委,经常要制作各种表格.统计各种信息,成为一名合格的"表哥"是一门必修课.其实Excel的文字信息和数字信息的统计和处理还并不算难题,很多信息可以通过问卷 ...

  6. Oracle和MySql之间SQL区别(等效转换以及需要注意的问题)

    本篇博文是Oracle和MySQL之间的等效SQL转换和不同,目前市面上没有转换两种SQL的工具,小编觉得以后也不一定会有,于是在业余时间整理了一下,如果有什么错误之处请留言告知,小编也是刚入门的小白 ...

  7. S3C2440 LCD驱动(FrameBuffer)实例开发<二>(转)

    开发板自带的LCD驱动是基于platform总线写的,所以如果要使其它的LCD能够在自己的开发板上跑起来,那么就先了解platform驱动的架构,下面简单记录下自己看platform驱动时体会,简单的 ...

  8. ES异常处理-NoNodeAvailableException

    1.问题描述 ES client客户端能创建,但是在用客户端操作时报:NoNodeAvailableException[None of the configured nodes are availab ...

  9. 利用RNN进行中文文本分类(数据集是复旦中文语料)

    利用TfidfVectorizer进行中文文本分类(数据集是复旦中文语料) 1.训练词向量 数据预处理参考利用TfidfVectorizer进行中文文本分类(数据集是复旦中文语料) ,现在我们有了分词 ...

  10. jenkins:配置密钥时报错的解决:Failed to add SSH key. Message invalid privatekey(Jenkins 2.257)

    一,报错的现象: 1,提示信息: jenkins.plugins.publish_over.BapPublisherException: Failed to add SSH key. Message ...