百度百聘企业简单信息获取

  • 背景
  • 思路
  • 完整代码
  • 代码解析
  • 改进思路
  • 免责声明

背景

现在企业工商信息都互联网化了,企查查,天眼查和启信宝就是专门做这个,但是这三位都不是省油的灯,网页相似的一匹马,且保密工作做的比谁都好,要从他们哪里拿点数据做研究还是很困难的,但是他们的数据是开放给第三方合作平台的,比如58和百度百聘,通过第三方合作平台获取企业信息或许会比直接从这三个平台获取轻松一些,这次选择百度百聘尝试。

思路

由于百度百聘时异步加载,这次选择webdriver模拟爬取,虽然慢了点,但还是根据其每个城市的企业数据量还是可行的,总体思路就是模拟人去浏览他们的网页,一页一页点进去获取相应的字段,话不多说,代码见。

完整代码

# -*- coding: utf-8 -*-
"""
project_name:百度百聘模拟抓取
@author: 帅帅de三叔
Created on Mon Dec 30 10:15:49 2019
"""
import time #导入时间管理模块
import pymysql #导入数据框模块
import requests #导入网页请求模块
from bs4 import BeautifulSoup
from selenium import webdriver #导入模拟驱动
from selenium.webdriver.chrome.options import Options
chrome_options = Options()
chrome_options.add_argument('--headless')
chrome_options.add_argument('--disable-gpu')
header={"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/79.0.3945.88 Safari/537.36","Accept":"*/*","Accept-Encoding": "gzip, deflate","Accept-Language": "zh-CN,zh;q=0.9,en;q=0.8","Connection": "keep-alive"} #构造请求头db=pymysql.connect("localhost","root","123456","baidu_recruit_employ",charset="utf8") #连接数据库
cursor=db.cursor() #创建游标cursor.execute("drop table if exists recruit_employ") #以重写的方式写入
c_sql="""create table recruit_employ(city varchar(10), #城市,总部所在地title varchar(20), #公司名称industry varchar(50), #所属行业website varchar(20), #官网salary varchar(10), #平均薪资registeredCapital varchar(40),#注册资本registration_time varchar(14), #注册时间registeration_address varchar(30), #注册地stype varchar(20))ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=UTF8MB4"""
cursor.execute(c_sql) #执行创建表操作def get_message(city,company_list,page): #定义获取信息函数   for i in range(1,len(company_list)+1):url_click="//*[@id='qz-list-box']/div["+str(i)+"]/div[1]" #构造详情页点击xpathdriver.find_element_by_xpath(url_click).click() #进入公司详情页driver.switch_to.window(driver.window_handles[1])#切换当前页面标签time.sleep(1) #进程挂起1秒print("公司详情页为:",driver.current_url) #公司详情页response=requests.get(driver.current_url,headers=header)#response.encoding=requests.utils.get_encoding_from_headers(response.headers)answer=BeautifulSoup(response.text,'lxml')city=citytry:title=answer.find("div",class_="title").get_text() #公司名称except:title=""try:industry=answer.find("span",class_="select-content ellipsis").get_text() #所属行业except:industry=""try:website=answer.findAll("div",class_="line-equal-item border-left")[0].find("span",class_="select-content").get_text() #官网 except:website=""try:salary=answer.findAll("div",class_="line-equal-item border-left")[-2].find("span",class_="select-content").get_text()  #平均薪资      except:salary=""try:registeredCapital=driver.find_element_by_xpath("/html/body/div[1]/div/div[3]/div[4]/div[1]/div/div/div[2]/div[2]/p[2]").text.split(":")[-1] #注册资本except:registeredCapital=""try:registration_time=driver.find_element_by_xpath("/html/body/div[1]/div/div[3]/div[4]/div[1]/div/div/div[2]/div[2]/p[4]").text.split(":")[-1] #注册时间except:registration_time=""try:registeration_address=driver.find_element_by_xpath("/html/body/div[1]/div/div[3]/div[4]/div[1]/div/div/div[2]/div[2]/p[6]").text.split(":")[-1] #注册地址except:registeration_address=""try:stype=driver.find_element_by_xpath("/html/body/div[1]/div/div[3]/div[4]/div[1]/div/div/div[2]/div[2]/p[5]").text.split(":")[-1] #企业类型except:stype=""print(city,title,industry,website,salary,registeredCapital,registration_time,registeration_address,stype)insert_data=("insert into recruit_employ(city,title,industry,website,salary,registeredCapital,registration_time,registeration_address,stype)""values(%s,%s,%s,%s,%s,%s,%s,%s,%s)")company_data=([city,title,industry,website,salary,registeredCapital,registration_time,registeration_address,stype])cursor.execute(insert_data,company_data)db.commit()driver.close()driver.switch_to_window(driver.window_handles[0])driver.find_element_by_xpath("/html/body/div[1]/div/div[4]/div[2]/div[1]/div[3]/span[8]").click() #点击下一页page=page+1time.sleep(1)company_list=driver.find_element_by_class_name("listitem").find_elements_by_class_name("title") #企业列表名称if __name__=="__main__":citys=["上海","北京","广州","深圳","南京","杭州","武汉"]for city in citys:url="https://zhaopin.baidu.com/firm?city={}".format(city)driver=webdriver.Chrome(executable_path="C:\Program Files (x86)\Google\Chrome\Application\chromedriver.exe") #驱动初始化options=chrome_optionsdriver.get(url) #首页driver.implicitly_wait(1)#设置隐性等待时间company_list=driver.find_element_by_class_name("listitem").find_elements_by_class_name("title") #企业列表名称page=1while company_list:page=page+1get_message(city,company_list,page)print("当前页面:",page)

