Python爬虫教程第1篇-基础知识

文章目录

    • 什么是爬虫
    • 爬虫的工作原理
    • 用途
    • 搜索引擎爬虫
    • Robots协议
    • HTTP的请求过程
    • URL的含义
    • HTTP常见请求头
    • 爬虫常用的技术

什么是爬虫

信息的交互是通过web网页、或者移动端等不同的客户端端形式进行交互,这个过程是一个人与网路正常的交互行为。而爬虫可以用来模拟人的一些行为去获取相应的数据,即模拟客户端发送网络请求,接收响应数据然后按照一定规则处理数据,这样自动化的抓取网络信息的程序被叫做网络爬虫(又被称为网页蜘蛛、网络机器人)。
在这里插入图片描述

来自维基百科的解释:爬虫

爬虫的工作原理

**1. 发起请求:**向目标网站发送HTTP或HTTPS请求。
**2. 获取响应:**接收服务器返回的响应数据,通常是HTML、JSON或XML格式。
**3. 解析数据:**使用正则表达式、BeautifulSoup、lxml等工具解析响应内容,提取有用信息。
**4. 存储数据:**将提取的数据保存到本地文件、数据库或云存储中。

用途

现在互联网的发展,网络上的数据海量已经无法形容,这些数据离我们也越来越近,将某些领域的数据通过提取处理然后通过大数据分析,人工智能处理或许很有价值。而如今大模型的火爆也家喻户晓了,而大模型的数据该如何来?爬虫就是其中重要的一环。

这里多说一点,AI当前的发展,目前大厂在卷模型,大模型的训练确实也不是普通人可以去做的事情,但是另外两点模型数据的输入和模型的应用这两块还需要很多的创新,也有很多的机会。所以从爬虫出发,获取到数据,可以训练自己的垂直领域的小模型,然后输出一些应用,其实价值很大

  • 搜索引擎的搜索数据
  • AI人工智能等模型数据的输入
  • 数据采集分析
  • 抢票
  • 商品价格记录等
    除了这些,还有很多用途,覆盖在各个领域方方面面。

搜索引擎爬虫

这一段摘自维基百科: https://zh.wikipedia.org/wiki/%E7%B6%B2%E8%B7%AF%E7%88%AC%E8%9F%B2

网络搜索引擎等站点通过爬虫软件更新自身的网站内容或其对其他网站的索引。网络爬虫可以将自己所访问的页面保存下来,以便搜索引擎事后生成索引供用户搜索。

网络爬虫始于一张被称作种子的统一资源地址(URL)列表。当网络爬虫访问这些统一资源定位器时,它们会甄别出页面上所有的超链接,并将它们写入一张“待访列表”,即所谓爬行疆域。此疆域上的URL将会被按照一套策略循环来访问。如果爬虫在执行的过程中复制归档和保存网站上的信息,这些档案通常储存,使他们可以较容易的被查看。阅读和浏览他们存储的网站上并即时更新的信息,这些被存储的网页又被称为“快照”。越大容量的网页意味着网络爬虫只能在给予的时间内下载越少部分的网页,所以要优先考虑其下载。高变化率意味着网页可能已经被更新或者被取代。一些服务器端软件生成的URL(统一资源定位符)也使得网络爬虫很难避免检索到重复内容。

但是互联网的资源卷帙浩繁,这也意味着网络爬虫只能在一定时间内下载有限数量的网页,因此它需要衡量优先级的下载方式。有时候网页出现、更新和消失的速度很快,也就是说网络爬虫下载的网页在几秒后就已经被修改或甚至删除了。这些都是网络爬虫设计师们所面临的两个问题。

再者,服务器端软件所生成的统一资源地址数量庞大,以致网络爬虫难免也会采集到重复的内容。根据超文本传输协议,无尽组合的参数所返回的页面中,只有很少一部分确实传回正确的内容。例如:数张快照陈列室的网站,可能通过几个参数,让用户选择相关快照:其一是通过四种方法对快照排序,其二是关于快照分辨率的的三种选择,其三是两种文件格式,另加一个用户可否提供内容的选择,这样对于同样的结果会有48种(432)不同的统一资源地址与其关联。这种数学组合替网络爬虫造成了麻烦,因为它们必须越过这些无关脚本变化的组合,寻找不重复的内容。

