本文內容皆為作者原創,碼字不易,如需轉載,請注明出處:https://www.cnblogs.com/temari/p/13114519.html
一,開發工具
Python3.8.3+Pycharm 2020.1.2
二,程序功能
1.爬取網站的招聘信息,包括職位名稱,招聘公司和崗位內容。
2.將爬取的數據保存為CSV和xls格式文件。
三,網站頁面
網頁源代碼:

搜索框輸入“”,點擊【搜索工作機會】按鈕,如圖:

四,程序代碼
1 ''' 2 程序功能:爬取網站上的招聘信息,將招聘信息保存成csv格式和xls格式。 3 作者:檸檬草不孤單 4 ''' 5 from selenium import webdriver 6 from selenium.webdriver.support.ui import WebDriverWait 7 from selenium.webdriver.support import expected_conditions as EC 8 from selenium.webdriver.common.by import By 9 from time import sleep 10 import csv 11 import xlwt 12 driver=webdriver.Chrome() 13 #隱式等待10秒 14 driver.implicitly_wait(10) 15 driver.get("https://www.chinahr.com/home/sh/") 16 driver.find_element_by_xpath("//div[@id='content_top']/div[2]/input[1]").clear() 17 driver.find_element_by_xpath("//div[@id='content_top']/div[2]/input[1]").send_keys("web自動化") 18 driver.find_element_by_xpath("//div[@id='content_top']/div[2]/a/span").click() 19 #窗口最大化 20 driver.maximize_window() 21 sleep(2) 22 #定義空列表 23 jobTitlesList=[] 24 jobCompaniesList=[] 25 jobContentsList=[] 26 while True: 27 try: 28 #抓取所有職位title 29 jobTitles=driver.find_elements_by_xpath("//div[@class='job-list-box']/div/ul/li[@class='job-name']") 30 #將職位title文本存放到list 31 for jobTitle in jobTitles: 32 jobTitlesList.append(jobTitle.text) 33 #抓取所有職位公司名稱 34 jobCompanies=driver.find_elements_by_xpath("//div[@class='job-list-box']/div/ul/li[@class='job-company']") 35 #將職位公司名稱文本存放到list 36 for jobCompany in jobCompanies: 37 jobCompaniesList.append(jobCompany.text) 38 #抓取所有職位工作內容 39 jobContents=driver.find_elements_by_xpath("//div[@class='job-list-box']/div/p[@class='l3']") 40 #將職位工作內容文本存放到list 41 for jobContent in jobContents: 42 jobContentsList.append(jobContent.text) 43 nextPageXpath = "//div[@class='page-list']/a/i[@class='nextBtn iconfont']" 44 #判斷是否到最后一頁 45 element = WebDriverWait(driver, 15).until(EC.element_to_be_clickable((By.XPATH, nextPageXpath))) 46 driver.find_element_by_xpath(nextPageXpath).click() 47 except: 48 print("已經加載到最后一頁") 49 #到最后一頁,跳出 50 break 51 jobInformations=[] 52 for i in range(len(jobTitlesList)): 53 for j in range(len(jobCompaniesList)): 54 if i == j: 55 for k in range(len(jobContentsList)): 56 if j==k: 57 #將三個列表的值合並成新的列表 58 Infor=[jobTitlesList[i],jobCompaniesList[j],jobContentsList[k]] 59 jobInformations.append(Infor) 60 print(jobInformations) 61 #將爬取內容另存csv文件 62 with open(r"jobInformation.csv", 'w+',encoding='utf-8',newline='') as file: 63 writer = csv.writer(file) 64 writer.writerows(jobInformations) 65 print("創建csv文件成功!") 66 #將爬取內容另存為xls文件 67 workbook = xlwt.Workbook() 68 worksheet=workbook.add_sheet("jobInfo") 69 for i in range(len(jobInformations)): 70 for j in range(len(jobInformations[0])): 71 worksheet.write(i,j,jobInformations[i][j]) 72 workbook.save("jobInfor.xls") 73 print("創建xls文件成功!") 74 sleep(5) 75 driver.quit()
五,程序演示
程序調試成功,如圖:

程序調試成功后,項目CrawlPython目錄下生成兩個文件,一個csv文件,如圖:

另外一個xls文件,點擊可直接打開,內容正確,如圖:

六,遇到問題
問題1:本地目錄的csv文件用excel打開顯示亂碼,如圖:

問題分析:經百度瀏覽了一些帖子定位分析是文件編碼設置的問題。由於我的excel默認打開是gb2312編碼,文件寫入時用的是UTF-8格式,導致打開文件時解析亂碼。
解決步驟:
1.打開一個空的excel文件,選中左上角作為文件導入位置,鼠標定位在第一行第一列,點擊【數據】-【從文本/CSV】,彈出導入數據窗口,選擇亂碼的文件,點擊【導入】,如圖:

2.在彈出的加載窗口,可以看到當前文件打開的默認使用的編碼為GB2312,分隔符默認為“逗號”,調整文件原始格式為“UTF-8”,如圖:

3.調整編碼后,可以看到當前頁面導入文件的顯示效果,點擊【加載】按鈕,如圖:

4.CSV文件顯示正常,問題解決,如圖:

