python爬取拉勾网公司信息(您操作太频繁,请稍后访问)
2019-06-05 23:23
369 查看
版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/fwpevil/article/details/90956762
最近爬取拉勾网上的公司信息碰到了很多问题,但是都一一解决了。作为一个招聘网站,他的反爬措施做的还是很好的。
为了调查招聘网站上有多少公司,以及公司信息,并把公司信息存入MongoDB数据库中。
先上运行成功代码:
[code]import requests import json,time,random import pymongo from lxml import etree #导入需要用到的库文件 client=pymongo.MongoClient('localhost',27017) test=client['info_company'] lagou=test['lagou'] #连接数据库 def gongsi_info(url): #定义获取公司信息的函数 for pn in range(2,31): params={ 'first':'false', 'pn':str(pn), 'sortField':'0', 'havemark':'0' } #post请求参数 try: with open('已下载页面.txt','r',)as f: #如果存在该文件,就打开并读取内容,否则就创建该文件 t=f.readlines() if str(pn)+'\n' in t: print('第'+str(pn)+'页已经爬取过了') else: urls='https://www.lagou.com/gongsi/' s = requests.Session() s.get(urls, headers=headers, timeout=3) # 请求首页获取cookies cookie = s.cookies # 为此次获取的cookies print(cookie) response = s.post(url, data=params, headers=headers, cookies=cookie, timeout=5) # 获取此次文本 # time.sleep(3) response.encoding = response.apparent_encoding json_data = json.loads(response.text) print(json_data['pageNo']) print(json_data['totalCount']) results=json_data['result'] for result in results: infos={ '公司简称':result['companyShortName'], '公司城市':result['city'], '公司全名':result['companyFullName'], '公司特色':result['companyFeatures'] if 'companyFeatures' in result else '', '专注行业':result['industryField'], '公司规模':result['companySize'], '融资阶段':result['financeStage'], '面试评价数':result['interviewRemarkNum'], '在招职位':result['positionNum'], 4000 '简历处理率':result['processRate'] } lagou.insert_one(infos) #将数据插入数据库 ti=10+random.random() #设置间隔时间,防止被服务器屏蔽 time.sleep(ti) with open('已下载页面.txt','a+')as f: #将已经下载过的页面保存在txt文件中 f.write(str(pn)+'\n') f.close() except requests.exceptions.ConnectionError: pass if __name__=='__main__': url='https://www.lagou.com/gongsi/0-0-0-0.json' headers = { 'Accept': 'application/json, text/javascript, */*; q=0.01', 'Referer': 'https://www.lagou.com/gongsi/', 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/72.0.3626.121 Safari/537.36'} gongsi_info(url) print('finished!!')
拉勾网结合了异步加载技术和提交表单,通过逆向工程爬取公司信息。
一开始的思路是:拉勾网在登录后才能拿到数据,因此需要在headers中带上cookie模拟登陆。结果发现在浏览器端能获得数据,但是程序一运行就返回:
'status': False, 'msg': '您操作太频繁,请稍后再访问', 'clientIp': '1120.229.134.196', 'state': 2402}
去网上又找了类似问题的解决方法,觉得应该是post表单少了参数导致的,因此我把f12中看到的headers参数全部带上,接着尝试运行程序,结果还是一样。
直到看到一篇文章说cookie的问题,上面说到cookie时间戳的问题,于是我去拉勾网看了一下发现这个:
这说明cookie中带有时间戳就是问题所在:一次性,在开发者工具中复制的cookie不能重复使用(其他网站的可以)。直到问题所在,接下来只要解决cookie问题就可以了。
这几行代码就解决了这个问题。解决灵感来自于博客,发现每次的cookie都不一样,至于更深层次的原因,暂不清楚,等后面接触服务器再来更新。
相关文章推荐
- python 爬拉勾网之”您操作太频繁,请稍后访问“
- (python爬虫)-selenium的常规操作并爬取拉勾网信息
- Python爬虫:爬取拉勾网招聘信息
- VTK修炼之道17:图像基本操作_图像信息的访问与修改(vtkImageData)
- python 得到文件版本信息 公司名和产品名
- python类内init外声明的属性与init内声明的对象属性的访问和操作区别
- 20.python对类的操作(一)——获取对象信息,实例属性和类属性。
- 操作 Python爬虫数据存储MySQL【3】爬取信息
- 关于serv-u公网访问出现“打开ftp服务器上的文件夹时发生错误。请检查是否有权限访问该文件夹。详细信息:操作超时”的解决方法
- python---pexpect用户操作linux系统命令,命令信息保存到日志
- java Web项目中,利用其过滤功能,实现访问者每次访问服务器时,记录访问者的IP,访问时间,Url等信息,并保存到文件的操作
- Python访问sqlite3的入门操作
- Python面向对象编程(类和实例 访问限制 继承和多态 获取对象信息 实例属性和类属性)
- 关于serv-u公网访问出现“打开ftp服务器上的文件夹时发生错误。请检查是否有权限访问该文件夹。详细信息:操作超时”的解决方法
- [置顶] python3 scrapy 入门级爬虫 爬取数万条拉勾网职位信息
- 5.Python基本数据结构-字典-创建/访问/基本操作/格式化输出
- python访问百度地图接口并返回信息
- Python爬取拉勾网招聘信息
- 异常详细信息: System.Data.OleDb.OleDbException: 未指定的错误 这个错误是access数据库特有的错误,当access频繁读取或操作过多的时候就会发生这个错误,微软
- 【Python】抓取拉勾网全国Python的招聘信息