2021-04-30

web编程期中大作业

爬虫实现

步骤1:知识储备

首先是知识储备,实现爬虫之前,我先学习了HTML,CSS,js,jQuery,mysql,正则表达式的相关知识,其中HTML用于实现前端,CSS用于美化2前端,js和jQuery用于实现主干程序,mysql用于创建本地数据库,将爬下来的文件储存以便在前端显示,正则表达式用于获取子网页网址。

步骤2:环境配置

首先,下载node.js

选择左侧版本下载即可,只需安装,无需过多特殊配置即可使用;

然后需要配置IIS,这个东西按照正常来说应该是无需配置即可直接使用的,但是实际操作过程中,当测试HTML,在Chrome中用地址访问本地文件时浏览器发生报错如下:

于是,我读IIS展开了调试:

搜索打开IIS管理器,并一路点击左侧小箭头,打开default web site界面

在右侧找到基本设置

原先出现问题的原因是物理路径不可用,这里显示的是已经更改好的版本,保证物理路径中不存在中文,且可被访问,解决问题;

然后,需要的是配置本地数据库mysql:

下载第一个轻量无需安装的版本即可。下载后,在c盘中创建一个mysql文件夹(方便找到),并将其安装入其中。

要注意的是,实际下载的是zip压缩包文件,需要解压才可使用。

然后开始配置,以管理员身份打开命令提示符:

然后打开mysql装入的文件夹:

之后,启动安装:输入命令mysqld –install;

初始化:mysqld --initialize --console,这里会生成一个初始密码;

然后启动数据库服务:net start mysql;

因为这里已经初始化过,所以图片中直接显示了服务已启动;

然后输入mysql -u root -v,登录数据库;

此处,命令行中显示Enter password,第一次登录时,输入之前显示的初始化密码即可;

进入后,将密码更改成自己的密码的,输入alter user 'root'@'localhost' identified by 'root'; ,这里‘’中的root 就是新的密码。使用quit退出数据库后,下一次登录,password中输入root即可;

然后我们需要授权从客户端中访问,输入指令:alter user 'root'@'localhost' identified with mysql_native_password by 'root';和flush privileges;

进入mysql后可创建一个数据库crawl,然后再创建一个表fetches,使用指令create database crawl;创建表格,然后输入use crowl以及如下指令

再输入show tables查看表格

到此为止,mysql就已经创建好了,接下来要做的是,让爬虫js文件可以调用这个数据库。

我们在爬虫文件所在文件夹下打开命令行,输入指令npm install mysql,在此创建数据库

然后,创建一个可以调用数据库的js文件,代码如下:

这样以后,在爬虫js文件中就可以通过var mysql = require(‘./mysql.js’)引包,调用相关函数以实现调用mysql。

至此,配置部分基本完成。

3.代码实现

首先呢,我么需要把网站中的内容爬如入数据库中:

建立模板,以网易新闻为例:

然后将我们的访问伪装成浏览器访问以防止被屏蔽:

接着,建立一个在进入一篇新闻网站后能读取页面中文章内容,标题,时间,作者,关键词等元素的函数,这个函数要查看页面的源代码并解析,通过选择器找到这些元素,选择器则要通过模板来更改,这里先只根据更改好的模板来展示代码:

然后,我们还需要一个函数,来进入每一个新闻页面,也就是说这个函数在进入新闻网站主页之后,要根据主页源代码查找到后面每一条新闻的网址:

根据这段代码,我们可以做到,将新闻文章爬取到数据库中,但是只做到如此,我们并不能根据想要的关键词查找文章,也做不到将爬下来的文章展示出来,所以我们还需要一个前端的输入想要查找的关键词、输出爬去得到的新闻标题的窗口:

首先我们创建一个HTML文件作为网页端(前端),代码如下:

然后,使用express建立后端用于实际查询:

这样就有了输入端口和后端处理程序;

不过为了较明朗的显示搜索结果,我们需要用express构建表格输出:

首先在js文件所在目录下用命令行输入express –e search_site构建网站框架:

因为这个网页需要访问数据库,所以将mysql文件放入文件夹内,便于调用;

接着,还需在对应文件夹下命令行运行命令npm install mysql –save将mysql包安装到该项目中,并且将依赖项保存进package.json里,再运行npm install将package.json中列举的依赖项全部安装,完成网站搭建。

然后用vscode打开该文件夹,对其中的/routes/index.js准备修改,修改为:

至此为止,一套完整的爬虫系统已经构建好。

使用方式如下:

先在search_site文件夹中打开命令行,命令行中输入node bin/www

然后打开Chrome浏览器,输入网址127.0.0.1:3030/search.html(因为之前爬了太多中新网的新闻,所以一搜索前边显示的都是中新网)

于是,爬虫文件成功实现!

4.更改模板,爬取更多新闻网站

首先我们看模板:

以网易新闻为例:

模板中需要更改的信息有:源名称(网易新闻),

网址:var seedURL = "https://news.163.com/"

字号:var myEncoding = "utf-8";

标题:var title_format = "$('title').text()";

内容:var content_format = "$('.post_body').text()";

发布时间:var date_format = "$('.post_info').text()";

获取子网站的正则表达式:var regExp = /(\d{4}(\-|\/|\.)\d{1,2}\2\d{1,2})/; 

以及不需要修改的关键词:var keywords_format = ' $(\'meta[name="keywords"]\').eq(0).attr("content")';和描述:var desc_format = ' $(\'meta[name="description"]\').eq(0).attr("content")';

获取一个网站源代码中这些关键词的流程如下:

首先直接将网页网址复制粘贴入网址中

然后获取主页面源代码,找到各个子页面网址,

可以看到,网址有各自相同又比较有特点的地方,如这里的article,于是将它编写成网址的正则表达式(这里就是/article/就可以)

然后分别找到其余信息,以时间为例:

复制时间并在子页面源代码中查找:

得到它的id或者类,得到选择器之后,代入模板即可;

对于这些模板中的元素,原文中存在的,找到并代入选择器,不存在的,将模板连同后面对应的搜索的函数一起删除即可。

随后,执行爬虫文件:

下方终端显示大量转码读取成功,即说明,爬虫已经将新闻网站爬入数据库,接下来在search_site文件夹中打开命令行,命令行中输入node bin/www,再打开Chrome浏览器,输入网址127.0.0.1:3030/search.html即可搜索并查看已爬得的新闻了!!

 

结束语

太难了,太难了!但是,它真的爬起来的感觉好爽!!!

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值