将爬取的网页数据分别保存为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文件显示正常,问题解决,如图:

 

posted @ 2020-06-13 18:00  柠檬草不孤单  阅读(5246)  评论(2编辑  收藏  举报