2020年拟在山东招生普通高校专业(类)选考科目要求 网站数据爬虫实战

news/2024/5/13 12:03:57/文章来源:https://zhanghansen.blog.csdn.net/article/details/104173761

 

需要爬取 1622 个高校的数据 , 序号 ,地区 学校代码  , 学校名称 , 选课科目要求 , 学校网址 。 

因为此网站禁用了右键, 所以直接用 python 代码分析 网站html 。

 form 表格的 一行 html代码如上 。 都是在 td 标签下, 直接改中国大学排名定向爬虫实例 代码。

(1)   获取 html 信息 

def getHTMLText(url):# 获取html的所有信息try:headers = {'User-Agent': 'Mozilla/5.0(Macintosh; Intel Mac OS X 10_11_4)\AppleWebKit/537.36(KHTML, like Gecko) Chrome/52 .0.2743. 116 Safari/537.36'}r = requests.get(url,headers=headers, timeout=30)r.raise_for_status()r.encoding = r.apparent_encodingreturn r.textexcept:print("异常")

(2) 获取除了选课科目要求之外的其他列信息

def fillUnivList(ulist, html,url):# 解析htmlsoup = BeautifulSoup(html, 'lxml')for tr in soup.find('tbody').children:linklist = []# isinstance()函数来判断一个对象是否是一个已知的类型,类似if isinstance(tr, bs4.element.Tag):# 过滤tr的类型tds = tr('td')  # 所有的td标签hraf = tr('a')  # 获取学校网址# print(hraf[1].get('href'))ulist.append([tds[0].string, tds[1].string, tds[2].string, tds[3].string,hraf[1].get('href')])

(3) 分析每个学校选课科目要求url的相同点

发现都是

http://xkkm.sdzk.cn/zy-manager-web/gxxx/searchInfor

查看html 

<input name="dm" type="hidden" value="10293"/>
<input name="mc" type="hidden" value="%E5%8D%97%E4%BA%AC%E9%82%AE%E7%94%B5%E5%A4%A7%E5%AD%A6"/>

url 和 这两个有关系。

分析出 url =   http://xkkm.sdzk.cn/zy-manager-web/gxxx/searchInfor + ? dm = 值 &mc = 值 

所以只需要提取出来dm 和mc 即可

 

fillUnivList 增加代码 : 

 lista = []for i, input in enumerate(soup.find_all(name='input')):# print(i,input)if i %2 == 0 :lista.append([input['value']])# print(i, input['name'], '\t', input['value'])j = 1urllists = []for u in ulist :p = url+'?'+'dm='+u[2]+'&'+'mc='+lista[j][0]j+=1urllists.append(p)return urllists

urllists 就是所有学校的 选课科目要求的url 。

(4)  爬取所有学校的考试科目要求

在提取类中所含专业时处理起来不同容易。 

