python爬虫原理及源码解析(入门)

news/2025/1/16 1:57:53/

目录

    • 一、爬虫是什么?
    • 二、爬虫的基本原理
    • 三、HTTP协议与响应
    • 4、爬虫实现源码

一、爬虫是什么?

​ 如果将互联网比作一张大的蜘蛛网,数据便是存放在蜘蛛网的各个节点,而爬虫就是一只小蜘蛛,沿着网络抓取自己的猎物(数据)爬虫指的是:向网站发起请求,获取资源后分析并提取有用数据的程序。

爬虫能通过网址获得网络中的数据、然后根据目标解析数据、存储目标信息,可以节省大量的人力物力,简单地说,网络爬虫就是获取互联网公开数据的自动化工具,像百度、google本质上就是超级爬虫,百度搜索引擎的爬虫叫作百度蜘蛛(Baiduspider)。百度蜘蛛每天会在海量的互联网信息中进行爬取,爬取优质信息并收录,当用户在百度搜索引擎上检索对应关键词时,百度将对关键词进行分析处理,从收录的网页中找出相关网页,按照一定的排名规则进行排序并将结果展现给用户。

二、爬虫的基本原理

在这里插入图片描述

网络爬虫,基本原理就是在爬虫程序得到URL(链接),向目标服务器发起HTTP请求访问,然后目标服务器返回响应结果,爬虫客户端收到响应并从中提取数据,再进行数据清洗、数据存储工作。

  • 从技术层面来说就是 通过程序模拟浏览器请求站点的行为,把站点返回的HTML代码/JSON数据/二进制数据(图片、视频) 爬到本地,进而提取自己需要的数据,存放起来使用;

三、HTTP协议与响应

爬虫要向URL发送请求,那么就要依赖于HTTP/HTTPS协议,HTTPS比HTTO更安全,但性能更低

HTTP(Hypertext Transfer Protocol)协议又称超文本传输协议,它是一种客户端与服务器之间的请求-响应协议,比如 浏览器就是可以被看作客户端,在浏览器地址栏输入想访问的网址,浏览器就会向该链接的服务器发送访问请求,然后等待服务返回给浏览器响应

在这里插入图片描述

HTTP有不同的请求方法,最常见的两种是GET和POST

  • GET方法用于获取数据,如向网页发送get请求得到网页类容
  • POST方法用于创建数据,如在浏览器中提交表单信息时,浏览器会发送POST请求

一个完整的HTTP请求数据里面包含三部分类容:请求行、请求头、请求体

请求行

在这里插入图片描述

在以上URL请求链接中www.douban.com域名后的第一个斜杠表示资源路径的根,所以/movie/top250就是要访问的资源路径,在请求行中可以添加查询参数,可以传递给服务器额外的信息。请求行中的HTTP/1.1表示HTTP的协议版本

请求头

在这里插入图片描述

用于告知客户端的相关信息,比如请求时浏览器发出的还是其它程序发出来的,如果是浏览器的话则展示类型、版本等等信息

请求体

请求体里面可以放客户端传给服务器的其它任意数据,但get方法的请求体一般是空的

4、爬虫实现源码

以下使用的作为示范的编译器是PyCharm

引入第三方库

首先引入requests与bs4的第三方库

在这里插入图片描述

引入requests

requests是Python中可以用代码来模拟发送网络请求,并得到响应数据的一个第三方库requests

在终端(terminal)输入:pip install requests

显示此信息表示安装成功

在这里插入图片描述
引入bs4

BeautifulSoup又称bs4,和lxml一样,是一个html的解析器,主要功能也是解析和提取数据

在终端(terminal)输入:pip install bs4

显示此信息表示安装成功
在这里插入图片描述

编写简易爬虫

以下爬虫是扒取豆瓣电影Top250的信息

源码