代码解析

代码模拟的过程大致是先进入首页,然后查看是否有企业列表,如果有一个一个获取企业详情页,点击进去获取详情页的url, 换用requests请求或者相应字段,对于没法用requests找到的字段,用webdriver查找元素的办法找出来,在详情页找完对应字段后,然后再返回之前的企业列表页,把当前页所有企业列表都循环完,找到下一页元素点击进入下一页,执行同样操作。当翻页到最后页的时候下一页会报错,会说企业详情页列表找不到,可以尝试用try except 来消除,意味着所有页码都翻完了,程序结束。
代码中options=chrome_options表示不打开浏览器,或许会节省点时间。
一共76页,一页10家企业,一共760家企业。并不像首页说的1万6千多家企业。

改进思路

由于前面模拟爬取并不算很成功,所以回归原始的 requests请求,异步加载就异步加载,先试试再说,开始的时候还有上海的企业信息返回,后来都是北京的那几个企业信息循环返回,怀疑百度百聘加了反爬虫机制,等待破解。

# -*- coding: utf-8 -*-
"""
project_name:百度百聘
@author: 帅帅de三叔
Created on Wed Dec 25 14:04:00 2019
"""import urllib.parse
import requests #导入网页请求模块
from bs4 import BeautifulSoup #导入网页解析模块
import json #导入json
import time #导入时间模块
import pymysql #导入数据库模块
db=pymysql.connect("localhost","root","123456","baidu_recruit_employ",charset="utf8") #连接数据库
cursor=db.cursor() #创建游标
cursor.execute("drop table if exists recruit_employ1") #以重写的方式写入
c_sql="""create table recruit_employ1(city varchar(10), #城市,总部所在地industry varchar(50), #所属行业ori_fullname varchar(50), #企业名称stype varchar(30), #企业性质code varchar(16), #平均薪资registeredCapital varchar(40),#注册资本s_salary varchar(10), #平均薪资 number varchar(30), #注册号address varchar(50), registration_time varchar(14),register_office varchar(20))ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=UTF8MB4"""
cursor.execute(c_sql) #执行创建表操作
header={"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/79.0.3945.88 Safari/537.36","Accept": "*/*","Accept-Encoding": "gzip, deflate","Accept-Language": "zh-CN,zh;q=0.9,en;q=0.8","Content-Type": "application/json;charset=utf-8","Connection": "keep-alive"} #构造请求头def generate_url(city,page): #定义构造一级网页函数page=page*10url="https://zhaopin.baidu.com/api/firmasync?query=&city={}&qid=51288ea64543cc59&pcmod=1&token=FHK3YTpnXrpyYVllsdpmndmace2YXhoaT6Wmeq5aUWpl&pn={}&rn=10".format(city,page)#print(url)response=requests.get(url,headers=header).json() #发出请求并json化处理time.sleep(1) #进程挂起1秒#print(response)company_list=response["data"]["result"]["disp_data"] #企业名录if company_list:for i in range(len(company_list)):try:city=company_list[i]['city']except:city=""try:ori_fullname=company_list[i]['ori_fullname']except:ori_fullname=""try:code=company_list[i]["business"]["code"]except:code=""try:registeredCapital=company_list[i]["business"]['registered_capital'].strip().replace(" ","")except:registeredCapital=""try:s_salary=company_list[i]["s_salary"]except:s_salary=""try:number=company_list[i]["business"]["number"]except:number=""try:address=company_list[i]["business"]["address"]except:address=""try:registration_time=company_list[i]["business"]["registration_time"]except:registration_time=""try:register_office=company_list[i]["business"]["register_office"]except:register_office=""try:stype=company_list[i]["business"]["type"]except:stype=""try:industry=company_list[i]["business"]["industry"]except:industry=""print(city,industry,ori_fullname,stype,code,registeredCapital,s_salary,number,address,registration_time,register_office)insert_data=("insert into recruit_employ1(city,industry,ori_fullname,stype,code,registeredCapital,s_salary,number,address,registration_time,register_office)""values(%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s)")company_data=([city,industry,ori_fullname,stype,code,registeredCapital,s_salary,number,address,registration_time,register_office])cursor.execute(insert_data,company_data)db.commit()else:print("no data return")if __name__=="__main__":citys=["上海"]#,"北京","广州","深圳","南京","杭州","武汉"]pages=100for city in citys:city=urllib.parse.quote(city)#print(city)for page in range(0,pages):generate_url(city,page)

免责声明

