过年了,爬爬看python需要什么技能才能有备无患。
大体思路:
- 爬所需信息
- 爬一爬详情页做个可视化词云,看看所需节能
- 做一做数据可视化
所需库:
- csv,保存数据用的
- selenium,模拟真人访问网站,因为requests很容易被反爬
- parsel和requests,可以尝试爬详情页
- random,随机休眠用的
- time,时间模块儿
翻页爬取python岗位信息代码:
1 from selenium import webdriver 2 from selenium.webdriver.common.by import By 3 from selenium.webdriver.support import expected_conditions as EC 4 from selenium.webdriver.support.ui import WebDriverWait 5 import csv 6 import time 7 import random 8 import requests 9 import parsel 10 11 f = open('boss.csv', mode='a', encoding='utf-8-sig', newline='') 12 csvWriter = csv.DictWriter(f, fieldnames=[ 13 '标题', 14 '地区', 15 '薪资', 16 '经验', 17 '公司名', 18 '公司领域', 19 '福利', 20 '公司规模', 21 '详情页', 22 # '所需技能', 23 ]) 24 csvWriter.writeheader() # 写入头 25 26 url = 'https://www.zhipin.com/c100010000/?query=python&ka=sel-city-100010000' 27 driver = webdriver.Chrome() 28 driver.get(url=url) 29 driver.implicitly_wait(10) 30 driver.maximize_window() # 最大化窗口 31 # lis = driver.find_elements_by_css_selector('.job-list ul li') 32 33 def get_job_details(): 34 lis = driver.find_elements(By.CSS_SELECTOR, '.job-list ul li') 35 for li in lis: 36 title = li.find_element(By.CSS_SELECTOR, '.job-name a').text # 标题 37 area = li.find_element(By.CSS_SELECTOR, '.job-area').text # 地区 38 salary = li.find_element(By.CSS_SELECTOR, '.job-limit .red').text # 薪资 39 experience = li.find_element(By.CSS_SELECTOR, '.job-limit p').text # 工作经验 40 companyName = li.find_element(By.CSS_SELECTOR, '.company-text h3 a').text # 公司名 41 companyStyle = li.find_element(By.CSS_SELECTOR, '.company-text p a').text # 公司领域 42 welfare = li.find_element(By.CSS_SELECTOR, '.info-desc').text # 公司福利 43 peopleInclude = li.find_element(By.CSS_SELECTOR, '.company-text p em').text # 公司规模 44 detailPage = li.find_element(By.CSS_SELECTOR, '.job-name a').get_attribute('href') # 详情页 45 # skillsNeed = get_skills_desc(desc_url=detailPage) # 加载窗口 46 print(title, area, salary, experience, companyName, companyStyle, peopleInclude, detailPage, skillsNeed, sep=' | ') 47 dit = { 48 '标题': title, 49 '地区': area, 50 '薪资': salary, 51 '经验': experience, 52 '公司名': companyName, 53 '公司领域': companyStyle, 54 '福利': welfare, 55 '公司规模': peopleInclude, 56 '详情页': detailPage, 57 # '所需技能': skillsNeed, 58 } 59 csvWriter.writerow(dit) # 逐行写入 60 61 # def get_skills_desc(desc_url): 62 # # 获取详情页所需技能的函数 63 # # 加载另一个窗口 64 # js = 'window.open()' 65 # driver.execute_script(js) # 打开新窗口 66 # driver.switch_to.window(window_name=driver.window_handles[-1]) # 切换到刚打开的窗口 67 # # 开始加载url 68 # driver.get(url=desc_url) # 加载详情页url 69 # driver.implicitly_wait(10) # 等待网页加载完成 70 # skills_need = driver.find_element(By.CSS_SELECTOR, '.text') # 直接查找描述字段 71 # return skills_need 72 73 for page in range(1, 100 + 1): 74 print(f'------------------------正在爬取第{page}页内容----------------------------') 75 time.sleep(random.uniform(2,5)) 76 get_job_details() # 获取信息 77 next_button = driver.find_element(By.CSS_SELECTOR, '.page .next') 78 if next_button: # 如果找到,就表示有下一页 79 next_button.click() # 点击下一页 80 else: 81 print(f'已经没有了! 第{page}已经是最后一页!') 82 83 driver.quit() # 退出浏览器
爬虫代码本来想把详情页都爬了,一口气吃成胖子,发现有错误,因为详情页的内容只需要做词云(展示python岗位所需的技能)。所以分开爬,不注重过程,只注重结果。
详情页爬虫代码:
更多文章请关注《万象专栏》
转载请注明出处:https://www.wanxiangsucai.com/read/cv72340