ThankNeko's Blog ThankNeko's Blog
首页
  • 操作系统

    • Linux基础
    • Linux服务
    • WindowsServer笔记
    • Ansible笔记
    • Shell笔记
  • 容器服务

    • Docker笔记
    • Kubernetes笔记
    • Git笔记
  • 数据库服务

    • MySQL笔记
    • ELK笔记
    • Redis笔记
  • 监控服务

    • Zabbix笔记
  • Web服务

    • Nginx笔记
    • Tomcat笔记
  • 数据处理

    • Kettle笔记
  • Python笔记
  • Bootstrap笔记
  • C笔记
  • C++笔记
  • Arduino笔记
  • 分类
  • 标签
  • 归档
  • 随笔
  • 关于
GitHub (opens new window)

Hoshinozora

尽人事,听天命。
首页
  • 操作系统

    • Linux基础
    • Linux服务
    • WindowsServer笔记
    • Ansible笔记
    • Shell笔记
  • 容器服务

    • Docker笔记
    • Kubernetes笔记
    • Git笔记
  • 数据库服务

    • MySQL笔记
    • ELK笔记
    • Redis笔记
  • 监控服务

    • Zabbix笔记
  • Web服务

    • Nginx笔记
    • Tomcat笔记
  • 数据处理

    • Kettle笔记
  • Python笔记
  • Bootstrap笔记
  • C笔记
  • C++笔记
  • Arduino笔记
  • 分类
  • 标签
  • 归档
  • 随笔
  • 关于
GitHub (opens new window)
  • Python笔记

    • 基础知识

    • 并发编程

    • 爬虫笔记

      • 爬虫相关介绍
        • 爬虫相关介绍
          • 爬虫介绍
          • 应用场景
          • 工作流程
          • 爬虫分类
          • 常见反爬虫措施
          • 爬虫常用库
        • 前端简介
          • 介绍
          • 前端基础
          • 软件开发架构
          • 浏览器与前端报错
        • HTTP协议
          • 介绍
          • 四大特性
          • 请求数据格式 (请求报文)
          • 响应数据格式 (响应报文)
          • 常见状态码
        • Socket实现Http服务端
      • Requests模块
      • BeautifulSoup模块
      • Xpath模块
      • DrissionPage模块
      • JS逆向基础
    • 模块笔记

    • 后端笔记

  • C笔记

  • C++笔记

  • Arduino笔记

  • Web笔记

  • Dev
  • Python笔记
  • 爬虫笔记
Hoshinozora
2025-10-30
目录

爬虫相关介绍

# 爬虫相关介绍

# 爬虫介绍

Python爬虫是一种自动化从互联网获取数据的技术,它通过编写程序实现自动访问网站并抓取所需的数据。主要通过代码模拟浏览器,向目标服务器发送请求,得到我们想要的数据。

# 应用场景

爬虫可以用于数据采集与挖掘、搜索引擎、价格比较与竞品分析、舆情监控与声誉管理、公共数据监测与分析、金融市场分析、学术研究和文献检索等。

# 工作流程

  1. 发送请求:

    • 爬虫首先向目标网站发送HTTP请求,请求特定的网页内容。
    • 通常使用GET或POST方法来获取网页数据。请求可能包含一些额外的参数,如请求头、Cookie等,以便模拟真实的浏览器行为。
  2. 获取响应:

    • 响应通常包含网页的HTML代码和其他相关信息,如状态码、响应头等。
    • 通过使用Python模块(如requests、selenium)可以获取到完整的响应内容。
  3. 解析内容:

    • 爬虫对获取到的网页内容进行解析,提取出需要的信息,如链接、文本、图片等。
    • 通过使用解析库(如BeautifulSoup、lxml)或者正则表达式等方式,对获取到的HTML代码进行解析。
  4. 存储数据:

    • 爬虫将提取到的数据存储到本地文件、数据库或者内存中,以备后续处理或展示。
    • 存储的方式可以依据具体需求和数据结构来进行选择,常用的存储方式包括文件、关系型数据库、非关系型数据库等。
  5. 跟踪链接:

    • 爬虫根据规则或算法,跟踪网页中的链接,继续获取更多的页面内容,形成一个网页抓取的链条。

# 爬虫分类

  1. 通用爬虫和定向爬虫:
    • 通用爬虫就是对整个互联网进行爬取。
    • 定向爬虫就是只针对特定的网站进行爬取。
  2. 基于规则的爬虫和基于机器学习的爬虫:
    • 基于规则的爬虫根据人工事先定义的规则提取数据。
    • 基于机器学习的爬虫通过机器学习算法自动提取数据。
  3. 单机爬虫和分布式爬虫:
    • 单机爬虫在单个计算机上进行爬取。
    • 分布式爬虫通过多台计算机进行爬取。

# 常见反爬虫措施

  1. 频率限制

    • 网站会针对某个IP地址或用户账号设置请求频率限制,如单位时间内只允许发送一定数量的请求。
    • 一旦超出限制,网站会对该IP或账号进行处罚,如暂时封禁或限制访问。
  2. 封IP和封账号

    • 网站可以通过监测异常行为,如频繁请求、高并发等来判断是否有恶意爬取行为,并对相关IP地址或账号进行封禁。
    • 为了规避封禁,爬虫可以使用代理池来随机切换IP地址,或使用大量小号(账号池)轮流发送请求。
  3. 请求头中带加密信息

    • 网站可能要求请求头中包含特定的加密信息,如Referer(来源页面地址)和User-Agent(浏览器标识),用于验证请求的合法性。
    • 爬虫需要模拟真实浏览器的请求头信息,以避免被检测为非法爬虫。
  4. 响应回来的数据是加密

    • 为了防止直接获取数据,网站可能会对返回的数据进行加密或编码,爬虫需要解密或解码才能获取到有效信息。
    • 这种情况下,爬虫可能需要分析加密算法或从其他渠道获取解密密钥。
  5. 验证码反扒

    • 网站为了防止机器自动注册、恶意爬取等行为,可能会在关键操作前设置验证码。
    • 爬虫需要通过第三方平台或自己破解验证码来进行自动化操作。
  6. JS加密

    • 网站可能使用JavaScript对核心代码进行了压缩和混淆,并添加了一些晦涩的加密方法。爬虫需要逆向工程来还原和理解这些加密算法,并编写相应的代码进行解密。
  7. 手机设备唯一ID号

    • 网站可能会根据爬虫请求的设备唯一标识符(例如IMEI、Android ID、iOS设备ID等)进行识别和限制。
    • 爬虫可能需要模拟不同设备的请求,或者通过修改设备信息达到绕过检测的效果。

# 爬虫常用库

  1. requests库

    用于发送HTTP请求,方便地发送GET、POST等请求,并获取响应。

  2. BeautifulSoup库

    用于解析HTML和XML文档,方便地提取其中的数据。

  3. Selenium库

    用于模拟浏览器行为,模拟用户在浏览器中的操作,如点击、输入等。

  4. Scrapy框架

    提供了一套完整的爬虫开发流程,包括发送请求、获取响应、解析响应、存储数据等步骤。

# 前端简介

# 介绍

任何与用户直接打交道的操作界面,都可以称之为前端。而前端框架是提前封装好了很多操作,只需要按固定的语法调用即可。

比如:电脑界面、手机界面、平板界面等。

# 前端基础

html:页面的内容、骨架

css:页面的样式、外观

JavaScript:页面的动态效果

# 软件开发架构

客户端/服务端 (C/S)

客户端和服务端通过Socket进行交互。

浏览器/服务端 (B/S)

1. 浏览器向服务端发送HTTP请求。
2. 服务端接收HTTP请求,并返回相关响应。
3. 浏览器接收响应,并根据特定的规则解析渲染成页面展示给用户。

# 浏览器与前端报错

即便前端代码错误发生报错,浏览器也不会轻易地就将其展示出来,因为浏览器是面向用户的。

所以报错只能通过开发者工具(F12) 进行查看。

# HTTP协议

# 介绍

超文本传输协议,用来规定服务端和浏览器之间数据交互的格式。

# 四大特性

  1. 基于请求/响应。

  2. 基于TCP/IP的应用层协议。

  3. 无状态。

    不保存任何一次请求响应的状态。

    所以有时需要借助一些专门用来记录状态的技术,cookie、session、token等。

  4. 无/短连接。

    请求一次响应一次,然后断开TCP连接。

# 请求数据格式 (请求报文)

请求首行

标识HTTP协议版本、当前请求方式(Get/Post)。

常用请求方式:

Get:一般用于向服务器要数据,也可以携带参数请求,参数放在url后面。

Post:一般用于向服务器提交数据。

请求头

一堆k,v键值对。

\r\n

用于标识分隔请求头和请求体。

请求体

向服务器提交数据时才会用到。

# 响应数据格式 (响应报文)

响应首行

标识HTTP协议版本、响应状态码。

响应头

一堆k,v键值对。

\r\n

用于标识分隔响应头和响应体。

响应体

服务端返回给浏览器的数据。

# 常见状态码

2xx

表示服务端接受到请求并成功响应了数据。

200:表示请求响应成功。

3xx

表示让客户端重定向。

301:永久重定向,浏览器会记录重定向URL,下次直接由浏览器去进行跳转,不再经过服务器

302:临时重定向,浏览器不会记录重定向的URL,每一次重定向都会经过服务器请求

4xx

表示请求错误。

403:当前请求不合法、或者没有访问权限。

404:请求资源不存在。

5xx

表示服务器内部错误。

# Socket实现Http服务端

# 实现例子

import socket
server = socket.socket()
server.bind(('127.0.0.1', 80))
server.listen(5)
while 1:
    conn, addr = server.accept()
    # 接受HTTP请求
    data = conn.recv(1024)
    print(data)
    # 返回HTTP响应
    up = b'HTTP/1.1 200 OK\r\nName: test\r\n\r\nHELLO WORLD!'
    with open('index.html', 'rb') as f:
        content = f.read()
        conn.send(up + content)
    conn.close()
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15

# 注意

我们通常是读取文件的数据来作为响应体的数据。

由于HTTP是无连接的协议,所以客户端接收到响应后,会立即关闭连接。所以服务端应该一次性将响应报文进行返回,然后关闭连接以释放系统资源。

#爬虫#HTTP
网络IO模型与协程
Requests模块

← 网络IO模型与协程 Requests模块→

最近更新
01
Vue路由
12-09
02
FastAPI实现用户管理
11-23
03
Tortoise ORM
11-23
更多文章>
Theme by Vdoing | Copyright © 2022-2026 Hoshinozora | MIT License
湘ICP备2022022820号-1
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式