使用Python爬取51job招聘网的数据

使用Python爬取51job招聘网的数据

    • 进行网站分析
    • 获取职位信息
    • 存储信息
    • 最终代码

进行网站分析

进入https://www.51job.com/这个网站
使用Python爬取51job招聘网的数据_第1张图片
我在这就以python为例搜索职位跳转到这个页面
使用Python爬取51job招聘网的数据_第2张图片

按F12进行查看每个职位的信息在哪个包中
使用Python爬取51job招聘网的数据_第3张图片
我们点进这个包中搜索
使用Python爬取51job招聘网的数据_第4张图片
发现这组数据在Script标签中,类似于json数据,同时发现其链接的URL的键值为job_href我们可以写一个正则表达式来获取这些url方便后续获取信息,同时我们也发现这些url其实是被简单修改过的,我们需要用re.sub处理一下

real_url=[]
url = re.findall('"job_href":"(.*?)"',page_text,re.S)#职位详情URL
for each in url: #把url里的'\\/'改为'/',此时为真正的URL
    real_url.append(re.sub(r'\\/','/',each))

获取职位信息

我们已经找到了每一个职位对应的URL,于是我们遍历这个URL列表,爬取每一个职位对应的信息。

我们需要把公司名称,招聘职位,岗位信息,地址和公司简介爬取到
使用Python爬取51job招聘网的数据_第5张图片

对页面里的HTML源码进行xpath解析,可以获取到上文的信息,要使用try…except…对异常数据进行处理

存储信息

我们可以使用pandas模块对爬到的数据进行存储,同时我们发现换页的时候只是其中一个参数发生过改变,我们也可以写一个循环来爬取多页

最终代码

import requests
import lxml.etree
import os
import time
import re
import pandas as pd
xiangxi = [] #详细信息
mingcheng = [] #公司名称
zhiwei = [] #职位
xinxi = [] #岗位信息
dizhi = [] #公司地址
jianjie = [] #公司简介
gongzi = [] #工资
headers = {
     
    'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/81.0.4044.92 Safari/537.36'
}
for page in range(1,11): ##11为爬取前10页,这个数据可以更改
    url = 'https://search.51job.com/list/030200,000000,0000,00,9,99,python,2,'+str(page)+'.html?lang=c&postchannel=0000&workyear=99&cotype=99°reefrom=99&jobterm=99&companysize=99&ord_field='
    response = requests.get(url = url,headers = headers) #获取数据
    response.encoding='gbk' #解码
    page_text = response.text
    import re
    url = re.findall('"job_href":"(.*?)"',page_text,re.S)
    real_url = []
    for each in url:
        real_url.append(re.sub(r'\\/','/',each))
    for each in real_url:
        response = requests.get(url = each,headers = headers)
        response.encoding='gbk'
        page_text2 = response.text
        tree = lxml.etree.HTML(page_text2)
        try:
            xiangxi.append(" ".join('%s' %id for id in tree.xpath('//p[@class="msg ltype"]//text()')))
        except IndexError:
            xiangxi.append("没找到相关内容")
        try:
            mingcheng.append(tree.xpath('//p[@class="cname"]/a//text()')[0]) #公司名称
        except IndexError:
            mingcheng.append("没找到相关内容")
        try:
            zhiwei.append(tree.xpath('//div[@class="cn"]/h1//text()')[0])#招聘职位
        except IndexError:
            zhiwei.append("没找到相关内容")
        try:
            xinxi.append(" ".join('%s' %id for id in tree.xpath('//div[@class="bmsg job_msg inbox"]/p//text()'))) #岗位信息
        except IndexError:
            xinxi.append("没找到相关内容")
        try:
            dizhi.append(tree.xpath('//div[@class="bmsg inbox"]/p[@class="fp"]//text()')[1]) #地址
        except IndexError:
            dizhi.append("没找到相关内容")
        try:
            jianjie.append(" ".join('%s' %id for id in tree.xpath('//div[@class="tmsg inbox"]//text()'))) #公司简介
        except IndexError:
            jianjie.append("没找到相关内容")
        try:
            gongzi.append(tree.xpath('//div[@class="cn"]/strong//text()')[0])#工资
        except IndexError:
            gongzi.append("没找到相关内容")
dic1 = {
     '公司名称': mingcheng,
    '招聘职位':zhiwei,
    '工资':gongzi,
    '详细信息':xiangxi,
    '地址':dizhi,
    '岗位信息':xinxi,
    '公司简介':jianjie,
   }
df = pd.DataFrame(dic1)
df.to_excel('招聘信息.xlsx', index=False)

你可能感兴趣的:(爬虫,python,web,python,html,xpath)