数据分析之前程无忧(一)

这个是我们要爬取的网站:前程无忧

前程无忧的网站是一个动态网站来的,单纯去抓取是无法抓取的,所以我们得找到他的接口,打开网站按f12

选择network选项卡
在这里插入图片描述

在这里插入图片描述

显然这个就是我们需要的找到的接口了

根据他给出来的URL接口https://search.51job.com/list/000000,000000,0000,00,9,99,%25E5%25AF%25BC%25E6%25B8%25B8,2,1.html?lang=c&postchannel=0000&workyear=99&cotype=99&degreefrom=99&jobterm=99&companysize=99&ord_field=0&dibiaoid=0&line=&welfare=

其中1是指页数,然后就根据他有多少页数就写一个for循环来进行叠加就好了

    for i in tqdm(range(1,2,1)):
        url = "https://search.51job.com/list/000000,000000,0000,00,9,99,%25E6%2599%25AF%25E5%258C%25BA%25E8%25AE%25B2%25E8%25A7%25A3%25E5%2591%2598,2,{}.html?lang=c&postchannel=0000&workyear=99&cotype=99&degreefrom=99&jobterm=99&companysize=99&ord_field=0&dibiaoid=0&line=&welfare=".format(i)
    

然后匹配到的内容就是我们需要获取到的数据,这里可以用json也可以用正则把代码打印下来,这里本人推荐最好是正则,有时候json容易出错或者格式稍微有一点不一样,数据就容易出错,所以正则好一点

	#招聘企业名称
    company_names = re.compile('"company_name":"(.*?)",',re.S|re.I)
    company_name = company_names.findall(content)
    #招聘企业规模
    companysize_texts = re.compile('"companysize_text":"(.*?)",', re.S | re.I)
    companysize_text = companysize_texts.findall(content)
    #招聘企业性质
    companytype_texts = re.compile('"companytype_text":"(.*?)",', re.S | re.I)
    companytype_text = companytype_texts.findall(content)
    #招聘工作地区
    workarea_texts = re.compile('"workarea_text":"(.*?)",', re.S | re.I)
    workarea_text = workarea_texts.findall(content)
    #招聘职位名称
    job_names = re.compile('"job_name":"(.*?)",', re.S | re.I)
    job_name = job_names.findall(content)
    #招聘岗位薪资
    providesalary_texts = re.compile('"providesalary_text":"(.*?)",', re.S | re.I)
    providesalary_text = providesalary_texts.findall(content)
    job_hrefs = re.compile('"job_href":"(.*?)",', re.S | re.I)
    job_href = job_hrefs.findall(content)

    JobDescribe = []
    providesalary = []

这里有一点有注意,因为获取到的详细页面的时候,每个URL都需要改一下,这也是网页反爬虫的一个手段

    for i in job_href:
        job_url = i.replace("\\","")
        html = session.get(job_url)
        html.encoding = "gbk"
        content = html.text
        dom_test = etree.HTML(content)
        job_describe = dom_test.xpath('//div[@class="tBorderTop_box"]//div[@class="bmsg job_msg inbox"]/p/text()')
        JobDescribe.append(job_describe)

进去后,我们再用xpath语法来获取详细页面的具体内容,并且把它们全部打印出来

最后用pandas

把获取到的全部内容按顺序打印到csv文件里面,最好设置一个时间值,防止被系统检测出来,反正也不缺那点时间

df = pd.DataFrame()
    df["企业名称"] = company_name
    df["企业规模"] = companysize_text
    df["企业性质"] = companytype_text
    df["工作地区"] = workarea_text
    df["职位名称"] = job_name
    df["岗位薪资"] = providesalary
    df["岗位描述"] = JobDescribe
    try:
        df.to_csv("前程无忧.csv", mode="a+", header=None, index=None, encoding="gbk")
        print("写入成功")
    except:
        print("当页数据写入失败")
    time.sleep(1)

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传在这里插入图片描述

这里就是全部思路了,代码的话,可以去我的GitHub账户上面把源代码下载下来,如果对你有帮助的话,不嫌麻烦,可以在我的GitHub点一下start,你的支持是我更新的动力

这里就是全部思路了,代码的话,可以去我的GitHub账户上面把源代码下载下来,如果对你有帮助的话,不嫌麻烦,可以在我的GitHub点一下start,你的支持是我更新的动力

前程无忧源代码
数据分析之前程无忧(一)

数据分析之大街网(二)

数据分析之拉勾网(三)

数据分析之数据清洗(四)

Logo

魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。

更多推荐