‘’’
    作业:2022-4-16
    目标网站:https://www.zhipin.com/changsha/?sid=sem_pz_bdpc_dasou_title
    需求:
    1)爬取前5页的Boss直聘里面的职位名称,公司地址,薪资,公司名称
    2)利用selenium完成
    3)保存到csv当中
    ‘’’

    1. from selenium import webdriver
    2. import csv
    3. from selenium.webdriver.common.by import By
    4. from selenium.webdriver.common.keys import Keys
    5. import time
    6. driver = webdriver.Chrome()
    7. driver.get('https://www.zhipin.com/changsha/?sid=sem_pz_bdpc_dasou_title')
    8. driver.find_element(By.NAME, 'query').send_keys("python爬虫")
    9. driver.find_element(By.NAME, 'query').send_keys(Keys.ENTER) # 在输入框那里按回车
    10. data_list = [] # 保存全部数据
    11. for i in range(1, 6): # 控制爬取的页数
    12. driver.execute_script('window.scrollTo(0, document.body.scrollHeight)') # 要把滚动条拉到底部
    13. time.sleep(3) # 等待页面加载完成
    14. lis = driver.find_elements(By.XPATH, "//div[@class='job-list']/ul/li") # 查找全部数据
    15. for li in lis:
    16. data = {} # 用来保存一条记录
    17. data['职位'] = li.find_element(By.XPATH, './/div[@class="job-title"]/span/a').text
    18. data['公司地址'] = li.find_element(By.XPATH, './/div[@class="job-title"]/span[2]/span').text
    19. data['薪金'] = li.find_element(By.XPATH, './/div[@class="job-limit clearfix"]/span').text
    20. data['公司名称'] = li.find_element(By.XPATH, './/div[@class="info-company"]/div/h3/a').text
    21. data_list.append(data) # 把这条记录增加到列表中
    22. driver.find_element(By.CLASS_NAME, 'next').click() # 按下一页
    23. time.sleep(3) # 等待页面加载
    24. driver.quit() # 关闭浏览器
    25. with open('BOSS直聘前5页.csv', 'w', encoding='utf-8', newline='') as f:
    26. wt = csv.DictWriter(f, fieldnames=['职位', '公司地址', '薪金', '公司名称'])
    27. wt.writeheader()
    28. wt.writerows(data_list)

    附csv
    111.png
    总结一下:
    1) selenium最新的版本建议写法是:driver.find_element(By.NAME, ‘query’).send_keys(“python爬虫”),这个要先导入:from selenium.webdriver.common.by import By
    2) 在selenium里想要送回车: driver.find_element(By.NAME, ‘query’).send_keys(Keys.ENTER), 要先导入: from selenium.webdriver.common.keys import Keys
    3) 有一注意点就是要把页面的滚动条拉到底部,这样才确保页面加载完整. ( driver.execute_script(‘window.scrollTo(0, document.body.scrollHeight)’) )
    4) 最后一个就是可以点击: 下一页, 以达到翻页的目的. 可以用循环来控制页数, 也可以用下一页这个值是否为: -1 来判断是否为最后一页.