Science & Technology Vision
科技视界
项目与课题
科技创新
为
的
标 签 并 通 过 循 环 语 句 将 所 有
,
for
" page - link "
div
系 统 的 主 要 功 能 及 目 标
1
的
链 接 的 名 字 以 字 符 串 类 型 赋 值 给 了
变
titles
HTML
根 据 前 期 对 企 业 科 研 部 门 调 研
本 文 所 研 究 的 基
,
量
。
于
的 科 技 情 报 智 能 化 识 别 检 索 系 统 需 要 实 现 以
Python
爬 虫 程 序 另 一 个 重 要 的 功 能 是 把 从 网 页 中 采 集 到
下 功 能 定 时 从 系 统 预 设 的 网 络 渠 道 获 取 最 新 发 布 的
:
的 信 息 保 存 为 文 本 文 件 并 作 为 附 件 通 过 电 子 邮 件
, ,
科 研 情 报
建 立 可 视 化 科 技 情 报 智 能 化 识 别 检 索 系
;
发 送 给 科 研 人 员 进 行 阅 读 这 个 功 能 就 是 把 网 页 中 的
。
统
用 户 还 可 自 行 订 阅 相 关 类 型 或 关 键 字 的 情 报
系
。
,
非 结 构 化 或 半 结 构 化 数 据 保 存 为 结 构 化 数 据
本 节 之
。
统 建 设 完 成 后 能 推 广 至 集 团 及 下 属 子 集 团 各 科 研 单
,
前 提 到 的
是 一 个
或 者
格 式 的 半
xml
ResposneBody
json
位 进 行 使 用
。
结 构 化 数 据 对 象 数 据 无 法 让 读 者 直 观 读 懂
,
而 将 文
,
件 保 存 到 数 据 库 表 以 及
大 大 增 加 数 据 的 可 读 性
文 件 这 类 结 构 化 数 据 将
,
excel
系 统 的 功 能 设 计
2
。
系 统 的 设 计
2 . 1
消 息 订 阅 模 块
2 . 3
本 系 统 程 序 设 计 分 为 两 大 模 块
通 过
)
网
ꢀython
: (
1
本 文
中 叙 述 的 网 络 爬 虫 程 序 将 所 获 新 的 科 技
2 . 2
络 爬 虫 程 序 抓 取 可 自 定 义 类 型 及 关 键 字 的 科 技 情 报
,
情 报 保 存 进 数 据 库 后
系 统 后 台 会 定 时 发 起 一 个
,
将 非 结 构 化 数 据 按 指 定 格 式 保 存 到 数 据 库 中
建
)
; (
2
定 时 抽 取 数 据 的 任 务
并 与 系 统 中 用 户 订 阅 信
,
ꢀython
立 基 于
架 构 的 可 视 化 管 理 平 台 可 实 现 包 括 用 户
,
B / S
息 相 互 匹 配 将 最 新 情 报 生 成 一 个
,
文 件 并 通 过 电
word
管 理 信 息 检 索 内 容 订 阅 数 据 维 护 日 志 管 理 等 功
、 、 、 、
子 邮 件 的 形 式 发 送 给 订 阅 过 该 类 信 息 的 科 研 人 员
为
。
能
程 序 设 计 功 能 框 架 如 图 所 示
。
1
。
了 提 高 消 息 订 阅 的 实 时 性 将 来 可 设 计 从 微 信 公 众 号
,
绑 定 此 定 时 任 务 用 户 可 实 时 查 看 最 新 科 技 情 报
,
。
可 视 化 管 理 平 台
为 使 科 研 人 员 能 够 在
2 . 4
移 动 端 检 索 科 技 情 报 信
、
ꢀC
息
必 须 建 立 基 于
的 跨 平 台 可 视 化 管 理 系 统
,
。
HTML5
科 研 人 员 在 登 录 系 统 后 可 使 用 信 息 检 索
,
信 息 订 阅
、
服 务 系 统 管 理 员 可 以 堆
;
列 表 用 户 账 号 进 行 维
、
URL
护
对 系 统 异 常 日 志 进 行 分 析 和 处 理
,
。
系 统 用 户 可 通 过 关 键 字 情 报 来 源 发 布 日 期 的 范
、 、
图
程 序 设 计 功 能 框 架 图
1
围 对 数 据 库 中 的 科 技 情 报 进 行 检 索 并 可 通 过 导 出
excel
文 件 的 形 式 把 情 报 列 表 导 出 至
或 移 动 端 除 此 之 外
。
,
ꢀC
基 于
的 网 络 爬 虫 程 序
2 . 2
ꢀython
用 户 可 以 对 新 情 报 的 关 键 字 情 报 来 源 进 行 订 阅 后 台
、 ,
网 络 爬 虫 是 一 种 按 照 规 则 对
信 息 进 行 遍 历
,
Web
将 会 通 过 定 时 任 务 实 时 推 送 至 用 户 设 定 的 邮 箱
。
[ 3 ]
自 动 抓 取 万 维 网 信 息 的 程 序 或 脚 本
网 络 爬 虫 的 主 要
。
系 统 管 理 人 员 除 了 可 对 用 户 进 行 管 理 之 外
还 可
,
原 理 是 从 预 置 的 地 址 集 合 中 遍 历
URL
页 面 所 有
HTML
以 对 情 报 来 源 的
进 行 维 护 对 信 息 来 源 的
,
进
URL
URL
的 内 容 并 根 据 不 同 的 需 求 采 集 当 前 页 面 或 者 下
,
级 子
N
行 开 关 设 定
作 为 一 种 网 络 爬 虫 使 用 的 是 网 络
,
。
ꢀython
页 面 中 的 有 效 信 息 最 后 把 网 页 中 的 非 结 构 化 数 据 转 存
,
层 的
协 议 即 发 送 请 求 相 应 请 求 返 回 结 果
,
'
在
,
http
'
到 结 构 化 数 据 库 中 简 单 可 描 述 为 预 置
。 :
地 址
遍
->
URL
这 个 过 程 中 由 于 网 络 状 况 的 不 稳 定 以 及 对 方 服 务 器
,
历
页 面
获 取 有 效 信 息
结 构 化 存 储
。
HTML
->
->
中 提 供 了 十 分 强 大 的 能 够 操 作
ꢀython3
的 自 身 问 题 经 常 会 返 回
,
用 于 告 知
:
" 404 Bad Request
包 为
urllib
客 户 端 发 送 了 一 个 错 误 的 请 求 或 者
,
"
" 500 Internal
功 能 的 库 例 如 使 用
。 ,
能 够 打
URL
urllib . request . urlopen
服 务 器 遇 到 一 个 妨 碍 它 为 请 求 提 供 服 务
:
Server Error
开 并 爬 取 一 个 网 页 具 体 实 现 的 方 法 为
,
打 开 某 个 指
:
[ 5 ]
的 错 误 等 状 态 码
"
因 此 在 系 统 日 志 中 某 个
集
。
URL
定
地 址
获 取
返 回 对 象 并 读 取 其
URL
ResposneBody
细 化 加 工
,
HttpResponse
中 发 现 同 类 错 误 状 态 码 时 需 要 亲 自 验 证 该
,
是 否
URL
然 后 通 过 预 置 的 算 法 对 返 回 对 象 进 行 精
,
已 经 更 改 并 提 交 系 统 开 发 人 员 更 新 相 应
,
的 爬 虫
URL
在 实 际 爬 虫 程 序 从 网 页 抓 取 数 据 的 过 程
。
程 序
。
中
可 以 使 用
这 一
的 第 三 方 库
,
ꢀython
,
Beautiful Soup
案 例 实 现
以 抓 取 国 家 科 技 部 的 某 项 信 息 为 例
2 . 5
功 能 包 括 解 析
文 档
修 复 含
、
、
HTML XML
Beautiful Soup
程 序 实
,
ꢀython
有 未 闭 合 标 签 等 错 误 的 文 档
此 种 文 档 常 被 称 为
(
tag
现 方 式 如 以 下 步 骤
:
这 个 扩 展 包 为 待 解 析 的 页 面 创 建 一 棵 树 以 便
,
) 。
soup
构 造 浏 览 器 头 文 件 模 拟 浏 览 器 访 问 指 定
,
(
)
1
[ 4 ]
提 取 其 中 的 数 据 这 在 网 络 数 据 采 集 时 非 常 有 用
,
举
。
:
URL
一 个 简 单 例 子
:
url = " http : / / service . most . gov . cn / *** "
headers = { 'User - Agent' : 'Mozilla / 5 . 0 ꢁ Windows NT
10 . 0 ; Win64 ; x64 ) AppleWebKit / 537 . 36 ꢁ KHTML , like
Gecko ) Chrome / 64 . 0 . 3282 . 140 Safari / 537 . 36' }
分 析 页 面 源 代 码 找 出 具 有 唯 一 性 的
初 始 化
soup = BeautifulSoup ( html ) / /
其 中 得 到 的 可 以 理 解 为 把
页 面 中 的 树
soup
HTML
ꢀython
提 供 了 强 大 的
状 结 构 的 所 有 节 点 按 照 一 定 方 式 保 存 到
程 序 可
用 来
AꢀI
以 解 析 的 对 象
。
Beautiful Soup
结
(
)
,
2
HTML
class='title'
的 代 码 行 然 后 构 造 指 定 通 知 列 表 的 数 据 结 果 集 包 括 通
解 析 这 个
对 象 采 集 其 中 有 用 的 信 息
,
紧 接 着 上
。
soup
构
此 案 例 中 数 据 列 表 的 特 征 为 所 有 标 签 中
a
,
面 的 代 码 段
:
。
,
lists = soup . find_all ꢁ 'div' , class_ = 'page - link' )
for li in lists :
知 公 告 名 称 通 知 公 告 链 接 发 布 时 间 等 信 息
、 、 :
查 找 所 有
标
a
h1s = soup . find_all ꢁ 'h1' , limit = 12 ) #
titles . append ꢁ li . a . string )
签 中
的 语 句
class = ꢂtitleꢂ
这 个 变 量 获 取 了
对 象 中 所 有 的
的 值
lists
soup
css
科技视界
Science & Technology Vision
73
全部评论(0)