维基百科这段很好的解释了爬虫的一个大概的原理,当然除了搜索引擎这种通用的网络爬虫,更多的爬虫是针对某些特定网站进行数据收集的爬虫,而这些聚焦爬虫,我们使用到会更多一点。

Robots协议

爬虫相比于人,可以有更快的检索速度和更深的层次,所以,他们可能使一个站点瘫痪。不需要说一个单独的爬虫一秒钟要执行多条请求,下载大的文件。一个服务器也会很难响应多线程爬虫的请求。 就像Koster所注意的那样,爬虫的使用对很多工作都是很有用的,但是对一般的社区,也需要付出代价。使用爬虫的代价包括:

  • 网络资源:在很长一段时间,爬虫使用相当的带宽高度并行地工作。
  • 服务器超载:尤其是对给定服务器的访问过高时。
  • 质量糟糕的爬虫,可能导致服务器或者路由器瘫痪,或者会尝试下载自己无法处理的页面。
  • 个人爬虫,如果过多的人使用,可能导致网络或者服务器阻塞。

对这些问题的局部解决方法是漫游器排除协议(Robots exclusion protocol),也被称为robots.txt议定书[10],这份协议是让管理员指明网络服务器的不应该爬取的约定。这个标准没有包括重新访问一台服务器的间隔的建议,虽然设置访问间隔是避免服务器超载的最有效办法。最近的商业搜索引擎,如Google,Ask Jeeves,MSN和Yahoo可以在robots.txt中使用一个额外的 “Crawl-delay”参数来指明请求之间的延迟。

HTTP的请求过程

浏览器看到的网页页面是通过请求js、css等样式内容渲染出来的结果,但是在爬虫中,爬虫只会请求url地址,不会进行js和css内容的请求和加载,所以爬虫请求的页面和浏览器渲染出来的结果其实是不一样的。
还有一种是你可以直接拿到服务端的接口,可以直接请求接口,返回的数据一般是json,这样可以直接拿到原始数据的爬虫程序就简单一点,但是授权那块可能会比较麻烦一点。

URL的含义

url 的形式:scheme://host [:port#]/path/…/[?query-string][#anchor]

  1. scheme:协议 (例如:http, https, ftp)
  2. host:服务器的 IP 地址或者域名
  3. port:服务器的端口(如果是走协议默认端口,80 or 443)
  4. path:访问资源的路径
  5. query-string:参数,发送给 http 服务器的数据
  6. anchor:锚(跳转到网页的指定锚点位置)

HTTP常见请求头

很多网站为了禁止爬虫做了很多反爬措施,所以爬虫要完全模仿浏览器的行为才不会被那么轻松的检测出来,首先第一步要模仿的是浏览器发起HTTP请求的请求头:

  1. User-Agent:标识客户端的类型、操作系统、浏览器及其版本等信息。伪装成浏览器发送请求,避免被简单的反爬机制阻挡。这里使用了 Chrome 浏览器的 User-Agent 字符串。
  2. Accept:告诉服务器客户端能够处理的内容类型。
  3. Accept-Language:指定客户端希望接收的语言。
  4. Accept-Encoding:指定客户端能够处理的内容编码(通常包括 gzip、deflate 等)。
  5. Connection:控制连接的管理,例如 keep-alive 以保持连接。
  6. Referer:表示从哪个 URL 跳转到当前请求的 URL,某些网站会根据这个来判断请求的合法性。
  7. Cookies:包含之前从服务器收到的 cookies,如果有登录操作或需要会话管理,可以带上相关的 cookies。