<tr style="width:100%;">
<td  width="5%" style="text-align:center; white-space: nowrap;display:table-cell; vertical-align:middle;">3</td>
<td  width="10%" style="text-align:center; white-space: nowrap;display:table-cell; vertical-align:middle;">本科</td>
<td  width="25%" align="left"style="display:table-cell; vertical-align:middle;">
中国语言文学类     
</td>
<td  width="30%" align="left" style="display:table-cell; vertical-align:middle;">不提科目要求</td>
<td width="30%" align="left" style="white-space: nowrap;" >
<!-- 用jstl的fn标签库对传过来的专业中的'、'进行替换成<br/> -->
汉语言文学(中国文学)<br/>汉语言(汉语语言学)<br/>古典文献学
</td>
</tr>
def getcontent(html):unilist = []soup = BeautifulSoup(html, 'lxml')j = 1bf = BeautifulSoup(html, 'html.parser')# 提取 学校名称和代码articles = bf.find_all("div", {"class": "center"})j = 1for i in articles :if j == 2 :ans = ibreakj+=1# print(type(ans))name = "".join(ans.get_text()).split()[0][5:]code = "".join(ans.get_text()).split()[1][5:]#提取其他信息for tr in soup.find('tbody').children:# isinstance()函数来判断一个对象是否是一个已知的类型,类似# type()# tdList = re.findall(r'<td[^>]*>(.*?)</td>', html, re.I | re.M)# print(tdList)if isinstance(tr, bs4.element.Tag):tds = tr('td')tds0 = tds[0].stringtds1 = tds[1].stringtds2 = "".join(tds[2].string.split())tds3 = "".join(tds[3].string.split())# print(tds0 , tds1  ,tds2 ,tds3 )tl = []for tds4_ in tds[4] :if isinstance(tds4_, bs4.element.Comment):passelse:if isinstance(tds4_, bs4.element.Tag):passelse:tlo = "".join(tds4_.string.split()) tl.append("".join(str(tlo)))tl = [x for x in tl if x != '']tl = [x for x in tl if x != '']unilist.append([tds0,name,code,tds1,tds2,tds3,tl])return unilist

(5)结果

(6) 全部代码

