前言
这是我第一次尝试写爬虫,爬虫代码肯定有很多地方写得不太好,不过思路大致是这个样子,之后我还会做些优化。
在这里我用的vscode写的一个新闻网站的爬虫。
可以自行安装vscode。
开始之前还要做些准备工作。
一、node.js的安装
Windows下https://nodejs.org/ 官网下载安装最新的LTS版本。
MAC OS下载相应的pkg包安装。
Linux下载tar.gz包解压运行。
特殊linux版本或者嵌入式系统(比如树莓派系统)可下载源码编译。
具体安装例子见:
https://www.runoob.com/nodejs/nodejs-install-setup.html
二、mysql的安装
https://dev.mysql.com/downloads/mysql/
在这里下载安装包后将其解压到c:\mysql文件夹。
然后以管理员身份打开命令行。

然后自己动手安装配置好后就可以开始使用了
进入mysql后可创建一个数据库crawl,然后再创建一个表fetches。
新建文件fetches.sql。

然后就可以拷贝到命令行里。

三、确定爬取网页
我选取的是新华网http://www.xinhuanet.com/
四、查看分析网页源码
在该新闻网页右键查看源代码。
如:
分析我们需要爬取的内容。
五、开始写爬虫
npm···

我们需要先在终端输入npm i request npm i cheerio npm i iconv-lite npm i data-utils;
来安装这些我们需要的包。
下面就是爬虫里我们要引用的包
代码如下(示例):
var fs = require('fs');
var myRequest = require('request')//获取网页内容
var myCheerio = require('cheerio')//筛选网页信息
var myIconv = require('iconv-lite')
require('date-utils');
Node调用mysql
npm install mysql;
创建mysql.js文件
代码如下(示例):
var mysql = require("mysql");
var pool = mysql.createPool({
host: '127.0.0.1',
user: 'root',
password: 'root',
database: 'crawl'
});
var query = function(sql, sqlparam, callback) {
pool.getConnection(function(err, conn) {
if (err) {
callback(err, null, null);
} else {
conn.query(sql, sqlparam, function(qerr, vals, fields) {
conn.release(); //释放连接
callback(qerr, vals, fields); //事件驱动回调
});
}
});
};
var query_noparam = function(sql, callback) {
pool.getConnection(function(err, conn) {
if (err) {
callback(err, null, null);
} else {
conn.query(sql, function(qerr, vals, fields) {
conn.release(); //释放连接
callback(qerr, vals, fields); //事件驱动回调
});
}
});
};
exports.query = query;
exports.query_noparam = query_noparam;
定义要访问的网站
var source_name = "新华网";
var myEncoding = "utf-8";
var seedURL = 'http://www.xinhuanet.com/';
定义新闻页面里具体的元素的读取方式
定义哪些url可以作为新闻页面
var seedURL_format = "$('a')";
var keywords_format = " $('meta[name=\"keywords\"]').eq(0).attr(\"content\")";
var title_format = "$('title').text()";
var author_format = "$('.editor').text()";
var content_format = "$('.left_zw').text()";
var date_format = "$('.info').text()";
var desc_format = " $('meta[name=\"description\"]').eq(0).attr(\"content\")";
var source_format = "$('#source_baidu').text()";
var url_reg = /\d{4}-\d{2}\/\d{2}\//;
var regExp = /((\d{4}|\d{2})(\-|\/|\.)\d{1,2}\3\d{1,2})|(\d{4}年\d{1,2}月\d{1,2}日)/
url_reg后面的正则表达式可以根据新闻网页链接的特征表示。
我这里通过链接上有年月日的时间这个特征来表示的。
构造一个模仿浏览器的request
//request模块异步fetch url
function request(url, callback) {
var options = {
url

最低0.47元/天 解锁文章
1976

被折叠的 条评论
为什么被折叠?



