Python爬取智联招聘职位信息
这是一次失败的尝试 , 事情是这样的…… 1.起因 2.分析网站数据 首先利用谷歌浏览器查看网页源码,发现在源码里找不到职位信息,所以判断职位信息是通过AJAX方式动态加载的。 于是,我采用谷歌浏览器的开发者工具进行抓包分析数据。
找到动态加载的文件后,分析该数据请求浏览器是怎么完成的。查看数据请求头信息,可以找到请求的URL。再看请求方式,是Post请求。于是分析post请求提交的参数。 _v: 0.14465550 很显然这是经过加密的几个参数,而且与时间戳有关。网上有关于解密的算法,但是如今的智联网站多了一层加密,就是‘MmEwMD:’参数。而且经过观察,这是几个参数是拼接在网址后面组合成数据请求的URL的,网上没有关于这方面的案例,因此强行爬取怕是不行,臣妾做不到啊! 3.终极爬取方式 - 无头浏览器 “工欲善其事,必先利其器。” 因此,这里需要安装第三方库:selenium,并下载配置无头浏览器。有一个坑需要注意,就是pyhton已经不支持 phantomjs,所以我选择了Chromedriver(要与自己的谷歌浏览器版本相匹配)
数次尝试,发现总是报错,一番查看之后发现无头浏览器总是停留在初始页面,职位信息加载不出职位信息,我只好再次通过无头浏览器抓包查看问题出在哪一步。 于是,我发现了动态加载请求文件的方式错了,本该是POST请求,现在提交的是OPTIONS请求,所以返回状态码400的错误。无头浏览器本应于普通浏览器一样,但是这里无头浏览器的请求方式却有变化。 我猜想应该是智联网站采取了更严谨的反爬措施,能够识别无头浏览器。唉,费了老大劲,结果连职位信息的影子都没见着,技艺不精还需继续学习才好! 4.初次爬取,终于失败 从现在来看,要想爬取智联网站有两种方案可行: 1.破解网站加密算法,并模拟加密算法 2.修改无头浏览器请求数据方式,或者获得数据请求参数。 可是,不管哪一种方法,都很难实现。虽然这次没有爬取成功,但这是一次‘顺藤摸瓜’的探索的过程,等到技术精湛的时候再来尝试! |
奉上这糟糕的代码:
from selenium import webdriver
from selenium.webdriver.chrome.options import Options
from selenium.webdriver.support.wait import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC # 内置预期条件函数,具体API请参考此小节后API链接
from selenium.webdriver.common.by import By # 内置定位器策略集
#引入按键包
# from selenium.webdriver.common.keys import Keys
from lxml import etree
import time
import hashlib
# import ssl
# ssl._create_default_https_context = ssl._create_unverified_context
from selenium.webdriver.common.desired_capabilities import DesiredCapabilities
# 过滤出数据请求中的headers
def getHttpInfo(browser):for responseReceived in browser.get_log('performance'):try:response = json.loads(responseReceived[u'message'])[u'message'][u'params'][u'response']if 'ajaxUrl' in response['url']:# print(response)# print(response['url'])# print(response['headers'])# print(response['headersText'])return response['requestHeaders']except:passreturn None
# 请求页面 并设置headers到文件中
def setHeaders():d = DesiredCapabilities.CHROMEd['loggingPrefs'] = { 'performance':'ALL' }options=webdriver.ChromeOptions()options.set_headless()options.add_argument('--disable-gpu')driver=webdriver.Chrome(desired_capabilities=d,options=options)driver.get('http://www.baidu.com')sleep(20)headers = getHttpInfo(driver)driver.quit()# write headerhand = open('header.txt', 'w')hand.write(json.dumps(headers))hand.close()
chrome_options = Options()
#后面的两个是固定写法隐藏界面
chrome_options.add_argument('--headless')
chrome_options.add_argument('--disable-gpu')
# 构建浏览器对象
path = r'C:\Users\Administrator\AppData\Local\Google\Chrome\Application\chromedriver.exe'
browser = webdriver.Chrome(executable_path=path,chrome_options=chrome_options)
# 获取网页文件,保存在文件中,page_source为JS动态加载后的页面
url = 'https://sou.zhaopin.com/?jl=765&kw=%E6%95%B0%E6%8D%AE%E6%8C%96%E6%8E%98&kt=3'
# 设置user-agent
user_ag='Win7+ie9:Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Win64; x64; Trident/5.0; .NET CLR 2.0.50727; SLCC2; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; InfoPath.3; .NET4.0C; Tablet PC 2.0; .NET4.0E)'
chrome_options.add_argument('user-agent=%s'%user_ag)
# 隐式的等待
# browser.implicitly_wait(3)
browser.get(url)
# 找到弹窗并点击消除
elem = browser.find_element_by_xpath(r'//div[@class="risk-warning__content"]/button').click()
print(getHttpInfo(browser))
WebDriverWait(browser, 20, 0.5).until(EC.presence_of_all_elements_located((By.CLASS_NAME,'contentpile__content'))) #使用expected_conditions自带验证函数
browser.save_screenshot('zhilain.png')
js = 'document.documentElement.scrollTop=10000'
browser.execute_script(js)
time.sleep(3)
# 保存网页截图
html = browser.page_source
print(html)
browser.get_screenshot_as_file('test.png')
browser.quit()
''' #####解密########(来源于网络)
# 经过分析_v就是一个随机的8位小数
# x-zp-page-request-id 由三部分组成,32位随机数据通过md5简单加密得到+ 当前时间戳 + 随机数6位
# 想办法用python简单实现所谓的加密算法x-zp-page-request-id
# 1、生成一个随机32位数id
md5 = hashlib.md5()
id = str(random.random())
md5.update(id.encode('utf-8'))
random_id = md5.hexdigest()
# 2、生成当前时间戳
now_time = int(time.time() * 1000)
# 3、生成随机6位数
randomnumb = int(random.random() * 1000000)
# 组合代码生成x-zp-page-request-id
x_zp_page_request_id = str(random_id) + '-' + str(now_time) + '-' + str(randomnumb)
# print(x_zp_page_request_id)
# 生成_v
url_v = round(random.random(), 8)
# print(url_v)
'''
Python爬取智联招聘职位信息相关推荐
- python爬取智联招聘职位信息(单进程)
我们先通过百度搜索智联招聘,进入智联招聘官网,一看,傻眼了,需要登录才能查看招聘信息 没办法,用账号登录进去,登录后的网页如下: 输入职位名称点击搜索,显示如下网页: 把这个URL:https://s ...
- Python爬虫爬取智联招聘职位信息
目的:输入要爬取的职位名称,五个意向城市,爬取智联招聘上的该信息,并打印进表格中 #coding:utf-8 import urllib2 import re import xlwtclass ZLZ ...
- 【Python爬虫案例学习20】Python爬虫爬取智联招聘职位信息
目的:输入要爬取的职位名称,五个意向城市,爬取智联招聘上的该信息,并打印进表格中 ####基本环境配置: Python版本:2.7 开发工具:pycharm 系统:win10 ####相关模块: im ...
- 智联招聘python岗位_Python爬虫爬取智联招聘职位信息
import urllib2 import re import xlwt '''遇到不懂的问题?Python学习交流群:821460695满足你的需求,资料都已经上传群文件,可以自行下载!''' cl ...
- java爬取智联招聘职位信息
第一次写爬虫,案例比较简单,就在智联招聘网站上爬取职位信息. 技术点:IO流,集合,Jsoup使用,以及前端的知识 代码如下: package com.wty.utils;import java.io ...
- 爬虫练习二:爬取智联招聘职位信息
1. 简介 因为想要找到一个数据分析的工作,能够了解到市面上现有的职位招聘信息也会对找工作有所帮助. 今天就来爬取一下智联招聘上数据分析师的招聘信息,并存入本地的MySQL. 2. 页面分析 2.1 ...
- pythton爬取智联招聘职位信息
前言 在智联招聘https://sou.zhaopin.com/时,发现无法直接去解析获得的html文本,它的数据是用js动态加载的,数据内容存储在json文件中,所以不能用以前的方法使用xpath. ...
- python爬取智联招聘网_python爬取智联招聘工作岗位信息
1 # coding:utf-8 2 # auth:xiaomozi 3 #date:2018.4.19 4 #爬取智联招聘职位信息 5 6 7 import urllib 8 from lxml i ...
- selenium+PyQuery+chrome headless 爬取智联招聘求职信息
最近导师让自己摸索摸索Python爬虫,好了就开始一发不可收拾的地步.正巧又碰到有位同学需要一些求职信息对求职信息进行数据分析,本着练练手的目的写了用Python爬取智联招聘网站的信息.这一爬取不得了 ...
最新文章
- navicat导数据速度_华为廊坊云数据中心二期1~3期主楼聚氨脂、聚脲防水隔热总承包工程...
- 主要几种通信协议的性能比较(转载)
- MyBatis——@Result注解column参数传递多个参数
- Asp.Net Core获取请求信息/获取请求地址
- Wannafly 挑战赛27 题解
- python构建二叉树_BinaryTree:学习二叉树的Python库
- java .net 3des_Java.net3DES差异及互通
- office组件导入导出常见异常记录
- ArcGIS pro 发布地图服务(一)动态地图服务
- 普通摄像头游戏——空中飞车
- 周杰伦一发新歌,服务器为什就挂掉了?
- ARM的商业模式和ARM各种版本号区分
- 软件领域专利申请的基本特点
- 将 Debian APT 引入 iPhone
- mysql aborted connection_mysql Aborted connection错误
- Wireshark 301: Finding the busiest computers on your network
- Python中Tkinter模块的Canvas控件绘制jpg图片到指定区域
- 计算机专业背景的大学,不要求专业背景的计算机专业!
- NFV和SDN之间到底有什么关系?
- linux系统查看日历
热门文章
- unity3d 更换项目字体
- 纯CSS导航栏下划线滑动效果
- Java8日期处理类
- 牛客题目——最长公共子串、最长回文子串、兑换零钱
- StarCitizen星际公民添加好友一起玩教程
- php添加网站ico图标,如何添加网站ICO图标,添加ico图标的方法
- 微信小程序遇到的坑系列---小程序上传图片线上失败
- 为什么你的拼多多店铺会被降权了
- [下载]JEB-2.2.7破解版 for macOS
- 仅记录deepin 安装 2007版本Microsoft Office Word/Powerpoint/Excel/Visio