当前位置: 首页 > news >正文

Python网络爬虫从入门到实战

目录

引言

一、网络爬虫的概念

二、 网络爬虫的基本工作流程

(一)过程:

(二)安装requests模块和beautifulsoup4模块

(三)requests库的使用

1、requests库的基本介绍

2、导入requests库的具体语法格式如下:

3、requests库网页请求方法

4、requests库的-Response对象

(四)beautifulsoup4库的使用

1、beautifulsoup4库的基本介绍

2、导入BeautifulSoup库的具体语法格式如下:

3、beautifulsoup4库的常用操作

4、元素中的文本信息往往是有用信息,下面将介绍用BeautifulSoup类解析HTML页面中的有用信息,分为: 节点选择器 方法选择器

4.1 节点选择器

4.2 方法选择器

三、实战:电影排行爬取及分析

1、获取网页

2、解析网页

3、存储数据

总结


引言

        网络爬虫是自动从互联网上抓取信息的工具,其应用范围十分广泛,特别是在大数据分析、搜索引擎优化和信息采集等领域中具有重要作用。通过网络爬虫,我们能够快速获取大量网页数据,并利用数据分析工具对信息进行深入的解析与处理。这次实验旨在学习和实践如何使用Python中的requests和beautifulsoup4库,完成从网页获取数据、解析数据到存储数据的完整流程。

一、网络爬虫的概念

      网络爬虫(Web Crawler)是按照一定的规则,自动地抓取万维网(World Wide Web,WWW)并获取信息的程序或脚本。在浏览器的网页中,除了供用户阅读的文字信息外,还包括一些超链接,网络爬虫可以通经过网页中的超链接不断地获得网络上的其它页面。网络数据采集的过程像爬虫在网络上漫游,因此得名为网络爬虫。

二、 网络爬虫的基本工作流程

简单的网络爬虫通常分为以下三个部分的内容:

数据采集:即获取网页中的数据;

数据处理:即进行网页解析;

数据存储:即将有用的信息持久化。

(一)过程:

  • 设定抓取目标(初始URL)并获取页面。
  • 不断地爬取页面,直到满足停止爬取的条件。
  • 对于获取的页面,进行网页下载,获得网页中的数据。获得网页中的数据需要用到Python中的requests模块。
  • 获取网页中的数据后,需要对此数据进行解析。进行网页解析需要用到Python中的beautifulsoup4模块。
  • 对于网页解析出来的数据,可以对有用的信息进行存储。有用的信息,可以存储在文件中,也可以存储在数据库中,还可以进行可视化的展示。

(二)安装requests模块和beautifulsoup4模块

pip install requests

pip install beautifulsoup4

(三)requests库的使用

1、requests库的基本介绍

        requests库的本质就是封装了urllib3模块,它可以模拟浏览器的请求,编写过程更接近正常URL的访问过程。requests库的宗旨是服务于人类(for human beings),具有以下功能特性:

  • 支持URL数据自动编码;
  • 支持HTTP连接保持和连接池;
  • 支持使用Cookie保持会话;
  • 支持文件分块上传;
  • 支持自动确定相应内容的编码;
  • 支持连接超时处理和流数据下载。

2、导入requests库的具体语法格式如下:

import requests

3、requests库网页请求方法

requests库中包含与HTTP协议的请求相对应的方法,即网页请求方法。

例如:

使用requests库中的get()方法访问网址http://www.mobiletrain.org

import requests

r = requests.get("http://www.mobiletrain.org")

print(type(r))

通过get()方法访问网址,返回了一个Response对象

                                      <class 'requests.models.Response'>

4、requests库的-Response对象

Response对象代表的是响应内容,其属性如下表所示。

  1. import requests
  2. r = requests.get("http://www.mobiletrain.org")
  3. r.encoding = r.apparent_encoding  # 自动检测编码
  4. content = r.content  # 使用content属性获取二进制内容
  5. print(content.decode('utf-8').encode('gbk', 'ignore').decode('gbk'))  # 先按utf-8解码,再按gbk编码打印

(四)beautifulsoup4库的使用

1、beautifulsoup4库的基本介绍

  • 通过requests库获取HTML页面内容后,需要进一步解析HTML格式,提取其中的有用数据。beautifulsoup4库是一个可以解析HTML或者XML文件的Python库,它具有以下三个特点
  • beautifulsoup4库提供了用于浏览、搜索和修改解析树的简洁函数,可以通过解析文档为用户提供需要抓取的数据。
  • beautifulsoup4库自动将输入文档稳定转换为Unicode编码,输出文档转换为utf-8编码。不需要考虑编码方式,除非文档没有指定编码方式,此时beautifulsoup4库不能自动识别编码方式,需要说明一下原始编码方式。
  • beautifulsoup4库能够为用户灵活地提供不同的解析策略或者是较快的交易速度。

