1.1 以新闻中心—新浪网为例,介绍网站爬虫具体实现
1.2 查看新浪网的源代码https://news.sina.com.cn/
在新浪官网可以看到,链接都是存在<a href=>下的,发现子网页结构最后都是以类似 “/2021-04-26/doc-ikmyaawc1810143.shtml” 结尾。所以我们读取的时候,需要判断网页url以类似 /2021-04-26/doc-ikmyaawc1810143.shtml 为结尾。
1.3 点进子网页,查看子网页源代码
发现编码格式是utf-8, 找出需要爬取的内容包括标题,关键词,摘要,作者,发布时间和内容等,可以帮助确定爬取网站的正则表达式的书写。
1.4 爬虫实现
1.4.1 使用的工具包
1.4.2 爬虫最关键的部分还是正则表达式的书写
需要爬取的信息包括网页的url、新闻的关键词、新闻的标题、新闻发布的日期、新闻的作者、新闻的内容以及新闻的来源。查看网页源代码可以发现:
网页的url都是存在<a href=>下:
新闻的关键词,在meta标签下,name=“keywords”:
新闻的标题,在meta标签下,property=“og:title”:
新闻发布日期,在meta标签下,property=“article:published_time”:
新闻的作者,在meta标签下,property=“article:author”:
新闻的来源,在meta标签下,property=“og:url”
1.4.3 完整爬虫代码:
1.4.4 踩过的坑
1、正则表达式书写
刚开始由于对正则表达式的理解不够透彻,不太清楚具体如何判断网页url是否是以类似 /2021-04-26/doc-ikmyaawc1810143.shtml 为结尾,后来上网查阅资料,才知道用d{m}表示有n个数字,w{n}表示有n个字符,“/”这类特殊字符需要在前面加上转义字符。
2、爬取url错误
一开始爬取的url是:https://news.sina.com.cn/https://news.sina.com.cn/c/2021-04-27/doc-ikmxzfmk9303163.shtml,相比正确的url前面会多出https://news.sina.com.cn/这一段,经过思考发现问题所在,myURL将种子页面与当前页面又拼接在一起,所以才会多出前面那一段。
只需将红框部分改为myURL = href即可。
1.5 其他网站爬取
以相同思想爬取其他网站:
1.5.1 腾讯体育
子网页url:https://sports.qq.com/omn/20210428/20210428A0CQSA00.html
都是以/20210428/20210428A0CQSA00.html结尾
1.5.2 网易新闻
子网页url:https://www.163.com/news/article/G8MPODL30001899O.html
都是以G8MPODL30001899O.html结尾
2.1 在数据库中创建表
2.2 将爬取的相关信息存储在数据库中
2.3 在数据库查看相关插入结果
3.1 在数据库中查询是否在title中存在对应的查询词,按时间顺序返回结果
实现效果:对输入标题进行查询,后端返回在数据库中对应数据,并以表格形式展示在前端,提供翻页功能
对应url:http://127.0.0.1:3000/search_title.html
后端对应实现函数:
前端对应实现:
3.2 支持布尔查询
3.2.1 AND: http://127.0.0.1:3000/search_title_and.html
3.2.2 OR: http://127.0.0.1:3000/search_title_or.html
3.3 翻页功能实现
form-submit类下要素为查询数据的按钮(id=“submitButton”);
table-pagination类下的几个要素分别为向前翻页按钮、页码按钮、向后翻页按钮。
计算总页数,生成对应页码按钮,依次渲染每一页的数据内容,判断当前选择的页码对应的记录数是否超出范围,具体确定该如何渲染页面。
4.1 以表格形式展示关键词的时间热度
http://127.0.0.1:3000/search_keywords.html
实现效果:
后端实现:
前端实现:与之前title搜索完全类似
4.2 以图表形式展示关键词的热度分析及其他信息
4.2.1 不同author及对应的爬取信息条数
http://127.0.0.1:3000/graph.html