做这个事情的目的是,想看下全国和江浙沪宁,招聘ceph、块存储相关职位的公司有哪些,再分析下其中哪些公司可以尝试联系起来,看看是否有兴趣用curve。
一开始想着用requests或者更专业的scrapy写爬虫脚本,但是试了requests库之后,发现啥也抓不到,被网站反爬虫了。。。
只能试着用selenium来弄,好几年没用它了,有点生了,折腾了大半天才算能凑合用。
selenium需要自己pip安装,chromedriver需要自己下载:https://sites.google.com/chromium.org/driver/home
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 |
import time from selenium import webdriver from selenium.webdriver.common.by import By # 职位关键词 JOB = "块存储" # 保存的文件名 file_name = "companys-%s.csv" % JOB csv = open(file_name, 'w+') csv.write('职位名称,公司名称,公司类型,融资情况,公司规模\n') # 标题栏 # Create an instance of Chrome WebDriver browser = webdriver.Chrome('./chromedriver') ''' 地区编码: 全国:410 上海:020 杭州:070020 苏州:060080 南京:060020 ''' CITYS = ["410", "020", "070020", "060080", "060020"] PAGES = 10 # 最多抓取几页内容,貌似猎聘默认最多10页 WAIT_PAGE_SEC = 5 # 等待网页刷新完成时间,其实还有一个函数可以用来检查页面是否刷新完毕,懒得改了 for CITY in CITYS: URL = 'https://www.liepin.com/zhaopin/?city=%s&dq=%s&pubTime=¤tPage=0&pageSize=40&key=%s' % (CITY, CITY, JOB) browser.get(URL) count = 0 while (count < PAGES): count += 1 time.sleep(WAIT_PAGE_SEC) job_list = browser.find_element(By.CLASS_NAME, "job-list-box") job_titles = job_list.find_elements(By.CLASS_NAME, "job-title-box") # 职位标题 titles = [j.text.replace('\n', '') for j in job_titles] com_info_box = job_list.find_elements(By.CLASS_NAME, "job-company-info-box") # 公司信息列表 i = 0 for com in com_info_box: # 遍历公司列表 com_name = com.find_element(By.CLASS_NAME, "company-name").text # 公司名称 com_tags = com.find_elements(By.CLASS_NAME, "company-tags-box") # 公司标签 tags = com_tags[0].find_elements(By.TAG_NAME, 'span') com_tag = [tag.text for tag in tags] if len(com_tag) == 3: # 有无融资情况标签 line = ','.join(com_tag) else: line = ', ,'.join(com_tag) line = titles[i] + ',' + com_name + ',' + line + '\n' # 一条完整的公司信息 i += 1 csv.write(line) # 保存到文件 button = browser.find_elements(By.CLASS_NAME, "ant-pagination-item-link")[-1] if button.is_enabled(): # 是否可以点下一页,也就是是否职位已经展示完了 button.click() else: print("该区域所有职位已遍历完!\n") break csv.close() browser.quit() print("正常结束!\n") |
输出结果大概长这样:
1 2 3 4 5 6 |
职位名称,公司名称,公司类型,融资情况,公司规模 Ceph专家【北京-海淀区】,浪潮云服务,IT服务, ,2000-5000人 ceph运维工程师【深圳】,云天畅想,云计算/大数据,C轮,100-499人 ceph存储研发工程师/专家【上海】,头部云厂商,互联网/电商, ,5000-10000人 Ceph研发工程师【深圳】,中盛瑞达,计算机软件,融资未公开,100-499人 ceph分布式存储研发工程师【深圳】,云天畅想,云计算/大数据,C轮,100-499人 |