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

news2024/11/19 10:49:00

文章目录

    • 什么是爬虫
    • 爬虫的工作原理
    • 用途
    • 搜索引擎爬虫
    • 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.coloradmin.cn/o/1899932.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

二维树状数组区域查询

落谷4514 过关代码如下 #define _CRT_SECURE_NO_WARNINGS #include<bits/stdc.h> using namespace std; //#define int long longconst int N 2050; int t1[N][N], t2[N][N], t3[N][N], t4[N][N]; int lowbit(int x) { return x & (-x); } int n, m; void update(…

将循环转化为递归的三种方法,求1+2+3……+n等差数列

解法一&#xff1a;使用公共变量s&#xff0c;递归循环1~n加到s上 #include<bits/stdc.h> using namespace std; int n,s; void fun(int i){if(i<n){ssi;fun(i1);}}int main(){cin>>n;fun(1);cout<<s;return 0; } 解法二&#xff1a;通过层层累加&#x…

Vue的民族民俗文化分享平台-计算机毕业设计源码22552

基于Vue的民族民俗文化分享平台设计与实现 摘 要 本文介绍了一种基于Vue.js前端框架和Express后端框架的民族民俗文化分享平台的设计和实现。该平台旨在通过线上方式&#xff0c;促进民族民俗文化的传播与分享&#xff0c;增强公众对多元文化的了解和认同。 平台为普通用户提供…

如何第一次从零上传项目到GitLab

嗨&#xff0c;我是兰若&#xff0c;今天想给大家说下&#xff0c;如何上传一个完整的项目到与LDAP集成的GitLab&#xff0c;也就是说这个项目之前是不在git上面的&#xff0c;这是第一次上传&#xff0c;这样上传上去之后&#xff0c;其他小伙伴就可以根据你这个项目的git地址…

L1218-L5298清零软件使用图解

清零前请取消打印任务&#xff0c;打印机用USB线接电脑并开启 双击[Resetter.exe]启动软件,点击[Select],选择Port打印机型号&#xff0c;然后点[OK]&#xff0c;如图。 [如果port下拉列表中找不到你的打印机&#xff0c;请更换USB接口&#xff0c;并重新开打印机重试。] 2.…

C语言自定义类型——联合体、枚举

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 前言一、联合体&#xff08;一&#xff09;、联合体的声明&#xff08;二&#xff09;、联合体的特点&#xff08;三&#xff09;、联合体大小的计算&#xff01;&a…

在本地运行React集成TypeScript的项目

首先问ChatGPT&#xff0c;贴一段TypeScript代码&#xff0c;问ChatGPT&#xff1a;要运行以上代码&#xff0c;该怎么操作&#xff1f; ChatGPT给出了详细步骤&#xff0c;下面是实际操作&#xff1a; 创建一个react项目&#xff1a; npx create-react-app yuanyu-timeline …

js函数扩展内容---多参数,函数属性,字符串生成函数

1.多参数 在js中&#xff0c;Math.max()方法可以接受任意数量的参数&#xff0c; Math.max(1,2,3,4);//4 Math.max(1,2,3,4,5,6,7,8,9,10)//10 在max方法里面有一个rest参数&#xff0c;它接受了所有参数全部合成到了一个number数组里面&#xff0c; function rest(a,b,...a…

在Linux系统中配置GitHub的SSH公钥

在Linux系统中配置GitHub的SSH公钥&#xff0c;可以让您无需频繁输入密码即可与GitHub仓库进行交互&#xff0c;提高工作效率。以下是配置步骤: 第一步&#xff1a; 检查SSH密钥是否存在 首先&#xff0c;检查您的用户目录下的.ssh文件夹中是否已有SSH密钥。打开终端&#xff0…

openrestry中的hello world

目录 概述实践部署openrestry脚本效果验证 概述 此篇将在 k8s 运行起一个 openrestry   环境&#xff1a;k8s&#xff1a;1.27.9 &#xff0c;openrestry(docker镜像版本)&#xff1a; 1.25.x &#xff0c;k8s 与 ingress 请参考我的其它文章 离线镜像包请参考&#xff1a;op…

Wish卖家必读:如何安全有效地进行店铺测评