import requests
from bs4 import BeautifulSoup ,Comment
import bs4
import re
import csv
import codecs
import jieba
from w3lib.html import remove_commentsimport xlwt
def getHTMLText(url):# 获取html的所有信息try:headers = {'User-Agent': 'Mozilla/5.0(Macintosh; Intel Mac OS X 10_11_4)\AppleWebKit/537.36(KHTML, like Gecko) Chrome/52 .0.2743. 116 Safari/537.36'}r = requests.get(url,headers=headers, timeout=30)r.raise_for_status()r.encoding = r.apparent_encodingreturn r.textexcept:print("异常")def fillUnivList(ulist, html,url):# 解析htmlsoup = BeautifulSoup(html, 'lxml')for tr in soup.find('tbody').children:linklist = []# isinstance()函数来判断一个对象是否是一个已知的类型,类似if isinstance(tr, bs4.element.Tag):# 过滤tr的类型tds = tr('td')  # 所有的td标签hraf = tr('a')  # 获取学校网址# print(hraf[1].get('href'))ulist.append([tds[0].string, tds[1].string, tds[2].string, tds[3].string,hraf[1].get('href')])lista = []for i, input in enumerate(soup.find_all(name='input')):# print(i,input)if i %2 == 0 :lista.append([input['value']])# print(i, input['name'], '\t', input['value'])j = 1urllists = []for u in ulist :p = url+'?'+'dm='+u[2]+'&'+'mc='+lista[j][0]j+=1urllists.append(p)return urllistsdef printUniveList(ulist, num):# 格式化输出 chr12288  中文填充tplt = "{0:^5}\t{1:{4}^5}\t{2:^5}\t{3:{5}^5}\t{4:{5}^5}"  # {4},{5}表示用第三种方式填充# print(tplt.format("排名", "学校名称", "省份", "总分", chr(12288), chr(12288)))for i in range(num):u = ulist[i]print(u[0],'\t' ,u[1],'\t', u[2],'\t' ,u[3],'\t\t\t', u[4])# print(tplt.format(u[0], u[1], u[2], u[3],u[4], chr(12288), chr(12288)))#  将数据写入新文件
def data_write(file_path, datas,index):f = xlwt.Workbook()sheet1 = f.add_sheet(u'sheet1', cell_overwrite_ok=True)  # 创建sheet# 将数据写入第 i 行,第 j 列i = indexfor data in datas:for j in range(len(data)):sheet1.write(i, j, data[j])i = i + 1f.save(file_path)  # 保存文件def getcontent(html):unilist = []soup = BeautifulSoup(html, 'lxml')j = 1bf = BeautifulSoup(html, 'html.parser')articles = bf.find_all("div", {"class": "center"})j = 1for i in articles :if j == 2 :ans = ibreakj+=1# print(type(ans))name = "".join(ans.get_text()).split()[0][5:]code = "".join(ans.get_text()).split()[1][5:]for tr in soup.find('tbody').children:# isinstance()函数来判断一个对象是否是一个已知的类型,类似# type()# tdList = re.findall(r'<td[^>]*>(.*?)</td>', html, re.I | re.M)# print(tdList)if isinstance(tr, bs4.element.Tag):tds = tr('td')tds0 = tds[0].stringtds1 = tds[1].stringtds2 = "".join(tds[2].string.split())tds3 = "".join(tds[3].string.split())# print(tds0 , tds1  ,tds2 ,tds3 )tl = []for tds4_ in tds[4] :if isinstance(tds4_, bs4.element.Comment):passelse:if isinstance(tds4_, bs4.element.Tag):passelse:# print(tds4_.string.split())tlo = "".join(tds4_.string.split())# print(tlo)tl.append("".join(str(tlo)))tl = [x for x in tl if x != '']# kp = ",".join(tl)# print(kp)# print(tl)tl = [x for x in tl if x != '']unilist.append([tds0,name,code,tds1,tds2,tds3,tl])return unilist# for u in unilist :#     print(u)def data_write_csv(file_name, datas):#file_name为写入CSV文件的路径,datas为要写入数据列表file_csv = codecs.open(file_name,'w+','utf-8')#追加writer = csv.writer(file_csv, delimiter=' ', quotechar=' ', quoting=csv.QUOTE_MINIMAL)for data in datas:writer.writerow(data)print("保存文件成功,处理结束")def main():urls = []url = "http://xkkm.sdzk.cn/zy-manager-web/html/xx.html#"html = getHTMLText(url)uinfo = []up = 'http://xkkm.sdzk.cn/zy-manager-web/gxxx/searchInfor'u = "http://xkkm.sdzk.cn/zy-manager-web/gxxx/searchInfor?dm=10001&mc=%25E5%258C%2597%25E4%25BA%25AC%25E5%25A4%25A7%25E5%25AD%25A6"urllist = fillUnivList(uinfo,html,up)# http: // xkkm.sdzk.cn // zy - manager - web / gxxx / searchInfor?id = 10300j = 1index = 0'''f = xlwt.Workbook()sheet1 = f.add_sheet(u'sheet1', cell_overwrite_ok=True)  # 创建sheetg = 1for i in range(3):html = getHTMLText(urllist[i])cp = getcontent(html)# 将数据写入第 i 行,第 j 列for data in cp:for j in range(len(data)):sheet1.write(index, j, data[j])index = index + 1# print(index)print(g ,"爬取成功 !")g+=1f.save("data.xls")  # 保存文件'''with open("data5.txt" ,"w",encoding='utf-8') as f :for i in range(len(urllist)):try:html = getHTMLText(urllist[i])# print(html)cp = getcontent(html)for con in cp :line = "{0:^15}\t{1:^15}\t{2:^15}\t{3:^15}\t{4:^15}\t{5:^15}\t".format(con[0],con[1],con[2],con[3],con[4],con[5])# f.write(con[0]+'\t'+ con[1]+'\t'+ con[2]+ '\t'+ con[3]+ '\t'+con[4]+'\t\t\t'+con[5]+'\t\t')f.write(line)f.write(str(con[6]))f.write("\n")f.write("\n")print(j, "  爬取成功!")j+=1except:print("异常")main()

爬取的文件:

链接:https://pan.baidu.com/s/1j3HQbjPNlLnef0DqaluzGw 
提取码:hu6e

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.luyixian.cn/news_show_777408.aspx

如若内容造成侵权/违法违规/事实不符,请联系dt猫网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

高并发高流量网站架构