2、导入BeautifulSoup库的具体语法格式如下:

beautifulsoup4库中最主要的是BeautifulSoup类,一般通过导入此类来解析网页内容。

from bs4 import BeautifulSoup

3、beautifulsoup4库的常用操作

导入BeautifulSoup类后,可以创建BeautifulSoup对象。

  1. import requests from bs4
  2. import BeautifulSoup
  3. url = "http://www.mobiletrain.org"
  4. r = requests.get(url)
  5. r.encoding = "utf-8"
  6. soup = BeautifulSoup(r.text,"html.parser")
  7. print(type(soup))

<class 'bs4.BeautifulSoup'>

4、元素中的文本信息往往是有用信息,下面将介绍用BeautifulSoup类解析HTML页面中的有用信息,分为: 节点选择器 方法选择器

        通过BeautifulSoup对象的属性可以选择节点元素,并获得节点的信息,这些属性与HTML的标签名称相同。

4.1 节点选择器

使用BeautifulSoup对象获得元素内容

  1. import requests from bs4
  2. import BeautifulSoup
  3. url = "http://www.mobiletrain.org"
  4. r = requests.get(url)
  5. r.encoding = "utf-8"
  6. soup = BeautifulSoup(r.text,"html.parser")
  7. print(soup.title)           #获取页面的<title>内容
  8. print(soup.p)               #获取页面的第一个<p>内容

<title>千锋教育-坚持教育初心,坚持面授品质,IT培训良心品牌</title>

<p class="bubble">小小千想和您聊一聊</p>

如果想要获得HTML标签中各个属性的内容,则需要通过Tag对象的属性去获取

使用BeautifulSoup对象获得标签的详细信息

  1. import requests from bs4
  2. import BeautifulSoup
  3. url = "http://www.mobiletrain.org"
  4. r = requests.get(url)
  5. r.encoding = "utf-8"
  6. soup = BeautifulSoup(r.text,"html.parser")
  7. print("<p>标签:",soup.p)
  8. print("<p>标签的名称:",soup.p.name)
  9. print("<p>标签的属性:",soup.p.attrs)
  10. print("<p>标签的子标签:",soup.p.contents)
  11. print("<p>标签包含的文本内容:",soup.p.string)

  • <p>标签: <p class="bubble">小小千想和您聊一聊</p>
  • <p>标签的名称: p
  • <p>标签的属性: {'class': ['bubble']}
  • <p>标签的子标签: ['小小千想和您聊一聊']
  • <p>标签包含的文本内容: 小小千想和您聊一聊

string属性应遵循以下原则:

标签内部嵌套多层标签时,string属性返回None;

标签内部有一个标签时,string属性返回内层标签包含的文本内容;

标签内部没有标签时,string属性返回其包含的文本内容。

4.2 方法选择器

        在HTML页面中,div、a、p等标签往往不止一个,节点选择器无法获得所有同名标签的内容,此时就要选择使用方法选择器。使用BeautifulSoup类中的方法可以获得HTML中的标签内容,主要的方法包括find()和find_all(),可以根据参数找到对应标签,返回列表类型。

BeautifulSoup.find(name,attrs,recursive,string) BeautifulSoup.find_all(name,attrs,recursive,string,limit)

find()和find_all()方法中的参数说明

        find()和find_all()的区别在于find()方法仅返回找到的第一个结果,而find_all()可以返回找到的所有结果,也就是说,find()方法相当于参数limit为1时的find_all()方法。

例:使用find_all()方法获得所有的<i>

import requests from bs4

  1. import requests from bs4
  2. import BeautifulSoup
  3. url = "http://www.mobiletrain.org"
  4. r = requests.get(url)
  5. r.encoding = "utf-8"
  6. soup = BeautifulSoup(r.text, "html.parser")
  7. for item in soup.find_all("i"):  
  8.        print(item.string, end=" ")

三、实战:电影排行爬取及分析

1、获取网页

        User-Agent(简称UA) 大量的爬虫请求会使服务器的压力过大,使得网页响应速度变慢,影响网站的政策运行,所以网站一般会检验UA来判断发起请求的是不是机器人。故需要自己设置UA进行简单伪装。

