当前位置:网站首页 > 数据科学与大数据 > 正文

网络爬虫开发(一)-爬虫基础——基本介绍-爬虫是请求网站并提取数据的自动化程序、爬虫的基本工作流程 & 实例之发送http请求-爬取网址的网页信息

网络爬虫开发(一)-爬虫基础——基本介绍-爬虫是请求网站并提取数据的自动化程序、爬虫的基本工作流程 & 实例之发送http请求-爬取网址的网页信息

网络爬虫开发

第1章 课程介绍

  • 什么是爬虫
  • 爬虫的意义
  • 课程内容
  • 前置知识

什么是爬虫

可以把互联网比做成一张“大网”,爬虫就是在这张大网上不断爬取信息的程序

所以一句话总结:爬虫是请求网站并提取数据的自动化程序

爬虫的基本工作流程如下:

  1. 向指定的URL发送http请求
  2. 获取响应(HTML、XML、JSON、二进制等数据)
  3. 处理数据(解析DOM、解析JSON等)
  4. 将处理好的数据进行存储

在这里插入图片描述

爬虫的意义

爬虫就是一个探测程序,它的基本功能就是模拟人的行为去各个网站转悠,点点按钮,找找数据,或者把看到的信息背回来。就像一只虫子在一幢楼里不知疲倦地爬来爬去。

你可以简单地想象:每个爬虫都是你的“分身”。就像孙悟空拔了一撮汗毛,吹出一堆猴子一样。

你每天使用的百度和Google,其实就是利用了这种爬虫技术:每天放出无数爬虫到各个网站,把他们的信息抓回来,存到数据库中等你来检索。
在这里插入图片描述

抢票软件,就相当于撒出去无数个分身,每一个分身都帮助你不断刷新 12306 网站的火车余票。一旦发现有票,就马上下单,然后对你喊:大爷快来付款呀。

在现实中几乎所有行业的网站都会被爬虫所 “骚扰”,而这些骚扰都是为了方便用户

在这里插入图片描述

当然,有些网站是不能被过分骚扰的,其中排第一的就是出行类行业。

12306之所以会出如此变态的验证码,就是因为被爬虫折磨的无可奈何

在这里插入图片描述

在这里插入图片描述

正所谓道高一尺魔高一丈,某些爬虫工具,为了解决这种变态验证码,甚至推出了“打码平台”

原理就是爬虫还是不断工作,但只要遇到二维码,就通过打码平台下发任务,打码平台另一边就雇佣一大堆网络闲人,只要看到有验证码来了,就人工选一下验证码,完美的让程序与人工结合!

课程内容及目标

  1. 爬虫简介
  2. 制作一个自动下载图片的小爬虫
  3. 使用Selenium爬取动态网站

前置知识

  1. js基础
  2. node基础

第2章 爬虫基础

学习目标:

  • http://web.itheima.com/teacher.html网站目标为例,最终目的是下载网站中所有老师的照片:

在这里插入图片描述

下载所有老师的照片,需要通过如下步骤实现:

  1. 发送http请求,获取整个网页内容
  2. 通过cheerio库对网页内容进行分析
  3. 提取img标签的src属性
  4. 使用download库进行批量图片下载

发送一个HTTP请求

学习目标:

  • 发送HTTP请求并获取相应

在学习爬虫之前,需要对HTTP请求充分了解,因为爬虫的原理就是发送请求到指定URL,获取响应后并处理

node官方api

node的核心模块 http模块即可发送请求,摘自node官网api:

在这里插入图片描述

由此可见只需要使用http.request()方法即可发送http请求

发送http请求案例

同学们也可以使用axios库来代替

代码如下:

// 引入http模块 const http = require('http') // 创建请求对象 let req = http.request('http://web.itheima.com/teacher.html', res => { 
    // 准备chunks let chunks = [] res.on('data', chunk => { 
    // 监听到数据就存储 chunks.push(chunk) }) res.on('end', () => { 
    // 结束数据监听时讲所有内容拼接 console.log(Buffer.concat(chunks).toString('utf-8')) }) }) // 发送请求 req.end() 

得到的结果就是整个HTML网页内容

实例

1、在新建test文件夹下新建package.json文件

test/package.json

{ 
    "name": "spider-demo", "version": "1.0.0", "description": "", "main": "index.js", "scripts": { 
    "test": "echo \"Error: no test specified\" && exit 1" }, "keywords": [], "author": "", "license": "ISC", "dependencies": { 
    "cheerio": "^1.0.0-rc.3", "download": "^7.1.0" } } 

2、在test文件夹中,打开命令行窗口,安装依赖包

npm i 

3、在test文件夹中,新建测试文件demo.js

test/demo.js

// 引入http模块 const http = require('http') // 创建请求对象 爬取的网址 let req = http.request('http://web.itheima.com/teacher.html', (res) => { 
    // 准备chunks let chunks = [] res.on('data', (chunk) => { 
    // 监听到数据就存储 chunks.push(chunk) }) res.on('end', () => { 
    // 结束数据监听时讲所有内容拼接 console.log(Buffer.concat(chunks).toString('utf-8')) }) }) // 发送请求 req.end() 

4、打开命令行终端,运行demo.js文件

node .\demo.js 

5、显示爬取的网页信息

到此这篇网络爬虫开发(一)-爬虫基础——基本介绍-爬虫是请求网站并提取数据的自动化程序、爬虫的基本工作流程 & 实例之发送http请求-爬取网址的网页信息的文章就介绍到这了,更多相关内容请继续浏览下面的相关推荐文章,希望大家都能在编程的领域有一番成就!

版权声明


相关文章:

  • vue3中,引入data数据方式 & 引入组件的2种方式2024-12-02 07:09:08
  • vue中组合式 API-依赖注入之provide和inject的用法(一)——功能-把一个祖先组件指定的数据和方法,传递给其所有子孙后代 & provide-提供或发送数据, inject-接收数据2024-12-02 07:09:08
  • vue中组合式 API-依赖注入之provide和inject的用法(二)——添加响应性 & 污染全局数据、破坏了单向数据流,vuex可追踪数据 & 三种通信方式之父子通信、兄弟通信、跨级通信2024-12-02 07:09:08
  • vue中组合式 API-依赖注入之provide和inject的用法(三)——实例之引用全局静态数据2024-12-02 07:09:08
  • axios请求本地json文件——调用路径只支持相对路径形式 & 设置、获取、清除sessionStorage & 跨组件通信之父组件有provide选项提供数据,子组件有inject选项来使用数据2024-12-02 07:09:08
  • Baas接口标准(四)-留言板案例——实现服务端之数据查询、数据变更 & vue-apollovue实现客户端之整合apollo调用接口基本步骤、查询数据并模板填充、添加留言信息、格式化时间2024-12-02 07:09:08
  • vue3封装表单组件(二)02之el-tree-select组件的使用——懒加载、数据回显 & el-tree和el-select的结合体2024-12-02 07:09:08
  • axios配置多个接口请求(二)——vue项目axios配置多个IP地址,并进行请求数据2024-12-02 07:09:08
  • vue3进阶(四)——export function导出定义数据和接口数据 &封装el-select组件 & 获取sessionStorage中的基准地址apiUrl & watch和toRefs写法2024-12-02 07:09:08
  • vue3中,方法之对象深拷贝、判断对象的数据类型2024-12-02 07:09:08
  • 全屏图片