高并发高流量网站架构(转) Web2.0的兴起&#xff0c;掀起了互联网新一轮的网络创业大潮。以用户为导向的新网站建设概念&#xff0c;细分了网站功能和用户群&#xff0c;不仅成功的造就了一大批新生的网站&#xff0c;也极大的方便了上网的人们。但Web2.0以用户为导向的理念&a…

C# seo测试小工具1:同时更新多网站的博客(csdn,cnblogs,163,sina)

这几天我一个朋友在学seo&#xff0c;老师要求学生们同时发表一篇博客来测试百度的排名系统。所以就有了这个小程序&#xff0c;给同样有这方面需求的朋友们一个参考&#xff0c;下面介绍一下实现方法。 国内的这几个网站都实现了国际通用的博客api&#xff1a;MetaWeblog。通过…

建站手册-浏览器信息:Internet Explorer 浏览器

ylbtech-建站手册-浏览器信息&#xff1a;Internet Explorer 浏览器1.返回顶部 1、http://www.w3school.com.cn/browsers/browsers_internetexplorer.asp2、Internet Explorer 是目前使用最为广泛的因特网浏览器。 Internet Explorer 8 2009 年 3 月 19 日&#xff0c;微软发布…

做网站用UTF-8还是GB2312?

2019独角兽企业重金招聘Python工程师标准>>> 经常我们打开外国网站的时候出现乱码&#xff0c;又或者打开很多非英语的外国网站的时候&#xff0c;显示的都是口口口口口的字符&#xff0c; WordPress程序是用的UTF-8&#xff0c;很多cms用的是GB2312。 ● 为什么有这…

dedecms 后台网站 标题设置

打开文件夹&#xff0c;找到dede/templets/index2.htm&#xff0c;修改第6行就行了 转载于:https://www.cnblogs.com/moguzi12345/p/8124087.html

国内某知名婚恋网站的Kubernetes落地实践

随着Kubernetes的遍地开花&#xff0c;Kubernetes的优势可以说是深入人心&#xff0c;所以&#xff0c;我们也掀起了一场改革&#xff0c;目的就是改变我们以往的运维模式&#xff0c;利用Kubernetes&#xff0c;来实现更高效的交付和更好地提高我们的资源使用率&#xff0c;推…

网站基本标签及css样式简介(3)

CSS层叠样式&#xff1a;一.内部样式表1).行内样式<td style"font-size:30px;">封面回顾</td>...td为行级标签&#xff0c;其他还有&#xff1a;按钮、输入框&#xff0c;范围、图像、超链接、换行标签2).嵌入样式(在<head>标签中实现)<style t…

在Kubernetes中部署网站的综合指南

最近&#xff0c;我们做了一个把Grofers的所有服务迁移到Kubernetes上的决定。Grofers是杂货领域印度最大的低价在线超市&#xff0c;成立于2013年12月01日&#xff0c;由Albinder Dhindsa和Saurabh Kumar创立&#xff0c;总部位于印度德里的卫星城市Gurugram。其主要提供各种类…

教你用 Docker 搭建网站

2013 年发布至今&#xff0c; Docker 一直广受瞩目&#xff0c;被认为可能会改变软件行业。但是&#xff0c;许多人并不清楚 Docker 到底是什么&#xff0c;要解决什么问题&#xff0c;好处又在哪里&#xff1f;本文就来详细解释&#xff0c;帮助大家理解它&#xff0c;还带有简…

网站标题前的小logo

原因&#xff1a;每个浏览器访问服务器的时候会自动发送一个GET 请求&#xff0c;地址是&#xff1a;/favicon.ico 如果不处理&#xff0c;则只会在浏览器标题前添加一个文本类的图标 前提&#xff1a;有现有的图标favicon.ico&#xff0c;且按开发规范存放在static/img/下 解…

ASP.NET 网站路径

