IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> Python知识库 -> 爬虫爬取毕业生信息并保存到Excel -> 正文阅读

[Python知识库]爬虫爬取毕业生信息并保存到Excel

一个偶然的契机心血来潮想爬爬虫🤧
经过视频学习打下Python和爬虫基础🤥
爬虫主要有三大部分:爬取网页—逐一解析数据—保存数据
废话不多说,说一下我的具体操作流程吧🙊
1、导入需要的模块库

from bs4 import BeautifulSoup #网页解析,获取数据
import re  #正则表达式,进行文字匹配
import urllib.request,urllib.error  #制定URL,获取网页数据
import xlwt #进行excel操作

2、需要一个主程序入口,且该入口需放置在最后,即定义函数的后面

if __name__=="__main__":  #当程序执行时 程序执行入口
    #调用函数
    main()

3、定义主函数

def main():
    url = "https://job.zcmu.edu.cn/news/view/aid/25515/tag/tzgg"
    #1、爬取网页 2、解析数据
    datalist = getData(url)
    savepath = ".\\毕业生提取.xls"  # .表示当前文件夹
    # 3.保存数据
    saveData(datalist[0],datalist[1],datalist[2],savepath)

其中,getData和saveData为自定义的函数。
4、爬取网页信息

#得到指定一个URL的网页内容
def askURL(url):
    head={     #模拟浏览器头部信息,向服务器发送消息
        "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36 Edg/95.0.1020.53"
    }  #用户代理,表示告诉该学校网站服务器,我们是什么类型的机器、浏览器(本质上是告诉浏览器,我们可以接受什么水平的文件内容)   request=urllib.request.Request(url,headers=head)
    html=""
    try:
        response=urllib.request.urlopen(request)
        html=response.read().decode("utf-8")
        #print(html)
    except urllib.error.URLError as e:
        if hasattr(e,"code"):
            print(e.code)
        if hasattr(e,"reason"):
            print(e.reason)
    return html

5、逐一解析数据

#爬取网页
def getData(url):
    html=askURL(url) #保存获取到的网页源码
    # 2.逐一解析数据   soup=BeautifulSoup(html,"html.parser")
    data = []  # 保存所有学院信息
    major=[]   #保存所有专业信息
    stu=[]    #保存所有学生人数信息
    ss = 1   
    for item in soup.find_all('td'):     #查找符合要求的字符串形成列表
        #print(item) #测试:查看item全部信息

        item=str(item)
        #print(item)
        # break

        #找到学院
        college=re.findall(find1,item) #re库用来通过正则表达式查找指定的字符串
        # 找到专业
        major1 = re.findall(find21, item)
        major2 = re.findall(find22, item)
        major3 = re.findall(find23, item)
        major4 = re.findall(find24, item)
        stus1 = re.findall(find31, item)  # 毕业人数
        stus2 = re.findall(find32, item)
        if (len(college) != 0):
         #college=college[0]
         if(college[0]=='' or college[0]=='学院'):
             continue
         data.append(college)


        if (len(major1) != 0 and ('老师' not in major1[0])):
            major.append(major1)  #and ('老师' not in major1[0])
        if (len(major2) != 0 and ('老师' not in major2[0])):
            major.append(major2)
        if (len(major3) != 0):
            major.append(major3)
        if (len(major4) != 0):
            major.append(major4)


        if(len(stus1)!=0):
            # if (stus1[0]== 58):
            #     stu.append(stus1)
            if(ss==stus1[0]):
                continue
            ss = stus1[0]

            stu.append(stus1)


        if (len(stus2) != 0):
            if (ss == stus2):
                continue
            ss = stus2
            stu.append(stus2)
    return data,major,stu

其中,find1、find21—find24、find31—find32都是定义的全局变量。

#学院
find1=re.compile(r'<td class=.*height=.*style=.*>(.*)</td>',re.S)  #创建正则表达式对象,表示规则(字符串的模式)
#专业
find21=re.compile(r'<td class="et5" x:str="">(.*)</td>',re.S) #re.S让换行符包括在字符种
find22=re.compile(r'<td class="et9" x:str="">(.*)</td>',re.S)
find23=re.compile(r'<td class="et6" x:str="">(.*)</td>',re.S)
find24=re.compile(r'<td class="et10" x:str="">(.*)</td>',re.S)
#毕业生人数
find31=re.compile(r'<td class="et5" x:num=.*>(.*)</td>')
find32=re.compile(r'<td class="et6" x:num=.*>(.*)</td>')

我认为解析数据是爬虫中困难的部分,不是说多难,就是很麻烦,还需要足够的细心和找不同的能力以及总结能力。
在解析的过程中,首先需要右键来捕获网页信息,相关代码都在这里,接下来的工作就是分析总结需要的信息部分的代码,再进行网页爬虫编程。
首先,人为的尽可能准确的锁定你要爬取信息所在的位置,观察总结这些代码的规律,提取主要规律,编程代码使接下来数据提取工作只在这一块进行。其次,提取数据时需要用到正则表达式,这里用到的只有(.*),其中.表示匹配任何一个字符,*表示.匹配零次或多次,构建正则表达式模板时,也是需要找到需要提取目标对象在网页代码中的公共部分来构建正则表达式,使re库能找到所有的目标对象。最后,把目标对象存到数组里面,方便之后存到excel表格里。
6、保存数据

#3.保存数据
def saveData(data,major,stu,savepath):
    book = xlwt.Workbook(encoding="utf-8",style_compression=0)  # 创建wookbook对象
    sheet = book.add_sheet('毕业生提取',cell_overwrite_ok=True)  # 创建工作表
    col=("学院","专业","人数")
    for i in range(0,3):
        sheet.write(0,i,col[i])   #列名
    for i in range(0,20):
        sheet.write(i + 1, 0, data[i])
    for i in range(0,46):
        sheet.write(i + 1, 1, major[i])
    for i in range(0, 45):
        sheet.write(i + 1, 2, stu[i])


    book.save(savepath)    #保存

7、Excel表格结果
不是想要的结果
可以看到,这个结果不是我想要的

  Python知识库 最新文章
Python中String模块
【Python】 14-CVS文件操作
python的panda库读写文件
使用Nordic的nrf52840实现蓝牙DFU过程
【Python学习记录】numpy数组用法整理
Python学习笔记
python字符串和列表
python如何从txt文件中解析出有效的数据
Python编程从入门到实践自学/3.1-3.2
python变量
上一篇文章      下一篇文章      查看所有文章
加:2021-11-18 11:09:12  更:2021-11-18 11:09:17 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/16 1:53:42-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码