headers = {"User-Agent": "Mozilla/5.0 (Windows NT 6.1; WOW64)

AppleWebKit/535.1 (KHTML, like Gecko) Chrome/14.0.835.163 Safari/535.1"}

需要将此键值对传入requests库中的get()方法,获取网页的函数可以写成如下形式。

def get_html(url,headers):

    r = requests.get(url,headers=headers)

    html = r.text

2、解析网页

定位文本内容所在标签

标签中的有用内容

3、存储数据

将解析网页后获得的有用数据列表转换为字典元素形式,并存入JSON格式的文件中。

movie.json

爬取具体步骤:

1、选择网站

2、解析网页

3、定位标签所在位置

4、提取文本数据

5、筛选数据

6、存储数据

总结

        通过本次实验,深入理解了网络爬虫的基本原理和工作流程,掌握了使用Python编写爬虫的核心技术。实验过程中,我们学习了如何利用requests库获取网页内容,并通过beautifulsoup4库对HTML页面进行解析。此外,还学会了将爬取的数据进行存储,为后续的数据处理打下了坚实的基础。整个过程提升了我们在网络数据采集方面的实践能力,也为今后在大数据和信息处理领域的应用提供了宝贵经验。     

   

相关文章:

Python网络爬虫从入门到实战

目录 引言 一、网络爬虫的概念 二、 网络爬虫的基本工作流程 &#xff08;一&#xff09;过程&#xff1a; &#xff08;二&#xff09;安装requests模块和beautifulsoup4模块 &#xff08;三&#xff09;requests库的使用 1、requests库的基本介绍 2、导入requests库的…...

探索Theine:Python中的AI缓存新贵

文章目录 探索Theine&#xff1a;Python中的AI缓存新贵背景&#xff1a;为何选择Theine&#xff1f;Theine是什么&#xff1f;如何安装Theine&#xff1f;简单的库函数使用方法场景应用场景一&#xff1a;Web应用缓存场景二&#xff1a;分布式系统中的数据共享场景三&#xff1…...

js拼图(神鹰黑手哥)

直接上代码 再解释 这是最终效果图 css代码如下 * {margin: 0;padding: 0;}body {height: 800px;width: 100%;background-color: blanchedalmond;display: flex;justify-content: space-around;align-items: center;position: relative;}.img-box {display: flex;flex-wrap: w…...

值得推荐的五款数据恢复工具!!

当谈及我们日常工作生活中无法避免的数据丢失情况时&#xff0c;很多小伙伴一定急得如热锅上的蚂蚁&#xff0c;无助与忐忑。特别是现在社会&#xff0c;信息量庞大&#xff0c;一旦电脑上的重要数据不慎丢失&#xff0c;无论是工作文件、生活照片还是珍贵的视频&#xff0c;都…...

股票金融市场中的tick,分钟,日线数据

在金融市场中&#xff0c;股票数据的分析对于投资者来说至关重要。股票数据可以根据时间粒度的不同&#xff0c;分为几种不同的类型&#xff0c;包括Tick数据、分钟数据和日线数据。下面将详细介绍这些数据类型&#xff0c;并对比它们之间的差别。 Tick数据 Tick数据&#xf…...

OKG Research:如何衡量链上数据的开放价值?

在新加坡Token2049期间&#xff0c;欧科云链研究院受邀参加Bloomberg主办的企业另类资产投资峰会2024&#xff0c;与多位专家围绕未来数据形态与前景进行了深入交流。 活动后&#xff0c;欧科云链研究院负责人Lola Wang与资深研究员Jason Jiang在大公网发表署名文章《如何衡量…...

向日葵下载教程以及三款远程控制工具推荐!!!

向日葵远程控制下载教程&#xff01;&#xff01; 亲爱的朋友们&#xff0c;如果你对远程控制软件有所需求&#xff0c;那么向日葵绝对是一个不错的选择。现在我将带你走一遍向日葵的下载流程。 1. 打开你的浏览器&#xff0c;输入“向日葵官方网站”&#xff0c;进入官方网站…...

Studio One 6中文版及最新功能介绍 Studio One 6音乐软件安装包

Studio One 6是一款功能强大的数字音频工作站&#xff08;DAW&#xff09;&#xff0c;专为音乐制作和录音而设计。它提供了从初学者到专业人士的所有需求&#xff0c;无论是创作、录音、混音还是母带处理。 Studio One 6拥有直观的界面和强大的虚拟乐器、插件和音频处理工具&a…...

【数据结构】栈和队列 + 经典算法题

目录 前言 一、栈 二、栈的实现 三、栈的循环遍历演示 四、栈的算法题 // 一、队列 二、队列的实现 三、使用演示 四、队列的算法题 总结 前言 本文完整实现了栈和队列的数据结构&#xff0c;以及栈和队列的一些经典算法题&#xff0c;让我们更加清楚了解这两种数据…...

C# 基于winform 使用NI-VISA USB口远程控制电源 万用表

1.下载完整版本NI-VISA NI-VISA Download - NI *注意支持的操作系统&#xff0c;以便后期编译 安装完成之后&#xff0c;打开NI MAX&#xff0c;插上usb口&#xff0c;打开测试面板进行通信 2.编程示例 见本地文件夹C:\Users\Public\Documents\National Instruments\NI-VIS…...

Python设计方差分析实验

前言 方差分析(ANOVA)是一种用于检测多个样本均值之间差异的统计方法,广泛应用于实验设计与数据分析中。通过分析不同因素对实验结果的影响,方差分析能够帮助评估哪些因素显著影响了实验结果,并且可以提供各因素交互作用的深入理解。在多因子实验设计中,随机化、重复和平…...

【Oracle DB故障分享】分享一次由于SGA设置太小导致的DP备份失败

List item 今天给客户做Oracle例行数据库健康巡检&#xff0c;过程中检出一些备份异常&#xff0c;分享如下。 排查问题&#xff1a; 打开DP备份软件&#xff0c;随即弹出如下提示&#xff1a; 登录DP&#xff0c;查看备份情况&#xff1a;发现从10/6开始&#xff0c;DP备份…...

Yocto构建教程:在SDK中添加Qt5并生成带有Qt5的SDK

下载meta-qt5 复位环境 确认下版本是否匹配 添加meta-qt5进bblayers.bb 先编译起来 研究meta-qt5 构建带有Qt5的toolchain SDK meta-toolchain如何编译带Qt5的软件包&#xff1f; 文件系统中如何添加Qt5软件包 如何同时编译目标镜像和SDK Yocto Project是一个开源的嵌…...

操作系统——位示图

这里写目录标题 前言基础说明相关计算题目一题目二题目三 前言 基础说明 位示图是一种用来表示文件和目录在磁盘上存储位置的图形化表示方法。它通过使用一系列的位来表示文件或目录所占用的磁盘块&#xff0c;从而显示出磁盘上的存储情况。 位示图通常是一个位向量&#xf…...

【STM32 Blue Pill编程实例】-矩阵键盘

矩阵键盘 文章目录 矩阵键盘1、矩阵键盘介绍2、硬件准备与接线3、模块配置3.1 矩阵键盘列引脚配置3.2 矩阵键盘列引脚配置3.3 LED配置4、代码实现在本文中,我们将介绍如何把 43 键盘与 STM32 Blue Pill 连接,并使用 HAL 库在 STM32CubeIDE 中对其进行编程。 键盘是一种输入设…...

基于SSM的药品商城系统

作者&#xff1a;计算机学姐 开发技术&#xff1a;SpringBoot、SSM、Vue、MySQL、JSP、ElementUI、Python、小程序等&#xff0c;“文末源码”。 专栏推荐&#xff1a;前后端分离项目源码、SpringBoot项目源码、Vue项目源码、SSM项目源码、微信小程序源码 精品专栏&#xff1a;…...

南京邮电大学电工电子A实验十一(数据选择器及逻辑电路的动态测试)

文章目录 一、实验报告预览二、Word版本报告下载 一、实验报告预览 二、Word版本报告下载 点我...

算法.图论-BFS及其拓展

文章目录 广度优先搜索简介经典bfs习题地图分析贴纸拼词 01bfs解析基本过程相关习题 广度优先搜索简介 bfs的特点是逐层扩散, 从源头到目标点扩散了几层, 最短路就是多少 bfs的使用特征是任意两个节点的距离(权值)是相同的(无向图, 矩阵天然满足这一特点) bfs开始的时候可以是…...

mongodb的相关关键字说明

以下是MongoDB中一些数据库相关的关键字说明&#xff1a; 1. 数据库&#xff08;Database&#xff09; 概念 数据库是MongoDB中数据存储的最高层级容器&#xff0c;类似于关系型数据库中的数据库概念。一个MongoDB服务器实例可以包含多个数据库&#xff0c;每个数据库可以有自…...

强化学习之DDPG算法

前言&#xff1a; 在正文开始之前&#xff0c;首先给大家介绍一个不错的人工智能学习教程&#xff1a;https://www.captainbed.cn/bbs。其中包含了机器学习、深度学习、强化学习等系列教程&#xff0c;感兴趣的读者可以自行查阅。 一、算法介绍 深度确定性策略梯度 &#xff0…...

Ubuntu系统下交叉编译openssl

一、参考资料 OpenSSL&&libcurl库的交叉编译 - hesetone - 博客园 二、准备工作 1. 编译环境 宿主机&#xff1a;Ubuntu 20.04.6 LTSHost&#xff1a;ARM32位交叉编译器&#xff1a;arm-linux-gnueabihf-gcc-11.1.0 2. 设置交叉编译工具链 在交叉编译之前&#x…...

在rocky linux 9.5上在线安装 docker

前面是指南&#xff0c;后面是日志 sudo dnf config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo sudo dnf install docker-ce docker-ce-cli containerd.io -y docker version sudo systemctl start docker sudo systemctl status docker …...

UDP(Echoserver)

网络命令 Ping 命令 检测网络是否连通 使用方法: ping -c 次数 网址ping -c 3 www.baidu.comnetstat 命令 netstat 是一个用来查看网络状态的重要工具. 语法&#xff1a;netstat [选项] 功能&#xff1a;查看网络状态 常用选项&#xff1a; n 拒绝显示别名&#…...

生成 Git SSH 证书

&#x1f511; 1. ​​生成 SSH 密钥对​​ 在终端&#xff08;Windows 使用 Git Bash&#xff0c;Mac/Linux 使用 Terminal&#xff09;执行命令&#xff1a; ssh-keygen -t rsa -b 4096 -C "your_emailexample.com" ​​参数说明​​&#xff1a; -t rsa&#x…...

【OSG学习笔记】Day 16: 骨骼动画与蒙皮(osgAnimation)

骨骼动画基础 骨骼动画是 3D 计算机图形中常用的技术&#xff0c;它通过以下两个主要组件实现角色动画。 骨骼系统 (Skeleton)&#xff1a;由层级结构的骨头组成&#xff0c;类似于人体骨骼蒙皮 (Mesh Skinning)&#xff1a;将模型网格顶点绑定到骨骼上&#xff0c;使骨骼移动…...

在鸿蒙HarmonyOS 5中使用DevEco Studio实现录音机应用

1. 项目配置与权限设置 1.1 配置module.json5 {"module": {"requestPermissions": [{"name": "ohos.permission.MICROPHONE","reason": "录音需要麦克风权限"},{"name": "ohos.permission.WRITE…...

全面解析各类VPN技术:GRE、IPsec、L2TP、SSL与MPLS VPN对比

目录 引言 VPN技术概述 GRE VPN 3.1 GRE封装结构 3.2 GRE的应用场景 GRE over IPsec 4.1 GRE over IPsec封装结构 4.2 为什么使用GRE over IPsec&#xff1f; IPsec VPN 5.1 IPsec传输模式&#xff08;Transport Mode&#xff09; 5.2 IPsec隧道模式&#xff08;Tunne…...

tree 树组件大数据卡顿问题优化

问题背景 项目中有用到树组件用来做文件目录&#xff0c;但是由于这个树组件的节点越来越多&#xff0c;导致页面在滚动这个树组件的时候浏览器就很容易卡死。这种问题基本上都是因为dom节点太多&#xff0c;导致的浏览器卡顿&#xff0c;这里很明显就需要用到虚拟列表的技术&…...

【Nginx】使用 Nginx+Lua 实现基于 IP 的访问频率限制

使用 NginxLua 实现基于 IP 的访问频率限制 在高并发场景下&#xff0c;限制某个 IP 的访问频率是非常重要的&#xff0c;可以有效防止恶意攻击或错误配置导致的服务宕机。以下是一个详细的实现方案&#xff0c;使用 Nginx 和 Lua 脚本结合 Redis 来实现基于 IP 的访问频率限制…...

Web后端基础(基础知识)

BS架构&#xff1a;Browser/Server&#xff0c;浏览器/服务器架构模式。客户端只需要浏览器&#xff0c;应用程序的逻辑和数据都存储在服务端。 优点&#xff1a;维护方便缺点&#xff1a;体验一般 CS架构&#xff1a;Client/Server&#xff0c;客户端/服务器架构模式。需要单独…...