呦呦鹿鸣

  • 一、爬虫简介
    • 1.1 介绍
    • 1.2 软件配置
  • 二、爬取南阳理工学院ACM题目网站
  • 三、爬取学校官网的信息通知
  • 四、总结
  • 五、参考

一、爬虫简介

1.1 介绍

  • 网络爬虫英文名叫Web Crawler或Web Spider。它是一种自动浏览网页并采集所需要信息的程序。
  • 爬虫从初始网页的URL开始, 获取初始网页上的URL,在抓取网页的过程中,不断从当前页面抽取新的url放入队列。直到满足系统给定的停止条件才停止。
  • 可以为搜素引擎从互联网中下载网页数据,是搜素引擎的重要组成部分。

1.2 软件配置

python3.8 + request+beautifulsoup4,还可以使用tqdm包来显示进度,如果没有可以用pip安装

二、爬取南阳理工学院ACM题目网站

  • 第一步,打开网页http://www.51mxd.cn/problemset.php-page=1.htm,查看页面源代码,可以要看到我们要爬取的信息都在TD这个标签内
  • 知道是要读取什么标签目的就明确了,接下来就是代码操作了,先是导入必要的包
#导入包
import requests
from bs4 import BeautifulSoup
import csv
from tqdm import tqdm#在电脑终端上显示进度,使代码可视化进度加快
  • 定义访问浏览器所需的请求头和写入csv文件需要的表头以及存放题目数据的列表
# 模拟浏览器访问
Headers = 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.25 Safari/537.36 Core/1.70.3741.400 QQBrowser/10.5.3863.400'
# 题目数据
subjects = []
# 表头
csvHeaders = ['题号', '难度', '标题', '通过率', '通过数/总提交数']
  • 定义爬取函数,爬取的是1到11页,大致过程是先用request里的raise_for_status()获取整个页面的信息,再用beautifulsoup里find_all函数来筛选我们想要的信息
for pages in tqdm(range(1, 11 + 1)):r = requests.get(f'http://www.51mxd.cn/problemset.php-page={pages}.htm', Headers)r.raise_for_status()r.encoding = 'utf-8'soup = BeautifulSoup(r.text, 'html5lib')td = soup.find_all('td')#讲所有含TD的项提取出来subject = []for t in td:if t.string is not None:#利用string方法获取其中的内容subject.append(t.string)if len(subject) == 5:subjects.append(subject)subject = []
  • 写入文件
with open('..\\source\\nylgoj.csv', 'w', newline='') as file:fileWriter = csv.writer(file)fileWriter.writerow(csvHeaders)fileWriter.writerows(subjects)print('\n题目信息爬取完成!!!')
  • 文件里的内容

三、爬取学校官网的信息通知

  • 第一步还是分析网页源代码,先打开网页http://news.cqjtu.edu.cn/xxtz.htm,这次要看的信息是全部通知通知发出的时间和通知的标题
  • 时间和标题还比较好找,但由于要爬取所以的,页数也需要爬出来
  • 信息所在的标签已经找到了,接下来就是爬取这些信息了,导入也是上面那些包,所以这里就是对要用的数据进行定义
# 模拟浏览器访问
cqjtu_Headers ={ '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.44'
}
#csv的表头
cqjtu_head=["日期","标题"]
#存放内容
cqjtu_infomation=[]
  • 接下来是获取页数,这个页数在一个长长的字符串里面,而且标签也没有什么特别的,只能广而泛的提取这一类的标签,会发现有很多个,这里我偷一下懒,就手动定位,定位之后就可以得到字符串,在对字符串进行操作和类型转化就可以得到int型的页数了,下面是获取页面数的函数
