关于对51job招聘网站信息的爬取以及可视化分析(1一数据爬取)

阅读: 评论:0

关于对51job招聘网站信息的爬取以及可视化分析(1一数据爬取)

关于对51job招聘网站信息的爬取以及可视化分析(1一数据爬取)

关于对51job招聘网站信息的爬取以及可视化分析(1一数据爬取)

  • 前言
  • 一、爬虫常用库需要哪些?
  • 二、使用步骤
    • 数据爬取
  • 总结


前言

为了了解目前中国目前各职位的数量、薪资、招聘公司、岗位职责及要求,实现对某一地区人才需求分布的可视化分析,实现高校以及培训机构对人才培养的正向培养,而非做无用之功。


一、爬虫常用库需要哪些?

**

请求库:实现 HTTP 请求操作

urllib:一系列用于操作URL的功能。
requests:基于 urllib 编写的,阻塞式 HTTP 请求库,发出一个请求,一直等待服务器响应后,程序才能进行下一步处理。
selenium:自动化测试工具。一个调用浏览器的 driver,通过这个库你可以直接调用浏览器完成某些操作,比如输入验证码。
aiohttp:基于 asyncio 实现的 HTTP 框架。异步操作借助于 async/await 关键字,使用异步库进行数据抓取,可以大大提高效率。
解析库:从网页中提取信息
beautifulsoup:html 和 XML 的解析,从网页中提取信息,同时拥有强大的API和多样解析方式。
pyquery:jQuery 的 Python 实现,能够以 jQuery 的语法来操作解析 HTML 文档,易用性和解析速度都很好。
lxml:支持HTML和XML的解析,支持XPath解析方式,而且解析效率非常高。
tesserocr:一个 OCR 库,在遇到验证码(图形验证码为主)的时候,可直接用 OCR 进行识别。
存储库:Python 与数据库交互
pymysql:一个纯 Python 实现的 MySQL 客户端操作库。
pymongo:一个用于直接连接 mongodb 数据库进行查询操作的库。
redisdump:一个用于 redis 数据导入/导出的工具。基于 ruby 实现的,因此使用它,需要先安装 Ruby。
爬虫框架
Scrapy:很强大的爬虫框架,可以满足简单的页面爬取(比如可以明确获知url pattern的情况)。用这个框架可以轻松爬下来如亚马逊商品信息之类的数据。但是对于稍微复杂一点的页面,如 weibo 的页面信息,这个框架就满足不了需求了。
Crawley:高速爬取对应网站的内容,支持关系和非关系数据库,数据可以导出为 JSON、XML 等。
Portia:可视化爬取网页内容。
newspaper:提取新闻、文章以及内容分析。
python-goose:java 写的文章提取工具。
cola:一个分布式爬虫框架。项目整体设计有点糟,模块间耦合度较高。
Web 框架库
flask:轻量级的 web 服务程序,简单,易用,灵活,主要来做一些 API 服务。做代理时可能会用到。
django:一个 web 服务器框架,提供了一个完整的后台管理,引擎、接口等,使用它可做一个完整网站。

二、使用步骤

数据爬取

  1. 模拟浏览器
  2. 获取网页源代码提取数据
  3. 编写正则表达式提取详情页
  4. Xpath提取内容
  5. 写入数据

代码如下:

import re
import time
import requests
from lxml import etreeheaders = {'User-Agent': 'Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/87.0.4280.88 Safari/537.36'
}
start_time = time.time()  # 开始时间
f = open('job1.csv', 'w', encoding='utf-8')
# 写入标题
list = ['职位名称', '薪资水平', '公司名称', '公司性质', '所属行业', '职能类别', '地区', '经验要求', '学历要求', '招聘人数','发布日期','职位信息','备注']
for a in list:f.write(a)f.write(',')
f.write('n')for i in range(1, 1000):print("正在爬取第" + str(i) + "页数据")url0 = ",000000,0000,00,2,99,+,2,"url_end = ".html?lang=c&postchannel=0000&workyear=99&cotype=99&degreefrom=99&jobterm=99&companysize=99&ord_field=0&dibiaoid=0&line=&welfare="url = url0 + str(i) + url_endres = (url=url, headers=ding = 'gbk'p =  = r'job_href":(.*?),'  # 获取text文档后找到网址元素进行正则提取p1 = re.findall(ex, p)  # re.findall(匹配规则,所有内容)# )for a in range(len(p1)):url = p1[a][1:-1].replace("\", "")  # 将\替换消失page = (url=url, headers=ding = 'gbk'tree = etree.)  # 解析# etree.HTML()可以用来解析字符串格式的HTML文档对象,将传进去的字符串转变成_Element对象。作为_Element对象,可以方便的使用getparent()、remove()、xpath()等方法。#  如果想通过xpath获取html源码中的内容,就要先将html源码转换成_Element对象,然后再使用xpath()方法进行解析。# 获取岗位标题title = tree.xpath('/html/body/div[3]/div[2]/div[2]/div/div[1]/h1/text()')[0:1]if len(title) != 0:f.write(title[0])else:f.write('NULL')f.write(',')# 获取薪资水平salary = tree.xpath('/html/body/div[3]/div[2]/div[2]/div/div[1]/strong/text()')[0:1]# print(salary)if len(salary) != 0:f.write(salary[0])else:f.write('NULL')f.write(',')# 获取公司名称company = tree.xpath('/html/body/div[3]/div[2]/div[2]/div/div[1]/p[1]/a[1]/text()')[0:1]if len(company) != 0:f.write(company[0])else:f.write('NULL')f.write(',')# 获取公司性质nature = tree.xpath('/html/body/div[3]/div[2]/div[4]/div[1]/div[2]/p[1]/text()')[0:1]if len(nature) != 0:f.write(nature[0])else:f.write('NULL')f.write(',')# 获取所属行业industry = tree.xpath('/html/body/div[3]/div[2]/div[4]/div[1]/div[2]/p[3]/a/text()')[0:1]if len(industry) != 0:f.write(industry[0])else:f.write('NULL')f.write(',')# 获取职能类别category = tree.xpath('/html/body/div[3]/div[2]/div[3]/div[1]/div/div[1]/p[1]/a/text()')[0:1]# print(category)if len(category) != 0:f.write(category[0])else:f.write('NULL')f.write(',')# 获取工作地区pos = tree.xpath('/html/body/div[3]/div[2]/div[2]/div/div[1]/p[2]/@title')# print(pos)for a in pos:if a is not None:# 获取位置position = a.split(r'|')[0].replace(u'xa0', u'')  # 字符串前加u,防止中文乱码f.write(position)f.write(',')# 获取所需经验year = a.split(r'|')[1].replace(u'xa0', u'')f.write(year)f.write(',')# 获取学历要求degree = a.split(r'|')[2].replace(u'xa0', u'')f.write(degree)f.write(',')# 获取招聘人数people = a.split(r'|')[-2].replace(u'xa0', u'')f.write(people)f.write(',')# 获取发布日期day = a.split(r'|')[-1].replace(u'xa0', u'')f.write(day)f.write(',')# 获取岗位描述与任职要求lst1 = tree.xpath('//div[@class="bmsg job_msg inbox"]//text()')a = []for i in lst1:de1 = i.replace(u'xa0', u"")if len(de1) != 0:a.append(de1)work = "".join(a).replace(" ", "").replace(u"rn", ",").replace(",", ",")  # 去掉空白、换行和英文逗号f.write(work)f.write(',')if len(pos) != 0:f.write(pos[0])else:f.write('NULL')f.write('n')time.sleep(0.5)
f.close()
end_time = time.time()
print("爬取完毕!爬取时长%s秒" % (end_time - start_time))

总结

还可以用Spider、urllib、BeautifulSoup等库实现爬取,在这就不一一展示了。

本文发布于:2024-01-30 17:55:48,感谢您对本站的认可!

本文链接:https://www.4u4v.net/it/170660854921795.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:招聘网站   数据   信息   job
留言与评论(共有 0 条评论)
   
验证码:

Copyright ©2019-2022 Comsenz Inc.Powered by ©

网站地图1 网站地图2 网站地图3 网站地图4 网站地图5 网站地图6 网站地图7 网站地图8 网站地图9 网站地图10 网站地图11 网站地图12 网站地图13 网站地图14 网站地图15 网站地图16 网站地图17 网站地图18 网站地图19 网站地图20 网站地图21 网站地图22/a> 网站地图23