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页面进行解析。此外,还学会了将爬取的数据进行存储,为后续的数据处理打下了坚实的基础。整个过程提升了我们在网络数据采集方面的实践能力,也为今后在大数据和信息处理领域的应用提供了宝贵经验。     

   

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

IO作业代码

问题 通过 fwrite和 fread去拷贝 文件到另外一个文件上 #include<myhead.h> #include <stdio.h> #include <string.h> #include <stdlib.h> #include<errno.h> #include<time.h> int main(int argc, const char *argv[]) { FILE *fp fo…

新款任天堂switch游戏机方案,支持4K60HZ投屏方案,显示器,手柄方案

据传任天堂将推出新的一代的switch掌机&#xff0c;而新款掌机将支持4K60HZ投屏 都2402年了再做1080P确实有点不太象话了 4K60HZ相较于1080P能够提升很多游戏体验&#xff0c;这时不管是HDMI显示器或者是VR眼睛清晰度都会让人舒服很多。 不过新一代的任天堂似乎也在PD协议上…

答题pk小程序的技术特点和性能优势分析

答题小程序是一种在移动设备上运行的应用程序&#xff0c;旨在提供各种类型的答题体验。以下是答题小程序的一些特点和优势&#xff1a; 一、特点 多样化的题目类型&#xff1a; 包括选择题、填空题、判断题等常见题型&#xff0c;还可能有简答题、论述题等更具挑战性的题型。…

qt+opengl 实现纹理贴图,平移旋转,绘制三角形,方形

1 首先qt 已经封装了opengl&#xff0c;那么我们就可以直接用了&#xff0c;这里面有三个函数需要继承 virtual void initializeGL() override; virtual void resizeGL(int w,int h) override; virtual void paintGL() override; 这三个函数是实现opengl的重要函数。 2 我们…

arp欺骗及其实验

ARP欺骗&#xff08;ARP Spoofing&#xff09;是一种网络攻击技术&#xff0c;攻击者通过伪造ARP&#xff08;地址解析协议&#xff09;消息&#xff0c;将其MAC地址与目标IP地址关联&#xff0c;从而实现对网络流量的截获、篡改或重定向。以下是ARP欺骗的详细信息&#xff1a;…

【JVM】—Java内存区域详解

Java内存区域详解 ⭐⭐⭐⭐⭐⭐ Github主页&#x1f449;https://github.com/A-BigTree 笔记链接&#x1f449;https://github.com/A-BigTree/Code_Learning ⭐⭐⭐⭐⭐⭐ 如果可以&#xff0c;麻烦各位看官顺手点个star~&#x1f60a; 文章目录 Java内存区域详解1 线程私有1…

Linux系统:Ubuntu上安装Chrome浏览器

Ubuntu系统版本&#xff1a;23.04 在Ubuntu系统上安装Google Chrome浏览器&#xff0c;可以通过以下步骤进行&#xff1a; 终端输入以下命令&#xff0c;先更新软件源&#xff1a; sudo apt update 或 sudo apt upgrade终端输入以下命令&#xff0c;下载最新的Google Chrome .…

瑞芯微RK3566/RK3568 Android11使用OTA升级固件方法,深圳触觉智能鸿蒙开发板演示,备战第九届华为ICT大赛

本文介绍瑞芯微RK3566/RK3568在Android11系统OTA升级固件方法&#xff0c;使用触觉智能的Purple Pi OH鸿蒙开发板演示&#xff0c;搭载了瑞芯微RK3566&#xff0c;Laval官方社区主荐&#xff01; 1、OTA包生成 在源码根目录上执行以下命令编译OTA包 # make installclean # …

Docker实践与应用举例

目录 1. 引言 2. Docker的基本概念 2.1 什么是Docker容器 2.2 Docker镜像 2.3 Docker架构 3. Docker的应用场景 3.1 开发与测试环境的隔离 3.2 持续集成与持续交付&#xff08;CI/CD&#xff09; 3.3 微服务架构 4. Docker的实践案例 4.1 部署Nginx反向代理 4.2 使用…

端到端的开源OCR模型:GOT-OCR-2.0,支持场景文本、文档、乐谱、图表、数学公式等内容识别!