def get_page_number():r=requests.get(f"http://news.cqjtu.edu.cn/xxtz.htm",headers=cqjtu_Headers)r.raise_for_status()r.encoding="utf-8"page_array={'type':'text/javascript'}soup = BeautifulSoup(r.text, 'html5lib')page_num=soup.find_all('script',page_array)page_number=page_num[4].string#只靠标签这些定位好像不是唯一,只能手动定位了page_number=page_number.strip('function a204111_gopage_fun(){_simple_list_gotopage_fun(')#删掉除页数以外的其他内容page_number=page_number.strip(',\'a204111GOPAGE\',2)}')page_number=int(page_number)#转为数字return page_number
  • 获取页面之后,就可以对页面进行爬取了,不过得注意第一页和后面的页数的网址其实不是一个规律,下面是爬取页面的函数
def get_time_and_title(page_num,cqjtu_Headers):#页数,请求头if page_num==66 :url='http://news.cqjtu.edu.cn/xxtz.htm'else :url=f'http://news.cqjtu.edu.cn/xxtz/{page_num}.htm'r=requests.get(url,headers=cqjtu_Headers)r.raise_for_status()r.encoding="utf-8"array={#根据class来选择'class':'time',}title_array={'target':'_blank'}page_array={'type':'text/javascript'}soup = BeautifulSoup(r.text, 'html5lib')time=soup.find_all('div',array)title=soup.find_all('a',title_array)temp=[]for i in range(0,len(time)):time_s=time[i].stringtime_s=time_s.strip('\n                                    ')time_s=time_s.strip('\n                                ')#清除空格temp.append(time_s)temp.append(title[i+1].string)cqjtu_infomation.append(temp)temp=[]
  • 爬取了之后,可以打印出来,也可以放在文件里,我是选择放在文件里的,下面是写入文件的函数
def write_csv(cqjtu_info):with open('..\\source\\cqjtu.csv', 'w', newline='',encoding='utf-8') as file:fileWriter = csv.writer(file)fileWriter.writerow(cqjtu_head)fileWriter.writerows(cqjtu_info)print('爬取信息成功')
  • 调用函数
page_num=get_page_number()#获得页数
for i in tqdm(range(page_num,0,-1)):get_time_and_title(i,cqjtu_Headers)
write_csv(cqjtu_infomation)
  • 爬取结果:

四、总结

  • 爬取静态页面还是比较简单的,主要是看自己所需的信息是在哪里的,大概步骤是分析位置 - 》利用request和beautifulsoup得到整个信息-》对获取的信息进行处理

五、参考

Python:BeautifulSoup之soup.find_all()用法
Python:删除字符串中的字符

