
项目介绍:该项目适合学习的时候使用,因为项目比较小,主要目的对猎聘当中的各个岗位的数据的获取和简单的分析,从多个方面分析岗位之间的关系以及薪资的差异。
采用的技术有:
python爬虫:
hadoop:hdfs存储数据
hive on spark : 进行数据分析
sqoop: 将分析的结果传输到关系型数据库当中
superset:进行数据的可视化
首先是将数据从猎聘官网当中获取:
爬取技术一栏当中的似是一个岗位对应的数据。
先获得各个岗位的url,进行跳转,在每个网页当获取有用的信息:比如:岗位,地址,薪资,公司规模,要求掌握的技术,学历要求和经验要求,最后,对这一页的数据爬取完之后,进行跳转,通过find-element-by-xpath(),来锁定到下一页的链接上,跳转到下一页再进行数据的爬取,如此往复,从而,得到所有的想要的数据。
话不多说,代码实现为:
from selenium import webdriver
from selenium.webdriver.chrome.webdriver import Options
from lxml import etree
import os
def share_brower():
chrome_options = Options()
# chrome_options.add_argument('--headless') # 来判断浏览器的前后台运行,有图形化可以更好的展现她的活动
chrome_options.add_argument('--disable-gpu')
path='C:Program Files (x86)GoogleChromeApplicationchrome.exe'
chrome_options.binary_location = path
brower = webdriver.Chrome(chrome_options=chrome_options)
return brower
def save(source, number, name1):
tree = etree.HTML(source)
position = tree.xpath('//ul/li//div[@]/div[1]/text()')
addr = tree.xpath('//ul/li//div[@]/div[2]/span[2]/text()')
salary = tree.xpath('//ul/li//div[@]/span/text()')
company = tree.xpath('//ul/li//div[@]/span/text()')
scale = tree.xpath(
'//ul/li//div[@]/div[@]/span[last()]/text()')
experience = tree.xpath('//ul/li//div[@]/span[1]/text()')
xueli = tree.xpath('//ul/li//div[@]/span[2]/text()')
keyword = tree.xpath('//ul/li//div[@]/span/text()')
mi = min(len(position), len(addr), len(salary), len(company), len(scale), len(xueli), len(experience))
with open('./date/' + name1.strip() + "/" + str(number) + '.csv', 'w', encoding='utf-8') as fs:
for l in range(mi):
new = position[l] + ',' + addr[l] + ',' + salary[l] + ',' + company[l] + ',' + scale[l]+','+experience[l]+','+xueli[l]+'tn'
fs.write(new)
fs.close()
with open('./keyword.txt', 'a', encoding='utf-8') as fs:
ne = ''
for i in keyword:
ne = ne + i + ' '
fs.write(ne)
fs.close()
base_url = 'https://www.liepin.com'
brower = share_brower()
brower.get('https://www.liepin.com/it/')
brower.implicitly_wait(3)
page = brower.page_source
tree = etree.HTML(page)
name = tree.xpath('//ul[@]/li[1]//dd/a/text()')
url = tree.xpath('//ul[@]/li[1]//dd/a/@href')
for i in range(len(name)):
if not os.path.exists('./date/'+name[i]):
os.mkdir('./date/'+name[i]) #创建文件夹
brower.get(base_url+url[i])
brower.implicitly_wait(3)
source = brower.page_source
number = 1
save(source, number, name[i])
print(name[i])
try:
for j in range(9):
element = brower.find_element_by_xpath('//div[@]//li[last()]/a')
element.click()
save(brower.page_source, number, name[i])
number += 1
except RuntimeError:
print("*"*30+"有错误,但是可以执行的哦!!")
continue
else:
print("文件已经存在")
os.rmdir('./date/'+name[i])
continue
#
# //ul[@]/li[1]//dd/a/text() 相关职业
# //ul[@]/li[1]//dd/a/@href 对应的连接 每个连接底下都有十个页面 、爬取当中的数据
# 数据的存放 总共有49个类别的技术岗位 分别放在49个问价夹底下,文件夹以对应的职业命名 底下十个文件,每个文件表示每一页的数据
# ,文件的命名方式以1-10.csv ,保存的时候中间以逗号隔开,保存当当前的路径底下,然后爬取成功之后同意上传到大数据集
# 群的本地文件夹下面
# //ul/li//div[@]/div[1]/text() 职位
# //ul/li//div[@]/div[2]/span[2]/text() 地址
# //ul/li//div[@]/span/text() 薪资
# //ul/li//div[@]/span/text() 企业
# //ul/li//div[@]/div[@]
# /span[last()]/text() 公司规模
# //ul/li//div[@]/span[1]/text() 工作经验
# //ul/li//div[@]/span[2]/text() 招聘学历要求
# //ul/li//div[@]/span/text() //用正则将数据的后序删除掉,或者在hadoop当中处理
# //div[@]//li[last()] 下一页的标签 循环九次
brower.quit()
# 最后退出
最后结果为:
每一层和里面的数据保存形式,都如上所述,后序通过简单的mapreduce实现数据的处理,上传至hdfs当中,下期继续。。。。
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)