爬取湖北师范大学官网新闻信息

2023-11-06

内容:
要求:

爬取湖北师范大学校园官网新闻,将其标题,内容,来源和发布时间写入CSV文件中。

分析:

湖北师范大学校园官网新闻网页:由于刚开始爬取可以根据其模块将其慢慢爬取。
在这里插入图片描述

爬取摸个面板:

先试着爬取某个面板:(学校要闻)
在这里插入图片描述

部分代码:

将光标移到对应的模板可看到其源代码(如下图)可发现在

标签下,而我们需要获取的信息均在
  • 标签下。代码如下:

#爬取模块1下的新闻要闻模块
		lilist=doc.find('div',{'class':'xxyw'}).findAll('li');

爬取此模板下的一级参数:(代码如下)

#爬取一级参数
		for x in lilist:
			Title=x.find('a').text;
			Time=x.select('span')[-1].string
			Link='http://www.news.hbnu.edu.cn'+x.find('a').get('href')
			Link_1=Link
			#print(Link)
			print(Title)
			print(Time)
			self.draw_detail_list(Link,Title,Time);
			pass

在这里插入图片描述

写入CSV文件的方法:

将解析得到的内容(字典格式)逐行写入csv文件:(代码如下)

#将解析得到的内容(字典格式)逐行写入csv文件
	def write_dictionary_to_csv(self,dict,filename):
		file_name='{}.csv'.format(filename)
		with open(file_name, 'a',encoding='utf-8') as f: 
			file_exists = os.path.isfile(filename)
			w =csv.DictWriter(f, dict.keys(),delimiter=',', quotechar='"', lineterminator='\n',quoting=csv.QUOTE_ALL, skipinitialspace=True)
			
			if not file_exists :
				w.writeheader()
			w.writerow(dict)
		print('当前行写入csv成功!')

(爬取整块模板和二级参数方法一样,即查看源代码,然后分析标签下的内容进行解析)

综合代码:
from urllib import request
from bs4 import BeautifulSoup
import csv
import re
import io,os
import os.path
import sys
import sqlite3
import urllib
sys.stdout = io.TextIOWrapper(sys.stdout.buffer,encoding='utf-8')
"""爬取核心的核心模块,功能只负责爬取研究生调剂信息"""

Link_1='http://www.news.hbnu.edu.cn'
class DrawStu():
	"""docstring for DrawStu"""
	def __init__(self):
		self.baseurl='http://www.news.hbnu.edu.cn'
		db.create_table()
		pass

	#提取公共的爬取信息的api
	def commonsdk(self,url):
		print(url)
		response=urllib.request.urlopen(url)#注意 写在内部以后 变成了形参 
		html=response.read()#read进行乱码处理
		# print(html)
		doc=BeautifulSoup(html,'lxml')
		return doc


	#爬取基本列表
	def draw_base_list(self,url):
		print('url is:::',url);
		doc=self.commonsdk(url);
		# lilist=doc.find('div',{'id':'container'}).findAll('li');
		#爬取模块1下的新闻要闻模块
		lilist=doc.find('div',{'class':'xxyw'}).findAll('li');
		#爬取模块2的新闻
		lilist_1=doc.find('div',{'class':'mod2'}).findAll('li');
		#print(lilist);
		#爬取一级参数
		for x in lilist:
			Title=x.find('a').text;
			Time=x.select('span')[-1].string
			Link='http://www.news.hbnu.edu.cn'+x.find('a').get('href')
			Link_1=Link
			#print(Link)
			print(Title)
			print(Time)
			self.draw_detail_list(Link,Title,Time);
			pass
		for x in lilist_1:
			Title=x.find('a').text;
			Time=x.select('span')[-1].string
			Link='http://www.news.hbnu.edu.cn'+x.find('a').get('href')
			Link_1=Link
			#print(Link)
			print(Title)
			print(Time)
			self.draw_detail_list(Link,Title,Time);
			pass

		pass
	#将解析得到的内容(字典格式)逐行写入csv文件
	def write_dictionary_to_csv(self,dict,filename):
		file_name='{}.csv'.format(filename)
		with open(file_name, 'a',encoding='utf-8') as f: 
			file_exists = os.path.isfile(filename)
			w =csv.DictWriter(f, dict.keys(),delimiter=',', quotechar='"', lineterminator='\n',quoting=csv.QUOTE_ALL, skipinitialspace=True)
			
			if not file_exists :
				w.writeheader()
			w.writerow(dict)
		print('当前行写入csv成功!')
	#爬取二级详情的信息参数
	def draw_detail_list(self,url,Title,Time):
		doc=self.commonsdk(url);
		from_info=doc.find('span',{'class':'arti_publisher'}).text;
		
		content=doc.find('div',{'class':'wp_articlecontent'}).text;
	
		#将数据 拼合成字典 交给数据库存储的api
		data={
		 
		  'Title':Title,
		  'Content':content,
		  'PublishTime':Time,
		  'Origin':from_info
		}
		print(data);
		
		# print('插入数据库中');
		# db.insert_into_news(data);
		# 存储到csv文件
		self.write_dictionary_to_csv(data,'xinwen')
		pass

	