今天给大家分享一个端到端的开源 OCR 模型&#xff0c;号称 OCR 2.0&#xff01; 支持场景文本、文档、乐谱、图表、数学公式等内容识别&#xff0c;拿到了 BLEU 0.972 高分。 从给出的演示图来看&#xff0c;一些非常复杂的数学公式都能正确的识别&#xff0c;颇为强大。模型…

文件IO(Linux文件IO)

前言 本文介绍Linux系统下自带的文件IO的函数。 Linux文件IO相关函数 open函数 #include <sys/types.h> #include <sys/stat.h> #include <fcntl.h> int open(const char *pathname, int flags); int open(const char *pathname, int flags, mode_t mode)…

JAVA就业笔记8——第二阶段(5)

课程须知 A类知识&#xff1a;工作和面试常用&#xff0c;代码必须要手敲&#xff0c;需要掌握。 B类知识&#xff1a;面试会问道&#xff0c;工作不常用&#xff0c;代码不需要手敲&#xff0c;理解能正确表达即可。 C类知识&#xff1a;工作和面试不常用&#xff0c;代码不…

Spire.PDF for .NET【页面设置】演示:在 C#/VB.NET 中创建 PDF 小册子

当人们打印大型 PDF 文档时&#xff0c;PDF 小册子非常有用。它在书籍、报纸和杂志编辑中特别受欢迎。本节将介绍一种通过C#、VB.NET 中的.NET PDF组件创建 PDF 小册子的非常简单的方法。 Spire.PDF for .NET 是一款独立 PDF 控件&#xff0c;用于 .NET 程序中创建、编辑和操作…

进程和作业管理

1.概念 &#xff08;1&#xff09;进程 进程是指一个具有独立功能的程序的一次运行过程&#xff0c;也是系统进行资源分配和调度的基本单位&#xff0c;即每个程序模块和它执行时所处理的数据组成了进程。进程虽不是程序&#xff0c;但由程序产生。进程与程序的区别在于&#…

中国联通目前规模最大的境外综合性通信枢纽大楼

中国联通&#xff08;香港&#xff09;将军澳智 云数据中心&#xff1a;打造境外通信服务新标杆 在数字化浪潮席卷全球的今天&#xff0c;数据中心作为信息社会的基石&#xff0c;其重要性日益凸显。中国联通&#xff08;香港&#xff09;将军澳智 云数据中心&#xff0c;作…

基于django的代理商订单管理系统

基于Django的代理商订单管理系统——高效助力代理商管理 在如今企业业务日益复杂的环境下&#xff0c;如何高效地管理代理商订单成为不可或缺的环节。我们推出了一款基于Django框架的代理商订单管理系统&#xff0c;专为企业的订单管理及返利控制设计&#xff0c;为企业与代理…

uniapp-uniapp + vue3 + pinia 搭建uniapp模板

使用技术 ⚡️uni-app, Vue3, Vite, pnpm &#x1f4e6; 组件自动化引入 &#x1f34d; 使用 Pinia 的状态管理 &#x1f3a8; tailwindcss - 高性能且极具灵活性的即时原子化 CSS 引擎 &#x1f603; 各种图标集为你所用 &#x1f525; 使用 新的 <script setup> …

LLM - 配置 ModelScope SWIFT 测试 Qwen2-VL 图像微调(LoRA) 教程(2)

欢迎关注我的CSDN&#xff1a;https://spike.blog.csdn.net/ 本文地址&#xff1a;https://spike.blog.csdn.net/article/details/142882496 免责声明&#xff1a;本文来源于个人知识与公开资料&#xff0c;仅用于学术交流&#xff0c;欢迎讨论&#xff0c;不支持转载。 SWIFT …

编程练习7 5G网络建设

需要用到并查集的相关知识&#xff1a;可以参考如下链接 并查集详解&#xff08;原理代码实现应用优化&#xff09;-CSDN博客 #include<iostream> #include<algorithm> #include<vector>using namespace std;vector<int> split(string params_str) {…

观察者模式的思考

观察者模式由来 观察者模式&#xff08;Observer Pattern&#xff09;是一种行为型设计模式&#xff0c;它的起源可以追溯到20世纪90年代初&#xff0c;由设计模式四人帮&#xff08;Erich Gamma, Richard Helm, Ralph Johnson 和 John Vlissides&#xff09;在其著作《设计模…