一、版本说明
YNews 使用 Python 3.7.0 编写,后端使用 Django 2.1.1,共爬取了人民网的 4136
篇新闻信息,并据此数据库建立了一个新闻搜索系统。
使用方法: YNews 目录下在控制台输入 python manage.py runserver,后在浏览器打开 http://127.0.0.1:8000/即可进入首页。
目录
一、版本说明 1
二、设计思路 1
1.新闻爬取与预处理部分 1
/data/getdata.py: 1
2.搜索后端及前端显示部分 1
三、功能说明 2
1.首页 2
2.搜索页 2
3.结果页 3
4.新闻详情页 5
二、设计思路
1.新闻爬取与预处理部分
/data/getdata.py:
爬取网页部分。从人民网首页 http://www.people.com.cn/开始,使用 HTMLParser 解析文件,将所有<a>标签的 href 属性值,即 url 链接提取出来,加入 pagelist(此处判断是否重复加入,防止两个网页之间的死循环)。再从 pagelist 中依次访问这些 url,提取下一个网页内的 url 并加入 pagelist。同时,每次提取到 url 时,使用正则表达式判断此 url 是否为新闻页面的格式,如果是则将此 url 链接到的 html 文件保存下来,存储在/data 文件夹里,仅为了备份。为了解压方便,已删除这些 html 文件。
/data/cutdata.py:
内容预处理。得到所有新闻的 html 文件后,用 HTMLParser 将网页内新闻的标题、发布时间和正文提取出来,存入 news 字典中,key 为每篇新闻的 ID。针对网页内正文提取不干净的情况(如经常出现登录人民网、微信扫一扫和视频推荐等字样),适当地过滤文本内容。每篇新闻提取后的结果也储存在/data 文件里,仅为了方便人工查看。在得到 news 字典后,使用 jieba 分词系统,并对除了标点、\s 等内容外的每个词建立倒排索引 index 字典,key 为词,value 为含有该词的新闻 ID(可重复)。将 news 字典和 index 字典用
pickle 打包成 newspkg 和 indexpkg,方便传入 django 后端。
/data/simi.py:
此为推荐搜索的预处理。得到 news 字典后,使用 jieba 分词中的 tfidf 模型,即关键词获取(analyse.extract_tags),提取出每篇新闻的关键词。对每篇新闻,比对其它新闻的关键词与这篇新闻的相同词的个数,选出排名最高的前四篇,将其 ID 作为相关推荐新闻, 存储在 rcmd 字典里。将 rcmd 字典也 pickle 成文件 rcmd。