admin管理员组文章数量:1578025
实验7:设计一个网络爬虫的算法,动态获取全国新型冠状肺炎疫情。
实验8:提交一篇与实验作业7相对应的网络爬虫实验报告。
实验作业7+实验作业8下载链接
https://download.csdn/download/qq_37636795/18398399
(作业是博主认真做的,请多多支持!!!资源中有实验作业7和实验作业8,实验作业7提交epidemic.db,epidemic.py,全国疫情最新信息.xls三个文件;实验作业8单独提交实验报告即可)
南华大学
计算机科学与技术学院
实验报告
( 2020 ~2021 学年度 第二学期 )
课程名称 搜索引擎
实验名称 网络爬虫
姓名 学号
专业 软件工程 班级
地点 八教606 教师 肖建田
目录
一、实验目的 3
二、实验环境 3
三、实验材料 3
四、实验设计 3
五.结果和性能分析 3
六.有待解决的问题 3
七.实验总结 3
一、实验目的
了解网络爬虫的意义
掌握网络爬虫的基本方法
二、实验环境
Windows 10
Python 3.9
三、实验材料
Firefox 浏览器
Sqlite 数据库
pycharm开发工具
四、实验设计
1.数据库设计
create table epidemic
(
id integer – 主键id
primary key autoincrement,
title text, – 标题
newsUrl text, – 新闻主体url
publish_time text, – 发布时间
contents text – 新闻内容
);
2.程序代码
import re
import sqlite3
import xlwt
from bs4 import BeautifulSoup
from selenium import webdriver
browser = webdriver.Firefox()
定义正则
findnewUrl = repile(’<a href="(.?)".>’)
findTitle = repile(’<a.>(.?)’)
findPublishTime = repile(’(.*?)’)
def getContent(url):
“”"
获取新闻主体
:param url: url地址
:return:
“”"
browser.get(url)
# 获取页面资源
html = browser.page_source
# 解析页面,获取文档树
doc = BeautifulSoup(html, “lxml”)
contents_Ele = doc.select(“div#xw_box > p”)
contents = “”
for content_Ele in contents_Ele:
childrens = content_Ele.children
for children in childrens:
contents += str(children.string)
return contents
def getData(baseUrl):
“”"
爬取网页数据
:param baseUrl:
:return:
“”"
tempUrl = baseUrl
for i in range(1, 3):
if i != 1:
baseUrl = tempUrl + "_" + str(i) + ".shtml"
else:
baseUrl = tempUrl + ".shtml"
browser.get(baseUrl)
# 获取页面资源
html = browser.page_source
# 解析页面,获取文档树
print( "开始解析 " + baseUrl )
bs = BeautifulSoup(html, "html.parser")
print(bs)
print("===================================================")
dataList = []
# 所有的新闻
newsEle = bs.select("div[class='list']>ul>li")
for newEle in newsEle:
new_dict = []
newEle = str(newEle)
title = re.findall(findTitle, newEle)[0]
new_dict.append(title)
newUrl = re.findall(findnewUrl, newEle)[0]
new_dict.append("http://www.nhc.gov" + newUrl)
publish_time = re.findall(findPublishTime, newEle)[0]
new_dict.append(publish_time)
# http://www.nhc.gov/
content = getContent("http://www.nhc.gov" + newUrl)
new_dict.append(content)
print(new_dict)
dataList.append(new_dict)
return dataList
def init_db(dbPath):
“”"
创建数据库和表
:param dbPath:
:return:
“”"
sql = ‘’’
create table epidemic(
id integer primary key autoincrement,
title text ,
newsUrl text ,
publish_time text,
contents text
)
‘’’
conn = sqlite3.connect(dbPath)
cursor = conn.cursor()
cursor.execute(sql)
connmit()
cursor.close()
conn.close()
def saveDataDB(dbPath, dataList):
“”"
保存数据到sqlite中
:param dbPath:
:param dataList:
:return:
“”"
init_db(dbPath)
conn = sqlite3.connect(dbPath)
cursor = conn.cursor()
for i in range(0, len(dataList)):
data = dataList[i]
for index in range(len(data)):
data[index] = '"' + data[index] + '"'
values = ",".join(data)
sql = '''
insert into epidemic(
title,newsUrl,publish_time,contents
)
values(
%s
)
''' % values
cursor.execute(sql)
connmit()
cursor.close()
conn.close()
def saveData(savePath, dataList):
“”"
保存数据到excel
:param savePath:
:param dataList:
:return:
“”"
workbook = xlwt.Workbook(encoding=“utf-8”)
sheet = workbook.add_sheet(‘最新疫情消息’, cell_overwrite_ok=True)
col = ['标题', '详情链接', '发布时间', '新闻内容']
for i in range(0, len(col)):
sheet.write(0, i, col[i])
for i in range(0, len(dataList)):
for j in range(0, len(col)):
sheet.write(i, j, dataList[i][j])
workbook.save(savePath)
def main():
baseUrl = “http://www.nhc.gov/xcs/yqtb/list_gzbd”
# 1. 爬取网页
dataList = getData(baseUrl)
print("疫情数据爬取完毕!! ")
# 3. 保存数据到excel
savePath = ".\\全国疫情最新信息.xls" # 路径
saveData(savePath, dataList)
print("成功保存到" + savePath + "中")
# 4. 保存数据到数据库
dbPath = "epidemic.db"
saveDataDB(dbPath, dataList)
print("成功保存到" + dbPath + "中")
if name == “main”: # 程序执行入口
main()
五.结果和性能分析
1. 控制台输出
-
excel 表的内容
-
sqlite 数据库数据
六.有待解决的问题
1. 在对网页数据的解析方面,不能非常熟悉的使用正则解析,导致某些数据存在冗余的字符,观感性不好。
2. 对于sqlite 的操作没有进行封装,导致了每一次执行代码就会执行一次数据库的初始化操作,故在每一次执行前都需要将数据库删除,否则会报错。
3. 在对某些网页进行爬取时,由于种种原因,无法得到正确的网页数据,导致了部分数据的丢失。
七.实验总结
爬虫是未来it 行业的一大趋势,爬虫的作用范围巨大,带开发的价值也很大。此实验是一个小型较简单的一个爬虫实验。其中也遇到了很多问题,例如数据丢失,解析出错等等。通过不断的查找资料以及爬虫相关的技术博客,最终基本上解决了上述问题。在爬取全国疫情信息的实验中,我学到了如何利用java语言和python语言进行爬取网页数据,也学会了python操作excel,sqlite操作以及re正则匹配等知识。
版权声明:本文标题:【大数据搜索引擎】网络爬虫南华实验报告(2021年版) 内容由热心网友自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:https://www.elefans.com/dongtai/1727831144a1132615.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论