使用网站中的资源时&#xff0c;通常必须指定资源的路径。例如&#xff0c;您可以使用 URL 路径引用页面中的图像文件或网站中其他位置处的页面的 URL。同样&#xff0c;Web 应用程序中的代码可以使用基于服务器的文件的物理文件路径对文件进行读写操作。ASP.NET 提供用于引用资…

帅的一坨,不转不行。优雅实用web标准网站设计欣赏

文章来源于我非常喜爱的Smashing Magazine。网站不支持图片外链接&#xff0c;如果看不到图片请访问原文地址&#xff1a;http://www.smashingmagazine.com/2007/07/04/inspiration-package-usable-elegant-inspiring-design-showcase/以下是原文&#xff1a; Inspiration Pack…

js入门·表单元素(select下拉列表)制作二级联动菜单和网站导航

对于脚本来说&#xff0c;最复杂的表单元素对象就是select了&#xff0c;他是一个复合对象&#xff0c;包含OPTION对象数组的对象 演示一&#xff1a;导航,这个多见于网站友情链接 请选择您要去的网站天轰穿系列教程博客园CSDN演示二&#xff1a;地区二级无刷新联动菜单&#x…

关系网成网络盈利模式 LinkedIn网站探秘

“人传人”的创业群体 2003年&#xff0c;从加州大学伯克利分校经济系毕业后&#xff0c;林文文开始了在加州联合银行的工作。今年7月&#xff0c;她决定转行做市场营销&#xff0c;然而由于缺乏相关的工作经验&#xff0c;她在几大求职网站上投的简历最终都石沉大海。 后来&am…

关于网站登录后的页面操作所携带的不同cookie值

对于课堂派网站,登录后的页面操作只需要携带PHPSESSID或者cookie中间那部分即可,两个都带也可,SERVERID不知道是干啥的,每次响应的都会变. 代码实现: cookie None class HttpRequest:def __init__(self,method,url,dataNone):self.methodmethodself.urlurlself.datadata# def …

新辰:共享是SEO的思维 用户是SEO的核心

大家都知道。SEO一直没有一个能够定义的核心。新辰知道全部的东西里面在互联网领域链接是非常重要的。所以新辰觉得做SEO就是把链接做好。因此&#xff0c;链接对于一个站点来说简单分能够分成两种。内部的链接和外部的链接。故内链和外链出来了。对于互联网来说。外链的作用比…

SSM重新开发计科院新闻网站

SSM重新开发计科院新闻网站 学号&#xff1a;201631062509 姓名&#xff1a;杨菓 1.什么是SSM SSM就是SpringSpringMVCMyBatis框架的整合。 1.1 Spring Spring是一个开源框架&#xff0c;Spring是于2003 年兴起的一个轻量级的Java 开发框架&#xff0c;由Rod Johnson 在其著作…

Python爬虫框架Scrapy 学习笔记 2 ----- 爬取Mininova网站种子文件信息

1. 任务描述目标网站:http://www.mininova.org/yesterday/ 目标网站截图&#xff1a;-------------------------------------可以看到种子文件的列表&#xff0c;这些链接的url可以用正则表达式表示为&#xff1a; /tor/\d随便点一个进去&#xff0c;进入资源详情页&#xff1a…

教育局机关局域网站点上网指南

教育局机关局域网站点上网指南 1.什么是站点上网零维护&#xff1f;我们能实现这个目标吗? 站点上网零维护最少包括如下4个方面的因素&#xff1a;①机房无需人员值守&#xff1b;②上网线路和设备稳定畅通&#xff1b;③每个站点无需进行任何设置&#xff1b;④站点使用人员懂…

通过华为云搭建一个属于自己的小网站

出于个人兴趣&#xff0c;想搭建一个自己的网站玩玩。 先在华为云买个云服务器&#xff0c;由于是第一次玩&#xff0c;先买个windows server 2019版的&#xff0c;2核4G&#xff0c;以后弄熟了再上手linux吧。、 经过重置密码&#xff0c;设置安全组等简单配置后登录服务器主机…