天天看点

python selenium 爬取网页审查元素_Python 爬虫 | selenium爬取某招聘平台

最近小编参加了学校的爬虫比赛,由于我是比赛开始后一天我才知道有这个比赛,这个比赛不止需要做爬数据,还需要做数据分析,因此时间比较紧。

本次比赛的主题是围绕着大数据工程师进行数据的爬取和分析。

本次的受害者

aHR0cHMlM2ElMmYlMmZ3d3cubGFnb3UuY29tL2pvYnMvbGlzdF8lRTUlQTQlQTclRTYlOTUlQjAlRTYlOEQlQUU/bGFiZWxXb3Jkcz0mZnJvbVNlYXJjaD10cnVlJnN1Z2lucHV0PQ==

目录:

1、环境

2、分析网站

3、实现爬取

1、环境

Python3.7、requests、selenium

2、分析网站

先打开开发者工具,再在搜索栏中输入大数据

python selenium 爬取网页审查元素_Python 爬虫 | selenium爬取某招聘平台

图1

python selenium 爬取网页审查元素_Python 爬虫 | selenium爬取某招聘平台

图2

筛选XHR请求很容易就可以发现目标数据所在的请求如图3

python selenium 爬取网页审查元素_Python 爬虫 | selenium爬取某招聘平台

图3

找到了请求,第二步就是分析请求是否有加密,我的习惯是直接看最下面的请求参数

python selenium 爬取网页审查元素_Python 爬虫 | selenium爬取某招聘平台

图4

很明显没有加密参数,直接请求这个数据的接口,得到如图5,没有得到数据,肯定有什么地方是加密了的,估计就是cookie加密了

python selenium 爬取网页审查元素_Python 爬虫 | selenium爬取某招聘平台

图5

看一下cookie,如图6

python selenium 爬取网页审查元素_Python 爬虫 | selenium爬取某招聘平台

图6

我看了一下背后的逻辑,是经过混淆的如图7

由于比赛时间比较紧,我就直接用selenium获取cookie,拿到数据进行数据分析再说。

python selenium 爬取网页审查元素_Python 爬虫 | selenium爬取某招聘平台

图7

3、实现爬取

用selenium爬取就基本没有难点,用selenium运行js代码得到cookie即可

def get_cookie(url):
    browser.get(url)
    js = 'var c = document.cookie;return c'  # js语句
    return browser.execute_script(js)  # 执行js
           

这里是post请求,需要改变参数已达到请求不同页码的数据

def get_json(content):
    a = content.get('content').get('positionResult').get('result')
    city, jod_year, experience, XL, ave_money, business = [], [], [], [], [], []
    for i in a:
        city.append(i.get('city'))
        jod_year.append(i.get('workYear'))
        XL.append(i.get('education'))
        ave_money.append((i.get('salary')))
        business.append(i.get('industryField'))
    for i in range(len(city)):
        data = {'ave_money': ave_money[i], 'HY': business[i], 'job_year': jod_year[i], 'XL': XL[i], 'zone': city[i]}
        print(data)

def main():
    cookie = get_cookie(url=goal_url)
    headers['cookie'] = cookie
    for i in range(1):
        data = {
            'first': 'true',
            'pn': f'{i+1}',
            'kd': 'python'
        }
        # allow_redirects=True, verify=False
        response = requests.post(url='https://www.lagou.com/jobs/positionAjax.json?needAddtionalResult=false',
                                 headers=headers, data=data)
        # 休眠随机时间
        sleep_time = random.uniform(0, 5)
        time.sleep(sleep_time)
        get_json(response.json())
           
python selenium 爬取网页审查元素_Python 爬虫 | selenium爬取某招聘平台

图8

我需要的数据:工资、工资经验、地区、学历、行业,构成字典直接存入MongoDB中

def get_json(content):
    a = content.get('content').get('positionResult').get('result')
    city, jod_year, experience, XL, ave_money, business = [], [], [], [], [], []
    for i in a:
        city.append(i.get('city'))
        jod_year.append(i.get('workYear'))
        XL.append(i.get('education'))
        ave_money.append((i.get('salary')))
        business.append(i.get('industryField'))
    for i in range(len(city)):
        data = {'ave_money': ave_money[i], 'HY': business[i], 'job_year': jod_year[i], 'XL': XL[i], 'zone': city[i]}
        print(data)
           

在这挖个坑,之后我会更新如何逆向出cookie的生成逻辑。