import requests# 定义请求头
headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/114.0.0.0 Safari/537.36','Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8','Accept-Language': 'en-US,en;q=0.5','Accept-Encoding': 'gzip, deflate, br','Connection': 'keep-alive','Referer': 'https://www.example.com','Upgrade-Insecure-Requests': '1',# 如果需要,可以添加其他头,例如 Cookie# 'Cookie': 'your_cookie_here'
}# 发送 HTTP GET 请求
url = 'https://www.example.com'
response = requests.get(url, headers=headers)# 打印响应内容
print(response.text)

爬虫常用的技术

  1. Pyhton基础知识
  2. urllib库的使用
  3. 正则表达式的用法
  4. BeautifulSoup的使用
  5. 爬虫框架Scrapy的使用
    以上这些知识会在后面陆续更新。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/369985.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

SwiftUI 6.0(iOS 18.0)滚动视图新增的滚动阶段(Scroll Phase)监听功能趣谈

何曾几时,在 SwiftUI 开发中的秃头小码农们迫切需要一种能够读取当前滚动状态的方法。 在过去,他们往往需要借助于 UIKit 的神秘力量。不过这一切在 SwiftUI 6.0 中已成“沧海桑田”。 在本篇博文中,您将学到如下内容: 1. Scroll…

植物大战僵尸融合版最新版1.0下载及安装教程

《植物大战僵尸融合版》最新版1.0已经发布,为粉丝们带来了全新的游戏体验。这个版本由B站UP主蓝飘飘fly精心打造,引入了创新的植物融合玩法,让玩家可以享受策略和创意的结合。以下是游戏的详细介绍和安装指南: 游戏特色介绍 全新…

审核平台前端新老仓库迁移

背景 审核平台接入50业务,提供在线审核及离线质检、新人培训等核心能力,同时提供数据报表、资源追踪、知识库等工具。随着平台的飞速发展,越来越多的新业务正在或即将接入审核平台,日均页面浏览量为百万级别。如今审核平台已是公司…

可验证算法在招投标领域的专家“盲抽”中的标段识别码加密应用研究

摘要 在招投标过程中,标段(包)识别码的安全性至关重要。本文提出了一种基于可验证算法的标段识别码加密方法,以确保其在专家“盲抽”过程中的保密性和可信性。通过对不同表的标段识别码进行全量加密,并通过匹配验证其…

【Nginx】docker运行Nginx及配置

Nginx镜像的获取 直接从Docker Hub拉取Nginx镜像通过Dockerfile构建Nginx镜像后拉取 二者区别 主要区别在于定制化程度和构建过程的控制: 直接拉取Nginx镜像: 简便性:直接使用docker pull nginx命令可以快速拉取官方的Nginx镜像。这个过程…

SpringBoot 启动流程四

SpringBoot启动流程四 前面这个创建对象是初始化SpringApplication对象 是加载了SpringBoot程序的所有相关配置 我们接下来要将这个run方法 run过程是一个运行 初始化容器 我们看我们的运行结果是得到一个ConfigurableApplicationContext对象 package com.bigdata1421.star…

【Android】Android基础--显式Intent和隐式Intent

人不走空 🌈个人主页:人不走空 💖系列专栏:算法专题 ⏰诗词歌赋:斯是陋室,惟吾德馨 目录 🌈个人主页:人不走空 💖系列专栏:算法专题 ⏰诗词歌…

STM32和DHT11使用显示温湿度度(代码理解)+单总线协议

基于STM32CT,利用DHT11采集温湿度数据,在OLED上显示。一定要阅读DHT11数据手册。 1、 DHT11温湿度传感器 引脚说明 1、VDD 供电3.3~5.5V DC 2、DATA 串行数据,单总线 3、NC 空脚 4、GND 接地,电源负极 硬件电路 微…

【Linux进程】进程优先级 Linux 2.6内核进程的调度

前言 进程是资源分配的基本单位, 在OS中存在这很多的进程, 那么就必然存在着资源竞争的问题, 操作系统是如何进行资源分配的? 对于多个进程同时运行, 操作系统又是如何调度达到并发呢? 本文将以Linux kernel 2.6为例 , 向大家介绍进程在操作系统中 (OS) 的调度原理; 1. 进程优…