爬虫爬取学校通知信息(python))相关推荐

  1. 爬虫爬取学习通知信息

    文章目录 一.爬虫简介 1 .介绍 2.爬虫工作过程 二.爬取南阳理工学院ACM题目网站 三.爬取学校官网的信息通知 四.总结 五.参考链接 一.爬虫简介 1 .介绍 (1)网络爬虫英文名叫Web C ...

  2. Python POST 爬虫爬取掘金用户信息

    Python POST 爬虫爬取掘金用户信息 1. 概述 Python第三方库requests提供了两种访问http网页的函数,基于GET方式的get()函数和基于POST方式的post()函数. g ...

  3. 深圳python爬虫培训南山科技园钽电容回收_记一次python 爬虫爬取深圳租房信息的过程及遇到的问题...

    为了分析深圳市所有长租.短租公寓的信息,爬取了某租房公寓网站上深圳区域所有在租公寓信息,以下记录了爬取过程以及爬取过程中遇到的问题: 爬取代码: import requests from reques ...

  4. python解决租房问题_记一次python 爬虫爬取深圳租房信息的过程及遇到的问题

    为了分析深圳市所有长租.短租公寓的信息,爬取了某租房公寓网站上深圳区域所有在租公寓信息,以下记录了爬取过程以及爬取过程中遇到的问题: 爬取代码: import requests from reques ...

  5. java爬虫拉勾网_[Java教程]node.js爬虫爬取拉勾网职位信息

    [Java教程]node.js爬虫爬取拉勾网职位信息 0 2017-03-14 00:00:21 简介 用node.js写了一个简单的小爬虫,用来爬取拉勾网上的招聘信息,共爬取了北京.上海.广州.深圳 ...

  6. python爬虫爬取豆瓣电影信息城市_Python爬虫入门 | 2 爬取豆瓣电影信息

    这是一个适用于小白的Python爬虫免费教学课程,只有7节,让零基础的你初步了解爬虫,跟着课程内容能自己爬取资源.看着文章,打开电脑动手实践,平均45分钟就能学完一节,如果你愿意,今天内你就可以迈入爬 ...

  7. Python爬取网站用户手机号_用Python爬虫爬取学校网妹子QQ号,100行代码撩妹,用技术脱单...

    前言: 其实这个项目没什么难度,稍微懂一点爬虫的人或者是已经就业的程序员都可以用自己学的编程语言写出来,但是正是这也原因,也间接证明现在网络很多安全问题的存在,简单的说就是这个网站的程序员偷懒,让用户 ...

  8. python爬虫爬取豆瓣电影信息城市_python爬虫,爬取豆瓣电影信息

    hhhhh开心,搞了一整天,查了不少python基础资料,终于完成了第一个最简单的爬虫:爬取了豆瓣top250电影的名字.评分.评分人数以及短评. 代码实现如下:#第一个最简单的爬虫 #爬取了豆瓣to ...

  9. 高温来袭?通过python爬虫爬取天气预警信息

    需求分析 最近一段时间,天气也是越来越热了,真正的进入了夏天了.可怕的故事是,现在才只有6月份呢,要是等到了7,8月份,不会是要更热吧? 一个小伙伴对此也深表赞同,"仙草哥哥,现在天气的温度 ...

最新文章

  1. chrome浏览器的跨域设置 Google Chrome浏览器下开启禁用缓存和js跨域限制--disable-web-security...
  2. 什么是Python蛋?
  3. 机器学习知识点(十六)集成学习AdaBoost算法Java实现
  4. ubuntu ssh 免密码登陆
  5. Xcode中指令集相关选项
  6. python dataframe 列_python pandas库中DataFrame对行和列的操作实例讲解
  7. Java8新特性:Stream介绍和总结
  8. android bitmap对比,Android Bitmap和Drawable的对比
  9. 全球首家!比亚迪宣布停止燃油汽车整车生产
  10. NOIP2016愤怒的小鸟 题解报告 【状压DP】
  11. 考研数学一【高数】 第18讲多元函数积分学
  12. 2018~2021年软考下午真题考点总结-软考最新
  13. 【机器人学】当前工业机器人应用中的机械结构设计方法分析
  14. CTF_ CRYPTO(Cryptography)_密码学/密码编码学
  15. hdu 5211 Mutiple 数学
  16. 高速收费员招聘考试题计算机题,高速公路面试题和考官题本及答案44套
  17. 如何用CSDN发布文章
  18. 杂记二 · 永远不服输
  19. 关于学习的时间定律-21小时、1000小时、5000小时、10000小时
  20. 招募中|一个小时变身AI应用部署专家,NVIDIA专场公开课 端云边缘协作

热门文章

  1. 范数概念以及相关推导
  2. 各种效应001---乒乓效应在软件中的体现_孤岛效应
  3. windebug(转载别人的节选)
  4. malloc如何分配内存
  5. 天云数据中标某股份制证券公司项目 提供国产企业级人工智能平台服务
  6. Java使用google开源工具Thumbnailator实现图片压缩
  7. 基于Modbus协议的KingSCADA-IOserver和仿真PLC通信
  8. ubuntu 16.04配置嵌入式linux开发环境出现Unable to locate package lib32bz2-1.0
  9. 【NOI 2004】郁闷的出纳员
  10. 【附源码】计算机毕业设计java校园一卡通管理系统设计与实现