智联招聘获取python岗位的数据
import requests
from lxml import html
import time
import pandas as pd
from sqlalchemy import create_engine
import traceback
from fake_useragent import UserAgent as UA #使用其random方法获取随机ua
class ZhaoPinSpider:
def __init__(self):
#http://sou.zhaopin.com/jobs/searchresult.ashx?jl=%E5%8C%97%E4%BA%AC&kw=python&sm=0&sg=466cc5c88f044d419cef734bd8713830&p=90
self.url=r"http://sou.zhaopin.com/jobs/searchresult.ashx?jl=%E5%8C%97%E4%BA%AC&kw=python&sm=0&sg=466cc5c88f044d419cef734bd8713830&p={}"
self.headers = {'Accept': 'text/html, application/xhtml+xml, image/jxr, */*',
'Accept - Encoding': 'gzip, deflate',
'Accept-Language': 'zh-Hans-CN, zh-Hans; q=0.5',
'Connection': 'Keep-Alive',
'User-Agent': UA().random}
#职位名称
self.Position_Title=[]
# url
self.url_list = []
#反馈率
self.Feedback=[]
#公司名称
self.Company_Name=[]
#职位月薪
self.Monthly_Salary =[]
#工作地点
self.Working_Place =[]
#发布日期
self.Published_Date=[] self.Position_Title_Key = None
self.Feedback_Key = None
self.Company_Name_Key = None
self.Monthly_Salary_Key = None
self.Working_Place_Key = None
self.Published_Date_Key = None
self.url_key="URL"
self.content_dic={}
self.allinfo_dic = {}
#-------------------------------
self.job_name_list = []
self.corporate_name_list = []
self.benefits_list = []
self.monthly_salary_list = []
self.job_place_list = []
self.published_date_list = []
self.job_nature_list = []
self.job_experience_list = []
self.qualifications_list = []
self.need_worker_num_list = []
self.job_type_list = []
self.job_description_list = []
self.company_introduction_list = []
self.company_scale_list = []
self.company_nature_list = []
self.company_industry_list = []
self.company_url_list = []
self.company_address_list = [] def start(self):
try:
for i in range(1,91):
req = requests.Session()
data = req.get(self.url.format(i), headers=self.headers).text
self.get_info(data,req) except Exception as e:
print(e)
def get_info(self,source,req):
etree=html.fromstring(source)
# # 职位名称
# self.Position_Title = []
# # 反馈率
# self.Feedback = []
# # 公司名称
# self.Company_Name = []
# # 职位月薪
# self.Monthly_Salary = []
# # 工作地点
# self.Working_Place = []
# # 发布日期
# self.Published_Date = []
TablesNodes=etree.xpath("//div[@class='newlist_list_content']//table")
max=len(TablesNodes)
if TablesNodes:
index=0
for TablesNode in TablesNodes:
if index!=0:
Nodes=TablesNode.xpath(".//tr[1]/td")
TitleNodes=Nodes[0]
url_nodes=TitleNodes.xpath("./div/a[@par]/@href")[0]
# FeedbackNodes=Nodes[1]
# CompanyNodes =Nodes[2]
# SalaryNodes =Nodes[3]
# PlaceNodes =Nodes[4]
# DateNodes = Nodes[5]
# self.Position_Title.append(TitleNodes.text_content().strip())
# FeedbackStr=FeedbackNodes.text_content().strip()
# self.Feedback.append(FeedbackStr if FeedbackStr else "0%")
# self.Company_Name.append(CompanyNodes.text_content().strip())
# self.Monthly_Salary.append(SalaryNodes.text_content().strip())
# self.Working_Place.append( PlaceNodes.text_content().strip())
# self.Published_Date.append( DateNodes.text_content().strip())
if "xiaoyuan" not in url_nodes:
print(url_nodes)
self.get_next_page(url_nodes, req)
self.allinfo_dic.setdefault("job_name", self.job_name_list)
self.allinfo_dic.setdefault("corporate_name", self.corporate_name_list)
self.allinfo_dic.setdefault("benefits", self.benefits_list)
self.allinfo_dic.setdefault("monthly_salary", self.monthly_salary_list)
self.allinfo_dic.setdefault("job_place", self.job_place_list)
self.allinfo_dic.setdefault("published_date", self.published_date_list)
self.allinfo_dic.setdefault("job_nature", self.job_nature_list)
self.allinfo_dic.setdefault("job_experience", self.job_experience_list)
self.allinfo_dic.setdefault("qualifications", self.qualifications_list)
self.allinfo_dic.setdefault("need_worker_num", self.need_worker_num_list)
self.allinfo_dic.setdefault("job_type", self.job_type_list)
self.allinfo_dic.setdefault("job_description", self.job_description_list)
self.allinfo_dic.setdefault("company_introduction", self.company_introduction_list)
self.allinfo_dic.setdefault("company_scale", self.company_scale_list)
self.allinfo_dic.setdefault("company_nature", self.company_nature_list)
self.allinfo_dic.setdefault("company_industry", self.company_industry_list)
self.allinfo_dic.setdefault("company_url", self.company_url_list)
self.allinfo_dic.setdefault("company_address", self.company_address_list)
self.save_Data()
self.allinfo_dic.clear()
self.job_name_list.clear()
self.corporate_name_list.clear()
self.benefits_list.clear()
self.monthly_salary_list.clear()
self.job_place_list.clear()
self.published_date_list.clear()
self.job_nature_list.clear()
self.job_experience_list.clear()
self.qualifications_list.clear()
self.need_worker_num_list.clear()
self.job_type_list.clear()
self.job_description_list.clear()
self.company_introduction_list.clear()
self.company_scale_list.clear()
self.company_nature_list.clear()
self.company_industry_list.clear()
self.company_url_list.clear()
self.company_address_list.clear()
else:
# Nodes = TablesNode.xpath(".//tr[1]/th")
# TitleNodes = Nodes[0]
# FeedbackNodes =Nodes[1]
# CompanyNodes =Nodes[2]
# SalaryNodes = Nodes[3]
# PlaceNodes =Nodes[4]
# DateNodes =Nodes[5]
# self.Position_Title_Key=TitleNodes.text_content().strip()
# self.Feedback_Key=FeedbackNodes.text_content().strip()
# self.Company_Name_Key=CompanyNodes.text_content().strip()
# self.Monthly_Salary_Key=SalaryNodes.text_content().strip()
# self.Working_Place_Key=PlaceNodes.text_content().strip()
# self.Published_Date_Key=DateNodes.text_content().strip()
index = index+1
def save_Data(self):
df=pd.DataFrame(self.allinfo_dic)
df.to_csv("zhaopininfo.csv")
df.to_csv("zhaopininfo.xlsx")
pd.io.sql.to_sql(df,"all_results",schema="zhaopin",con=self.get_engine(),if_exists="append",index=False)
def get_engine(self):
conn=create_engine("mysql+pymysql://root:Aa1234@localhost:3306/zhaopin?charset=utf8mb4")
return conn def get_next_page(self, nexturl,req):
data=req.get(nexturl).text
self.get_page_info(data) def get_page_info(self,htmlstr):
try:
root=html.fromstring(htmlstr)
job_name=root.xpath("//div[@class='top-fixed-box' and not(@id)]//div[@class='inner-left fl']/h1/text()")[0]
print(job_name)
corporate_name=root.xpath("//div[@class='top-fixed-box' and not(@id)]//div[@class='inner-left fl']/h2/a/text()")[0]
benefits=root.xpath("//div[@class='top-fixed-box' and not(@id)]//div[@class='inner-left fl']/div[@class='welfare-tab-box']")[0].text_content()
#概要
Nodes = root.xpath("//div[@class='terminalpage-left']//ul/li/strong")
monthly_salary=Nodes[0].text_content().strip()
job_place=Nodes[1].text_content().strip()
published_date=Nodes[2].text_content().strip()
job_nature=Nodes[3].text_content().strip()
job_experience=Nodes[4].text_content().strip()
qualifications=Nodes[5].text_content().strip()
need_worker_num=Nodes[6].text_content().strip()
job_type=Nodes[7].text_content().strip() job_description=root.xpath("//div[@class='tab-inner-cont']")[0].text_content().strip()
company_introduction=root.xpath("//div[@class='tab-inner-cont']")[1].text_content().strip() #
companyNodes = root.xpath("//ul[@class='terminal-ul clearfix terminal-company mt20']/li/strong")
company_scale=companyNodes[0].text_content().strip()
company_nature=companyNodes[1].text_content().strip()
company_industry=companyNodes[2].text_content().strip()
company_url=companyNodes[3].text_content().strip()
company_address=None
try:
company_address=companyNodes[4].text_content().strip()
except:
company_address="地址未填写"
self.job_name_list.append(job_name)
self.corporate_name_list.append(corporate_name)
self.benefits_list.append(benefits)
self.monthly_salary_list.append(monthly_salary)
self.job_place_list.append(job_place)
self.published_date_list.append(published_date)
self.job_nature_list.append(job_nature)
self.job_experience_list.append(job_experience)
self.qualifications_list.append(qualifications)
self.need_worker_num_list.append(need_worker_num)
self.job_type_list.append(job_type)
self.job_description_list.append(job_description)
self.company_introduction_list.append(company_introduction)
self.company_scale_list.append(company_scale)
self.company_nature_list.append(company_nature)
self.company_industry_list.append(company_industry)
self.company_url_list.append(company_url)
self.company_address_list.append(company_address)
except:
print(traceback.print_exc()) if __name__=="__main__":
ZhaoPinSpider().start()
智联招聘获取python岗位的数据的更多相关文章
- 智联招聘的python岗位数据结巴分词(二)
上次获取第一次分词之后的内容了 但是数据数据量太大了 ,这时候有个模块就派上用场了collections模块的Counter类 Counter类:为hashable对象计数,是字典的子类. 然后使用m ...
- 智联招聘的python岗位数据结巴分词(一)
如何获取数据点击这里 下载之后的文件名为:all_results.csv 数据样式大概这样.然后下面我分析的是工作要求 也就是那边的绿框那一列. import csv import os impor ...
- 智联招聘的python岗位数据词云制作
# 根据传入的背景图片路径和词频字典.字体文件,生成指定名称的词云图片 def generate_word_cloud(img_bg_path, top_words_with_freq, font_p ...
- 用python抓取智联招聘信息并存入excel
用python抓取智联招聘信息并存入excel tags:python 智联招聘导出excel 引言:前一阵子是人们俗称的金三银四,跳槽的小朋友很多,我觉得每个人都应该给自己做一下规划,根据自己的进步 ...
- python爬取智联招聘职位信息(多进程)
测试了下,采用单进程爬取5000条数据大概需要22分钟,速度太慢了点.我们把脚本改进下,采用多进程. 首先获取所有要爬取的URL,在这里不建议使用集合,字典或列表的数据类型来保存这些URL,因为数据量 ...
- python爬取智联招聘职位信息(单进程)
我们先通过百度搜索智联招聘,进入智联招聘官网,一看,傻眼了,需要登录才能查看招聘信息 没办法,用账号登录进去,登录后的网页如下: 输入职位名称点击搜索,显示如下网页: 把这个URL:https://s ...
- Python+selenium爬取智联招聘的职位信息
整个爬虫是基于selenium和Python来运行的,运行需要的包 mysql,matplotlib,selenium 需要安装selenium火狐浏览器驱动,百度的搜寻. 整个爬虫是模块化组织的,不 ...
- 用生产者消费模型爬取智联招聘python岗位信息
爬取python岗位智联招聘 这里爬取北京地区岗位招聘python岗位,并存入EXECEL文件内,代码如下: import json import xlwt import requests from ...
- 用Python爬取智联招聘信息做职业规划
上学期在实验室发表时写了一个爬取智联招牌信息的爬虫. 操作流程大致分为:信息爬取——数据结构化——存入数据库——所需技能等分词统计——数据可视化 1.数据爬取 job = "通信工程师&qu ...
随机推荐
- Struts2(三.用户登录状态显示及Struts2标签)
1.编写main.jsp /WebContent/main.jsp 之前用户登录时已把用户存入session <%@ page language="java" content ...
- (原创)不过如此的 DFS 深度优先遍历
DFS 深度优先遍历 DFS算法用于遍历图结构,旨在遍历每一个结点,顾名思义,这种方法把遍历的重点放在深度上,什么意思呢?就是在访问过的结点做标记的前提下,一条路走到天黑,我们都知道当每一个结点都有很 ...
- 剑指offer-合并两个排序链表16
题目描述 输入两个单调递增的链表,输出两个链表合成后的链表,当然我们需要合成后的链表满足单调不减规则. class Solution: # 返回合并后列表 def Merge(self, pHead1 ...
- Linux nohup 后台运行命令
有一些爬虫的程序需要在后台运行,所以简单总结了一下nohup 的一些用法 基本命令:nohup command $; 运行之后出现nohup: ignoring input and appendin ...
- 软工实践 - 第二十四次作业 Beta 冲刺(2/7)
队名:起床一起肝活队 组长博客:https://www.cnblogs.com/dawnduck/p/10105380.html 作业博客:班级博客本次作业的链接 组员情况 组员1(队长):白晨曦 过 ...
- ios UI自动化测试学习笔记
一.一些注意事项: 1.做自动化测试时注意如果是真机话首先要设置不锁屏. 2.自动化测试过程中如果程序后台或崩溃了.脚本运行将会暂停,直到程序再次回到前台. 3.必须明确指定关闭自动测试,测试完成或中 ...
- Apache服务器的Options 的 Indexes FollowSymLinks详解
禁止显示Apache目录列表 - Indexes FollowSymLinks 如何修改目录的配置以禁止显示 Apache 目录列表. 缺省情况下如果你在浏览器输入地址: http://localho ...
- Map.Entry遍历Map
Map.entry是Java中的一个接口.每一个Map.entry代表一个map对象. 可以通过 Map是java中的接口,Map.Entry是Map的一个内部接口,它表示map中的一个实体(及一个k ...
- 更新协同开发工具SVN的链接的服务器地址
公司内的协同开发工具使用的SVN,因为换了个服务器需要重置SVN地址,一下子有点措手不及. 研究了下SVN的操作菜单,发现有一个功能“重新定位”,应该就是我要找的了,试了一下果真没错,记录下 第一步: ...
- python3初识selenium
第一步:安装与配置 1.电脑上需要有火狐浏览器(默认安装在C:\Program Files (x86)\Mozilla Firefox目录下). 2.使用pip install selenium安装好 ...