將爬取的網頁數據分別保存為csv和xls文件(Python)


本文內容皆為作者原創,碼字不易,如需轉載,請注明出處: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文件顯示正常,問題解決,如圖:

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM