一、初始爬虫

news/2025/2/24 14:25:45

1.爬虫的相关概念

1.1 什么是爬虫

网络爬虫(又被称为网页蜘蛛,网络机器人)就是模拟浏览器发送网络请求,接收请求响应,一种按照一定的规则,自动地爬取互联网信息的程序。

原则上,只要是浏览器(客户端)能做的事情,爬虫都能够做。

1.2 如何获取爬虫程序

  • 下载其他公司开发的通用爬虫(八爪鱼)

  • 开发人员自己编写

1.3 区别

通用爬虫:可以提取大多数网站的数据,但是对于网站中某些特殊数据的提取范式没有实现

自定义爬虫:可以针对某一种网站自行开发符号要求的爬虫

1.4 开发语言

只要能够发送HTTP(S)请求的任何编程语言都是可以完成爬虫程序的,例如:C++、java、php、JavaScript等待,但是论爬虫开发效率一般都指的是python语言。

1.5 爬虫分类

根据抓取网站的数量不同,大致将爬虫分为两种:

  • 通用爬虫:通常指搜索引擎的爬虫,例如:https://www.baidu.com
  • 聚焦爬虫:针对特定网站的爬虫

2.爬虫流程

聚焦爬虫代码执行流程:

流程说明:

  1. 向起始地址发送请求,并获取响应
  2. 对响应结果进行数据提取
  3. 如果获取的数据是新的网站地址则继续发送请求并获取响应
  4. 如果获取的数据为页面需要的数据则完成数据保存

 

3.HTTP与HTTPS协议

目前大部分网站时基于HTTP与HTTPS进行网络交互的,在爬虫程序中也是发送网络协议来获取对应的网站信息,所以还是有必要了解网络协议。

3.1 HTTP与HTTPS相关概念

  • HTTP
    • 超文本传输协议
    • 默认端口号:80
  • HTTPS
    • HTTP+SSL(安全套接字层),即带有安全套接字层的超文本传输协议
    • 默认端口号:443

HTTPS比HTTP更安全,但是性能更低

HTTP协议的重要信息

我们想要给浏览器发送信息并显示,就必须要带上HTTP协议。HTTP协议中有一部分数据对爬虫程序来说非常重要。分别时请求头与响应头。

常见的请求头参数:

  1. Host(主机和端口号)
  2. Connection(链接类型)
  3. Upgrade-Insecure-Requests(升级为HTTPS请求)
  4. User-Agent(浏览器名称)
  5. Accept(传输文件类型)
  6. Referer(页面跳转处)
  7. Accept-Encoding(文件编解码格式)
  8. Cookie(Cookie信息)
  9. x-requested-with:XMLHttpRequest(表示该请求是Ajax异步请求)

响应头参数:

  1. Set-Cookie(对方服务器设置cookie到用户浏览器的缓存)

响应状态码:

  • 200:成功
  • 302:临时转移至新的url(一般会用GET,例如原本是POST则新的请求则是GET)
  • 307:临时转移至新的url(原本是POST则新的请求依然是POST)
  • 403:无请求权限
  • 404:找不到该页面
  • 500:服务器内部错误
  • 503:服务不可用,一般是被反爬

3.2 浏览器发送HTTP请求过程

  1. 客户端发送网站域名到DNS服务器
  2. DNS服务器返回IP地址到客户端
  3. 客户端根据返回的IP地址访问网站后端服务器并请求网站资源
  4. 网站后端服务器返回对应页面资源 

3.3 robots协议

网站通过Robots协议告诉搜索引擎哪些页面可以抓取,哪些页面不能抓取,但它仅仅是互联网中的约定而已,可以不用遵守。

3.4 谷歌浏览器插件

  • XPath Helper
  • Web Scraper
  • Toggle JavaScript
  • User-Agent Switcher for Chrome
  • EditThisCookie
  • SwitchSharp

插件下载地址:

  1. https://extfans.com/
  2. https://chrome.zzzmh.cn/#/index

3.5 请求测试软件

PostMan :   https://www.postman.com/downloads 

ApiPost : https://www.apipost.cn/download.html

4.编码

字符是各种文字和符号的总称,包括国家文字、标点符号、图形符号、数字等等。

字符集是多个字符的集合,字符集包括:ASCII、GB2312、Unicode等等。UTF-8是Unicode的实现方式之一。

Python3中的字符串:

  • str: unicode的呈现
  • bytes:字节类型,互联网上的数据都以二进制的方式传输的

str 与 bytes 类型的互相转换

  • str 使用 encode 方法转换为 bytes
str_code='abc'
print(type(str_code))

byte_code=str_code.encode()
print(type(byte_code))
  • bytes 使用 decode 方法转换为str
byte_code=b'abc'
print(type(byte_code))

str_code=byte_code.decode()
print(type(str_code))

注意:编码方式必须和解码方式一样,否则就会出现乱码问题。例如使用utf-8编码,那么就必须使用utf-8解码。

 


http://www.niftyadmin.cn/n/5864460.html

相关文章

《苍穹外卖》电商实战项目(java)知识点整理(P1~P65)【上】

史上最完整的《苍穹外卖》项目实操笔记,跟视频的每一P对应,全系列10万字,涵盖详细步骤与问题的解决方案。如果你操作到某一步卡壳,参考这篇,相信会带给你极大启发。 《苍穹外卖》项目实操笔记【中】:P66~P…

Django check_password原理

check_password 是 Django 提供的一个用于密码校验的函数,它的工作原理是基于密码哈希算法的特性。 Django 的 make_password 函数在生成密码哈希时,会使用一个随机的 salt(盐值)。这个 salt 会与密码一起进行哈希运算&#xff0…

游戏引擎学习第119天

仓库:https://gitee.com/mrxiao_com/2d_game_3 上一集回顾和今天的议程 如果你们还记得昨天的进展,我们刚刚完成了优化工作,目标是让某个程序能够尽可能快速地运行。我觉得现在可以说它已经快速运行了。虽然可能还没有达到最快的速度,但我们…

六十天前端强化训练之第一天HTML5语义化标签深度解析与博客搭建实战

欢迎来到编程星辰海的博客讲解 目录 一、语义化标签的核心价值 1.1 什么是语义化? 1.2 核心优势 二、语义标签详解与使用场景 2.1 布局容器标签 2.2 内容组织标签 三、博客结构搭建实战 3.1 完整HTML结构 3.2 核心结构解析 3.3 实现效果说明 四、学习要点…

50周学习go语言:第三周 流程控制与FizzBuzz实现

以下是第三周流程控制与FizzBuzz游戏的详细教程,包含完整语法讲解和分步实现指南: 第三周:流程控制与FizzBuzz实现 一、if/else条件判断 1. 基本语法 if 条件表达式 {// true时执行 } else if 其他条件 {// 其他分支 } else {// 默认分支 }…

【MySQL 一 数据库基础】深入解析 MySQL 的索引(2)

索引 MySQL中的页 为什么要使用页? 在.ibd文件中最重要的结构体就是Page(页),页是内存与磁盘交互的最小单元,默认大小为16KB,每次内存与磁盘的交互至少读取一页,,所以在磁盘中每个页内部的地址都是连续的; …

(五)趣学设计模式 之 建造者模式!

目录 一、 啥是建造者模式?二、 为什么要用建造者模式?三、 建造者模式怎么实现?四、 建造者模式的应用场景五、 建造者模式的优点和缺点六、 总结 🌟我的其他文章也讲解的比较有趣😁,如果喜欢博主的讲解方…

STM32的HAL库开发---ADC采集内部温度传感器

一、STM32内部温度传感器简介 二、温度计算方法 F1系列: 从数据手册中可以找到V25和Avg_Slope F4、F7、H7系列只是标准值不同,自行查阅手册 三、实验简要 1、功能描述 通过ADC1通道16采集芯片内部温度传感器的电压,将电压值换算成温度后&…