admin管理员组

文章数量:1578023

实验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. 控制台输出

  1. excel 表的内容

  2. sqlite 数据库数据

六.有待解决的问题
1. 在对网页数据的解析方面,不能非常熟悉的使用正则解析,导致某些数据存在冗余的字符,观感性不好。
2. 对于sqlite 的操作没有进行封装,导致了每一次执行代码就会执行一次数据库的初始化操作,故在每一次执行前都需要将数据库删除,否则会报错。
3. 在对某些网页进行爬取时,由于种种原因,无法得到正确的网页数据,导致了部分数据的丢失。
七.实验总结
爬虫是未来it 行业的一大趋势,爬虫的作用范围巨大,带开发的价值也很大。此实验是一个小型较简单的一个爬虫实验。其中也遇到了很多问题,例如数据丢失,解析出错等等。通过不断的查找资料以及爬虫相关的技术博客,最终基本上解决了上述问题。在爬取全国疫情信息的实验中,我学到了如何利用java语言和python语言进行爬取网页数据,也学会了python操作excel,sqlite操作以及re正则匹配等知识。

本文标签: 南华爬虫搜索引擎报告数据