嵌入式linux面试1

1. linux 1.1. Window系统和Linux系统的区别 linux区分大小写windows在dos(磁盘操作系统)界面命令下不区分大小写; 1.2. 文件格式区分 windows用扩展名区分文件;如.exe代表执行文件,.txt代表文本文件,.…

.net 调用海康SDK的跨平台解决方案

📢欢迎点赞 :👍 收藏 ⭐留言 📝 如有错误敬请指正,赐人玫瑰,手留余香!📢本文作者:由webmote 原创📢作者格言:新的征程,我们面对的不仅仅是技术还有人心,人心不可测,海水不可量,唯有技术,才是深沉黑夜中的一座闪烁的灯塔序言 上2篇海康SDK使用以及常见的坑…

玩转Easysearch语法

Elasticsearch 是一个基于Apache Lucene的开源分布式搜索和分析引擎,广泛应用于全文搜索、结构化搜索、分析等多种场景。 Easysearch 作为Elasticsearch 的国产化替代方案,不仅保持了与原生Elasticsearch 的高度兼容性,还在功能、性能、稳定性…

Python基础小知识问答系列-高效遍历多个不同类型元素的迭代器

1. 问题: 当需要对多个迭代器进行相同遍历操作时,如何避免因为迭代器之间的类型或者迭代器元素 数量过大引发的问题? 2. 解决方法: 使用itertools模块中的chain函数。 示例: from itertools import chainlist_a [2,…

C语言之Const关键字与指针

目录 1 前言2 变量与指针的储存方式3 const int *var;int *const var;const int *const var;理解与区分4 总结 1 前言 实际开发过程中经常遇到const关键字作用于指针的情况,例如:const int *var;int *const var;const…

【前端】从零开始学习编写HTML

目录 一、什么是前端 二、什么是HTML 三、HTML文件的基本结构 四、HTML常见标签 4.1 注释标签 4.2 标题标签 4.3 段落标签 4.4 换行标签 4.5 格式化标签 4.6 图片标签 4.7 超链接标签 4.8 表格标签 4.9 列表标签 4.10 表单标签 (1)form标…

【vue动态组件】VUE使用component :is 实现在多个组件间来回切换

VUE使用component :is 实现在多个组件间来回切换 component :is 动态父子组件传值 相关代码实现&#xff1a; <component:is"vuecomponent"></component>import componentA from xxx; import componentB from xxx; import componentC from xxx;switch(…

电脑f盘的数据回收站清空了能恢复吗

随着信息技术的飞速发展&#xff0c;电脑已成为我们日常生活和工作中不可或缺的设备。然而&#xff0c;数据的丢失或误删往往会给人们带来极大的困扰。尤其是当F盘的数据在回收站被清空后&#xff0c;许多人会陷入绝望&#xff0c;认为这些数据已无法挽回。但事实真的如此吗&am…

windows server2016搭建AD域服务器

文章目录 一、背景二、搭建AD域服务器步骤三、生成可供java程序使用的keystore文件四、导出某用户的keytab文件五、主机配置hosts文件六、主机确认是否能ping通本人其他相关文章链接 一、背景 亲测可用,之前搜索了很多博客&#xff0c;啥样的都有&#xff0c;就是不介绍报错以…

STM32-I2C硬件外设

本博文建议与我上一篇I2C 通信协议​​​​​​共同理解 合成一套关于I2C软硬件体系 STM32内部集成了硬件I2C收发电路&#xff0c;可以由硬件自动执行时钟生成、起始终止条件生成、应答位收发、数据收发等功能&#xff0c;减轻CPU的负担 特点&#xff1a; 多主机功能&#x…

利用border绘制三角技巧

绘制三角形的效果如图 <html lang"zh-cn"> <head><meta charset"UTF-8"><title>demo</title><style>* {margin: 0;padding: 0;}.box {/* 盒子宽高改成零就变成三角形 &#xff0c;需要哪个方向的三角形就设置哪个方向…