import requests
from bs4 import BeautifulSoup# 修改请求头中的User-Agent参数 以达到模拟用户访问的效果
headers = {"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/112.0.0.0 ""Safari/537.36 Edg/112.0.1722.48"
}
# 循环判断 获取分页数据 从0-250 每次分页加25值
for start_num in range(0, 250, 25):# get方式请求链接 并扒取html数据response = requests.get(f"https://movie.douban.com/top250?start={start_num}", headers=headers)html = response.text# 使用BeautifulSoup方法 获取htmlsoup = BeautifulSoup(html, "html.parser")# 指定span标签all_title = soup.findAll("span", attrs={"class": "title"})# 循环html标签下的 span标签for title in all_title:# 声明索引值title_string = title.string# if判断 不趴取span标签中 含下滑线/if "/" not in title_string:# 打印索引值print(title_string)

以上爬虫代码扒的页面数据所以要观察 页面的html元素

进入https://movie.douban.com/top250链接 f12查看页面的html元素 选择到要扒的数据 可以看到

该条数据(肖申克的救赎)是在span标签里且class值为title的元素 然后用这些条件指定到该标签的值

soup.findAll(“span”, attrs={“class”: “title”})

在这里插入图片描述

分页扒取数据

在跳转下一页时观察 请求行的变化

在这里插入图片描述

可以看出多了 start=75 的请求参数,此请求参数不同则跳转的分页页面也不同

然后就是for循环遍历了,敲几遍很好理解


http://www.ppmy.cn/news/47501.html

相关文章

开启虚拟机出现报错:“此主机支持 Intel VT-x,但 Intel VT-x 处于禁用状态”

🍁博主简介 🏅云计算领域优质创作者   🏅华为云开发者社区专家博主   🏅阿里云开发者社区专家博主 💊交流社区:运维交流社区 欢迎大家的加入! 文章目录 报错原因解决方式(这里以…

Dart进阶

Dart 是一种用于构建应用程序的编程语言,它具有许多语法糖(Syntactic Sugar)特性,这些特性能够简化代码并提高开发效率。以下是 Dart 中一些常见的语法糖特性: 级联操作符(Cascade Notation)&a…

无限制翻译软件-中英互译字数无限

翻译软件是我们工作及学习中必不可少的工具,然而许多翻译软件在使用时常常会出现字数限制的问题,这使得用户在处理长文本和大量文本时变得十分麻烦。如果你也遇到了类似的问题,那么哪个翻译软件不限制字数将为您带来全新的翻译体验。 以下是我们的哪个翻…

2023年4月18面试题目分享(笔试+面试)

武汉某上市公司的面试分享 一、笔试题目 1.“”和”equals“方法的区别? 2.是否可以从一个static方法内部发出对非static方法的调用以及为什么? 3.Integer和int的区别? 4.重载和重写的区别? 5.C中构造器Constructor是否可以被ov…

Windows10的Ubuntu上搭建Python3.11的wxPython4开发环境

第一步,现在windows10上安装Ubuntu 20.04.5 LTS; 第二步,下载Python3.11.2的源代码,然后编译安装; 第三步,下载pip安装工具; 第四步,安装wxPython pip3 install -U wxPython 结…

无线技术有哪些专业术语,看完本文=半个无线专家

无线技术是指通过无线电波或光波等无线传输媒介,实现信息、数据或信号的传递和通信的技术领域。在无线技术领域中,有许多专业术语用于描述和标识不同的技术和概念。 以下是常见的无线技术专业术语的简介: Wi-Fi(无线局域网&#…

我好像发现了PMP通关密码,这14页纸直接背!

备考PMP的宝子们一定要用上这份通关口诀哦! 一周就能背完的PMP考试技巧只有14页纸,共分成了4大模块,完全不用担心看不懂,需要的朋友可以戳下面的卡片在群文件下载,直接打印出来就能背哦,没有任何套路&…

【华为OD机试真题 C++】1066 - 新工号中数字的最短长度 | 机试题+算法思路+考点+代码解析

文章目录 一、题目🔸题目描述🔸输入输出🔸样例1🔸样例2🔸样例3 二、代码参考 作者:KJ.JK 🌈 🌈 🌈 🌈 🌈 🌈 🌈 &#x1f…