【Python爬虫】requests+BeautifulSoup4+MongoDB 爬取51job招聘信息(最新)

新手训练 51job 网站完整的Python爬虫程序


前言

今天在学Python爬虫的书,看到有个爬取51job招聘网的信息实战,使用的是requests + BeautifulSoup4,但是代码才写了一半就发现出不来结果。

之前也有学过一些爬虫,本着学习的精神,我打算自己实现一下。


一、网站解析

1.分析网站加载形式

使用Chrome打开51job网站首页,点击 鼠标右键 -> 检查 查看网页的HTML和请求头等信息,如下图所示:

使用“检查”功能查看网页源码信息
接下来点击Chrome的 设置 -> 隐私设置和安全性 -> 网站设置 -> 内容 -> JavaScript 将JavaScript关闭,如图所示:
关闭浏览器的JavaScript
回去51job网站,随便点击一个城市和职业(或者刷新),发现内容一直载入不出来,如图所示:
关闭JavaScript后加载不出网页
很明显,网页内容是使用JavaScript渲染的,因此加载不出内容。

现在重新打开JavaScript,刷新页面,页面很快就恢复了。

这时候应该考虑使用Selenium模拟爬取,但是这样爬取大量数据的时候很慢不说,也达不到学习的目的。

于是,我开始分析网站,通过搜索,找到document文件中找到了包含本页所有招聘信息的script标签,并发现它处在所有javascript标签中的最后一个,如图:
最后一个javascript标签


2.分析网站的url

分析url是爬虫必须的步骤,通过分析url能够实现翻页等功能。

现在来分析一下,将几种不同城市、关键字、页数的url放在一起,找规律,如下图:
分析url
很明显可以看出:城市不同,前面的编码就不同;页数不同,.html前的数字也会跟着变;关键字不同,中间的一堆编码也会变。

那么问题来了,这个城市的编码怎么获取呢?

如果一个个试,肯定不现实,考虑到刚才关闭JavaScript的时候城市的选项没有载入,因此去搜索java文件才是正解,于是按下 Crtl + F 键搜索一个城市,例如搜索北京,多次搜索后,如图所示:
累skr人
得到这个link就可以进行数据清洗了!

但是!!

如果在51job首页进行搜索,就可以得到一个仅有城市编码的js文件!!

仅有城市编码的js文件
这大大简化了数据清洗的步骤!

最后,我们来验证一下规律,比如我要搜索在广州有关java的招聘信息的第三页,按照规律应该输入以下url:

https://search.51job.com/list/030200,000000,0000,00,9,99,java,2,3.html

成功了!
成功了!


二、代码实现

1.引入库

通过分析后,引入以下库:

import requests
from bs4 import BeautifulSoup
import time
import re
import json
import random
import pandas as pd

2.解析城市编码

代码如下:

def get_city_code(city_name):
    """
    获取城市编码
    :param city_name: 城市名
    :return: 城市编码
    """
    # 51job地区列表地址
    url = 'https://js.51jobcdn.com/in/js/2016/layer/area_array_c.js'
    r = requests.get(url)
    html = r.content.decode('gbk')  # 编码为GBK格式,要不然部分地名会出现乱码
    # 用字符串表达式去除多余部分
    city_area_dict = eval(html.split('=')[1].split(';')[0])
    # 将得到的字典键值互换,使得地名在前,编号在后
    city_area_dict = {
   v: k for k, v in city_area_dict.items()}
    # print(city_area_dict)

    return city_area_dict[city_name]

3.获取数据

这一步是代码的核心,包括数据解析、数据清洗和数据存储:

3.1 解析数据

def get_data(url):
    """
    获取数据的json列表
    :param url: 搜索网页的url
    :return: 页面职位全部信息的js文件
    """
    # 获取搜索页html
    headers = {
   
        'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) \
                      AppleWebKit/537.36 (KHTML, like Gecko) \
                      Chrome/
  • 1
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值