用js写个爬虫

前言

这是我第一次尝试写爬虫,爬虫代码肯定有很多地方写得不太好,不过思路大致是这个样子,之后我还会做些优化。
在这里我用的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
当使用 Node.js爬虫时,你可以使用一些流行的库来化开发过程。以下是一个 Node.js爬虫的基本示: 1. 首先,确保你已经安装了 Node.js。你可以从官方网站(https://nodejs.org)下载并安装最新版本。 2. 创建一个新的文件夹,并在终端中进入该文件夹。 3. 初始化 Node.js 项目并安装所需的库。在终端中运行以下命令: ``` npm init -y npm install axios cheerio ``` 这将初始化一个新的 Node.js 项目,并安装 axios 和 cheerio 两个库。axios 用于发送 HTTP 请求,cheerio 用于解析 HTML 数据。 4. 创建一个名为 `crawler.js` 的文件,并在其中编爬虫代码。以下是一个简单的示例,用于爬取指定网页的标题和链接: ```javascript const axios = require('axios'); const cheerio = require('cheerio'); async function fetchPageData() { try { const response = await axios.get('https://example.com'); // 替换为你要爬取的网页 URL const $ = cheerio.load(response.data); const titles = []; const links = []; $('a').each((index, element) => { titles.push($(element).text()); links.push($(element).attr('href')); }); console.log('Titles:', titles); console.log('Links:', links); } catch (error) { console.error('Error:', error); } } fetchPageData(); ``` 在上述代码中,我们使用 axios 发送 GET 请求获取指定网页的 HTML 内容,并使用 cheerio 将 HTML 数据加载为 DOM 文档。然后,我们使用 cheerio 提供的选择器语法来提取页面中的标题和链接信息,并将其打印到控制台。 5. 在终端中运行以下命令来执行爬虫代码: ``` node crawler.js ``` 爬虫将发送 HTTP 请求,解析网页内容,并将标题和链接打印到控制台上。 请注意,编爬虫时需要遵守网站的规则和法律。确保你的爬虫行为合法,并尊重网站的爬取策略(如 robots.txt)。此外,过度频繁或大量请求某个网站可能会对该网站造成负担或被视为滥用行为,请确保适度使用爬虫
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值