Python爬虫仅为学习交流,如有冒犯,请告知删。

百度百聘企业简单信息获取相关推荐

  1. 百度百聘爬取详细分析

    这两天我一直在爬取百度百聘这个招聘网站,里面的工作还是很多的,都是从其他招聘网站上获取下来了 下面我就给大家详细分析一下这次我在百度百聘爬取时的思路和遇到的问题 和 解决办法提供大家参考: 爬取数据的 ...

  2. 百家企业信息化调查报告

                                     百家企业信息化调查报告   综述 2001年第三季度,国家经贸委对国家重点企业进行了"企业信息化水平问卷调查",从 ...

  3. 2018中国区块链百强企业第三弹 | 链塔智库

    2019年1月22日,领先的区块链数据服务商--链塔(BlockData)联合清华大学互联网产业研究院.工信部赛迪区块链研究院在清华大学经济管理学院伟伦楼举办第一届中国区块链产业经济发展年会. 会上, ...

  4. 企业如何借助百度百家号进行网络推广?

    有些中小企业的网络推广需求很简单,就是想网上搜自己的品牌关键词及产品关键词能搜到自己企业的信息,这个最简单的方法就是用百度的百家号.百家号认证蓝V之后会增加一个百家名片的展示,且会给一些流量支持,相对 ...

  5. 【熬夜整理近百份大厂面经】2022校招提前批面经总结分享(腾讯、字节、阿里、百度、京东等招聘信息+必考点+简历书写)

    整理面经镇楼 随着高考的结束,2022的校招提前批已经悄悄开始了,不管你是大四还是研三,应聘将会成为大家接下来半年乃至一年的重要任务! 接下来就结合我自身的经验以及我翻阅几百份最新面经后的一点点总结经 ...

  6. python3 爬虫 requests安装_BOSS直聘招聘信息获取之爬虫工具分析

    点击蓝色"不太灵光的程序员"关注我哟 加个"星标",每天上午 09:30,干货推送! 文中使用的组件库仅限于Python语言,由于最近收到一些同学的留言说,按照 ...

  7. 日常学习|从企查查获取企业工商信息

    这里临时快速写出来的简陋代码,能实现简单的功能 我找到了天眼查.企查查和国家企业信用信息公示系统这三个可以获取企业工商信息的网站 一开始是想要从'国家企业信用信息公示系统'入手的,可惜我对js的代码不 ...

  8. chrome driver 获取 session_BOSS直聘招聘信息获取之使用webdriver进行爬取

    点击蓝色" 不太灵光的程序员"关注我哟 加个"星标",每天上午 09:30,干货推送! 进行网页数据爬取的方式有很多,我前面使用了requests模块添加浏览器 ...

  9. 百度百家号作者昵称、ID、粉丝数量获取

    最近在练习爬虫,试了试爬取百度百家号的作者粉丝数量,文中代码纯属练习专用. import requests import re import json from urllib import parse ...

最新文章

  1. Oracle中PL/SQL的循环语句
  2. 使用 Artifactory 1分钟搭建 CocoaPod 私服
  3. Map m=new HashMap()
  4. [EffectiveC++]item41:了解隐式接口和编译期多态
  5. C++中的friend详细解析
  6. java 更新订单状态_Java 8状态更新
  7. 国内外公共CDN静态资源网站大全
  8. Sqlite优化记录:使用全文索引加快检索速度-转
  9. 对话张悦然:当年新概念作文大赛获奖者 现在怎样了
  10. 曾仕强主讲:易经的奥秘(全文讲义)
  11. spring注解原理解析
  12. 最小径集的算法_【ZZ】最小割集Stoer-Wagner算法
  13. Java实现 LeetCode 299 猜数字游戏
  14. 企业微信加密消息体_企业微信机器人怎么发消息?企业微信机器人可以定时发消息吗?...
  15. 在几何画板中如何制作圆柱的侧面展开动画_如何用几何画板做三棱柱的侧面展开动画...
  16. 【SSM+ElementUI】综合练习-Axios Mock EasyMock nodejs npm webpack vuecli restful 请求
  17. 2021最新 什么是虚拟专用服务器技术?
  18. Postgresql修正序列插件之pg_sequence_fixer
  19. 数组n个值切割成m段,保证m段中和值最小
  20. 单片机基础之ADD与ADDC的区别详解

热门文章

  1. 物联网概念的蝶变:从M2M到智慧地球
  2. F005MyBatis学习笔记-MyBatis的多表关联查询
  3. php x.509,php – 解析X509证书
  4. HDMI 收发器简化家庭影院系统设计
  5. 【Python】在字符串的头尾做文本匹配
  6. 微信号名称乱码什么情况_微信号改成什么好?
  7. 扫地机器人返充原理_全自动智能扫地机器人的工作原理分析
  8. 互联网日报 | 吉利汽车完成科创板上市辅导;华为开发者大会9月10日举行;贵州茅台整治“年份酒”乱象...
  9. R语言,直方图的制作--hist()
  10. 应用系统安全规范-自己想到和网络搜索到的点子记录整合一下