class DB(object):
	"""数据库访问方法的实现"""
	"""初始化api 产生数据操作的对象 conect 操作的游标"""
	def __init__(self):
		self.conn={};
		self.cus={};
		#初始化数据库链接的api
		#1产生数据库链接对象
		self.conn=sqlite3.connect(r'xinwen.db');
		#2.产生操作的游标
		self.cus=self.conn.cursor();
		pass;
	def create_table(self):
		
		sql = " CREATE TABLE if not exists mynews (Title char,Content char,PublishTime char,Origin char)"
		self.conn.execute(sql)
		self.conn.commit()
		print('create table successfully')
	def insert_into_news(self,ops):
		self.conn.execute('insert into mynews(Title,Content,PublishTime,Origin) values(?,?,?,?)',(ops['Title'],ops['Content'],ops['PublishTime'],ops['Origin'],));
		self.conn.commit();
		pass
db=DB()
draw=DrawStu()

if __name__ == '__main__':
	print('爬取湖北师范大学校园新闻')
	draw.draw_base_list(Link_1)
	pass

运行后写入到CSV文件:

](https://img-blog.csdnimg.cn/20201202235018627.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80NDkwNjQ3NA==,size_16,color_FFFFFF,t_70

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

爬取湖北师范大学官网新闻信息 的相关文章

随机推荐

  • OpenWrt的内核启动分析

    u boot从Flash分区中读取Linux内核到内存 然后跳转到内存 某个地址 执行Linux内核 Linux内核会进行一系列验证 根据设备树文件 见下图openwrt target linux realtek dts 5 15 XXX
  • valgrind交叉编译

    编译 autogen sh configure host mips linux gnu CC mips linux gnu gcc CXX mips linux gnu g prefix mnt mmc make make install
  • 信号反射与反弹图那些事

    原文来自公众号 工程师看海 我们总说阻抗不连续会导致信号反射 今天介绍下信号反射的过程与反弹图 如下图所示 对于传输线而言 当信号从左向右传播时 如果走线突然加粗 那么对应的单位长度电感和电位长度电容就会发生变化 使得阻抗突变 Z1 Z2
  • 数据输入及输出显示——JSP实用例子

    例子说明 这例子是学生基本信息的输入以及输出显示 有两个页面 info jsp和showInfo jsp 前者是顾客输入的信息页面 而后者是处理信息的页面 info jsp
  • 考研面试数据库题库

    文章目录 1 什么是数据库 2 数据库管理系统的主要功能是什么 3 什么是数据库系统 4 数据库系统的特点是什么 5 DBA的职责是什么 6 三级模式结构是什么 7 二级映射有什么优点 8 什么是数据库系统的二级映像与数据独立性 9 关系模
  • AIStudio训练模型无反应的解决办法

    问题描述 在AIStudio工作台中 启动环境 按照样例配置好训练集 验证集之后 输入指令 python train py dataset dir data device gpu max seq length 128 model name
  • rbf神经网络预测_城市轨道交通中短期客流预测的深度学习架构

    摘要 短期客流预测是城市轨道交通运营的重要组成部分 兴起的深度学习模型为提高预测精度提供了很好的思路 因此 我们提出了一种结合了残差网络 ResNet 图卷积网络 GCN 和长短期记忆网络 LSTM 简称ResLSTM 的深度学习架构来预测
  • 反转字符串中的元音字母Python解法

    给你一个字符串 s 仅反转字符串中的所有元音字母 并返回结果字符串 元音字母包括 a e i o u 且可能以大小写两种形式出现 例 输入 s hello 输出 holle 解析 字符串中只有元音字母受到条件约束 所以我们只需要将元音字母进
  • RK3588移植opencv(包含opencv_contrib)过程

    后面给大家准备了我自己编译好的 百度云链接 如果有用 麻烦点个赞 1 环境 PC端 Ubuntu 16 04 opencv 版本 3 4 13 编译器 aarch64 linux gnu 工具 cmake 2 源码下载 opencv 3 4
  • dubbo 源码分析-1

    前一篇springCloud 篇幅较长 看起来比较累 这一篇dubbo源码分析 将拆分3篇来分析 1 版本 这里源码是从git 上拉下来的 现在注解用的多 这也是一篇分析注解版本的 2 入口 这是spring 容器启动 回加载Provide
  • makefile文件详解

    1 make是如何工作的 在默认的方式下 也就是只输入make命令 那么 1 make会在当前目录下找名字叫 Makefile 或 makefile 的文件 默认的情况下 make命令会在当前目录下按顺序找寻文件名为 GNUmakefile
  • NTLM及Kerberos认证原理摘录

    目录 NTLM 前言 认证流程 本地认证 NTLM Hash的生成 Kerberos认证 概念 认证流程 编辑Kerberos协议四个角色介绍 KDC的介绍 Kerberos认证 大体分为三个流程 Authentication Servic
  • 【Python基础】--Pickle/函数默认参数/函数的参数*args/Bytes<=>str/32-64bit/bytes对象

    Pickle gt gt gt import pickle gt gt gt my list 1 2 3 haha and or gt gt gt pickle file open my list pkl wb gt gt gt pickl
  • Segment Anything Meta开源分割一切模型,为进军元宇宙更近一步

    上期图文教程 我们分享了Segment Anything分割一切模型的原理 Segment Anything Model 是一种以最少的人工干预构建全自动可提示图像分割模型的方法 模型提供了一键分割图片的方法 当然模型也可以运行我们输入一个
  • zookeeper 系列(3) create 流程(1)

    create 流程主要是zkcli 里的create命令为入口 分析客户端解析命令 发送命令 服务端接收命令 解析命令 到以leader接收的prequestProcesser的流程 流程图片可能不太清楚 截图如下 解析流程 发送包装 发送
  • list.files: List the Files in a Directory/Folder

    转载 https www rdocumentation org packages base versions 3 6 2 topics list files 1 list files函数作用 将文件夹中的文件名存到列表当中 常用于批量导入文
  • (选做)基于数组的工资处理系统

    第1关 数据输入和计算 任务描述 本关任务 编写函数input data char uid 10 5 int salary 10 int csalary 10 int revenue 10 int water electricity 10
  • 基于STM32CubeMX和keil采用SPI通信实现轮询方式读写W25Q128获取设备ID

    文章目录 前言 1 SPI通信 1 1 SPI硬件接口与连线 1 2 SPI传输协议 1 3 SPI的数据传输 2 W25Q128 2 1 片选 2 2 控制指令 2 3 时序图分析 3 STM32CubeMX配置 3 1 引脚配置 3 2
  • Omnigraffle Pro 6注册码/许可证

    最近一直在找一个好用的Mac下的画图工具 类似于Windows下的Visio 工具 发现了Omnigraffle Pro 6 特别的好用 下载之后可能会需要注册一下 下面就为大家提供几个可用的注册码 名字 mojado 序列号 JYFE J
  • 爬取湖北师范大学官网新闻信息

    爬虫 内容 要求 分析 爬取摸个面板 部分代码 写入CSV文件的方法 综合代码 内容 要求 爬取湖北师范大学校园官网新闻 将其标题 内容 来源和发布时间写入CSV文件中 分析 湖北师范大学校园官网新闻网页 由于刚开始爬取可以根据其模块将其慢