Wish以其独特的商业模式和先进的技术在电商领域独树一帜。作为北美和欧洲最大的移动电商平台之一&#xff0c;Wish拥有庞大的用户基础&#xff0c;其中90%的卖家来自中国&#xff0c;这不仅显示了其在全球电商市场中的影响力&#xff0c;也反映了其对中国卖家的吸引力。 Wish平…

微信小程序UGC类功能场景内容安全识别检测实现方案

概念普及 最近开发了一个小程序&#xff0c;属于同城信息发布类的&#xff0c;提交上架的时候&#xff0c;说需要补充社交-笔记类目。 补充完再次提审&#xff0c;又说是项目包含UGC类功能场景。所谓的UGC类功能&#xff0c;就是指用户可以在平台上自由发布信息&#xff0c;这…

创新引领未来,智慧水利在路上:数字孪生技术为水库管理开辟新机遇,带来新挑战,引领水利行业迈向智能化新纪元

目录 前言 一、数字孪生技术概述 二、新机遇&#xff1a;数字孪生技术如何重塑水库管理 1、精准预测&#xff0c;科学调度 2、智能监测&#xff0c;及时预警 3、优化资源配置&#xff0c;提升管理效率 4、促进公众参与&#xff0c;增强透明度 三、新挑战&#xff1a;数字…

【C语言小知识】getchar与putchar

getchar与putchar getchar介绍putchar介绍总结 在学习c语言阶段存在着许多要求输入数值的例子&#xff0c;在输入字符时&#xff0c;如果使用scanf()和printf()根据%c转换说明读写字符&#xff0c;接下来介绍一堆字符输入/输出函数&#xff1a;getchar()和putchar()。 getchar…

nacos源码 nacos注册中心1.4.x 源码 nacos源码如何下载 nacos 客户端源码下载地址 nacos discovery下载地址(一)

首先&#xff0c;发现很多解读文章对核心点讲解的很多&#xff0c;但是我感觉没讲全&#xff0c;记录下&#xff0c;我自己看源码时候一些心得 1. 读源码第一步&#xff0c;先去github, issue, 官网&#xff1a; 1.1 github : https://github.com/alibaba/…

R语言数据分析案例42-基于时间序列模型对股票预测分析和研究

一、研究背景和意义 随着全球经济的不断发展和数字化转型的加速推进&#xff0c;科技公司在全球市场中扮演着日益重要的角色。其中&#xff0c;中国的阿里巴巴集团作为全球最大的电子商务公司之一&#xff0c;其业务范围覆盖电子商务、云计算、金融科技等多个领域。由于其在中…

盘点各个国家的国宝

中国&#xff1a;熊猫 熊猫已有800万年的历史&#xff0c;和它们同时代的动物都已灭绝&#xff0c;大熊猫生存至今成为“活化石”。 俄罗斯&#xff1a;北极熊 北极熊是世界上最大的陆地食肉动物&#xff0c;体型巨大&#xff0c;性格凶猛。 美国&#xff1a;白头海雕 白头海雕…

python基础语法 006 内置函数

1 内置函数 材料参考&#xff1a;内置函数 — Python 3.12.4 文档 Python 解释器内置了很多函数和类型&#xff0c;任何时候都能直接使用 内置函数有无返回值&#xff0c;是python自己定义&#xff0c;不能以偏概全说都有返回值 以下为较为常用的内置函数&#xff0c;欢迎补充…

docker 重要且常用命令大全

本文将总结一些常见的重要的docker命令&#xff0c;以作备忘。后续如果有新的比较常用重要的也会更新进来。欢迎补充。 docker服务管理 首先我们要解释一下&#xff1a;systemctl和docker命令的不同 systemctl&#xff1a;是许多 Linux 发行版中默认的初始化系统和服务管理器。…

transformer初探

transformer初探 self-attentionmultihead-attentionencoderdecoder self-attention 其实就是三个矩阵&#xff0c; W q W_q Wq​、 W k W_k Wk​、 W v W_v Wv​&#xff0c;这三个矩阵就是需要训练的参数。分别得到每个token对应的 q q q k k k v v v&#xff0c;其中 q …