【大数据搜索引擎】网络爬虫南华实验报告(2021年版)

377次阅读
没有评论

实验7:设计一个网络爬虫的算法,动态获取全国新型冠状肺炎疫情。

实验8:提交一篇与实验作业7相对应的网络爬虫实验报告。

实验作业7+实验作业8下载链接
https://download.csdn.net/download/qq_37636795/18398399

(作业是博主认真做的,请多多支持!!!资源中有实验作业7和实验作业8,实验作业7提交epidemic.db,epidemic.py,全国疫情最新信息.xls三个文件;实验作业8单独提交实验报告即可)
【大数据搜索引擎】网络爬虫南华实验报告(2021年版)

南华大学
计算机科学与技术学院
实验报告

( 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 = re.compile(’<a href="(.?)".>’)
findTitle = re.compile(’<a.>(.?)’)
findPublishTime = re.compile(’(.*?)’)

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.cn" + newUrl)

publish_time = re.findall(findPublishTime, newEle)[0] new_dict.append(publish_time)

# http://www.nhc.gov.cn/ content = getContent("http://www.nhc.gov.cn" + 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) conn.commit() 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) conn.commit() 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.cn/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正则匹配等知识。

    神龙|纯净稳定代理IP免费测试>>>>>>>>天启|企业级代理IP免费测试>>>>>>>>IPIPGO|全球住宅代理IP免费测试

    相关文章:

    版权声明:Python教程2022-10-24发表,共计3854字。
    新手QQ群:570568346,欢迎进群讨论 Python51学习