Python爬虫——爬虫基础模块和类库(附实践项目)

news2024/11/20 8:48:31

一、简单介绍

        Python爬虫是使用Python编程语言开发的一种自动化程序,用于从互联网上获取信息。通过模拟浏览器的行为,爬虫可以访问网页、解析网页内容,并提取所需的数据。 

python的爬虫大致可以分为通用爬虫和专用爬虫:

        通用爬虫是一种能够自动化地从互联网上抓取信息的程序,它可以根据用户的需求,爬取各种类型的网页内容,并将其保存或进行进一步处理。通用爬虫通常具有以下特点:

  1. 灵活性:通用爬虫可以爬取各种类型的网页,包括新闻、论坛、博客等,因此具有较高的灵活性。

  2. 自动化:通用爬虫可以通过编程实现自动化的抓取过程,无需人工干预。

  3. 大规模爬取:通用爬虫可以处理大量的网页,并将其保存到本地或进行进一步的分析和处理。

        专用爬虫是一种针对特定网站或特定类型的网页进行定制化开发的爬虫程序,它具有以下特点:

  1. 高度定制化:专用爬虫针对特定网站或特定类型的网页进行开发,可以根据网站的结构和特点进行优化,提高爬取效率和准确性。

  2. 速度较快:由于专用爬虫只需要处理特定类型的网页,因此可以针对性地进行优化,提高爬取速度。

  3. 数据质量较高:专用爬虫可以根据特定网站的要求进行数据抓取和处理,因此可以保证数据的准确性和完整性。

1.1 运行原理 

爬虫通过模拟服务器发送请求并获取对应的信息:

爬虫运行原理(取自bing图库)

步骤介绍:

  1. 发送请求:爬虫首先向目标网站发送HTTP请求,请求获取页面内容。可以使用Python的第三方库如requests发送HTTP请求。

  2. 获取页面内容:目标网站接收到爬虫的请求后,返回相应的页面内容。爬虫通过解析HTTP响应,获取页面内容。可以使用Python的第三方库如BeautifulSoup或者正则表达式进行页面内容的解析和提取。

  3. 解析页面内容:爬虫根据需要的数据类型,对页面内容进行进一步的解析和提取。可以使用XPath、CSS Selector或者正则表达式等方式进行页面内容的解析。

  4. 存储数据:爬虫将解析提取到的数据存储到本地文件或者数据库中。可以使用Python的第三方库如pandas、csv、MySQLdb等进行数据的存储。

  5. 遍历链接:如果需要爬取多个页面,爬虫会根据页面中的链接,递归地发送请求和解析页面,实现对多个页面的遍历。

  6. 反爬虫机制:为了防止被网站屏蔽或者限制,爬虫需要处理一些反爬虫机制,如设置请求头、使用代理IP、降低请求频率等。

 二、python爬虫库

按照爬虫爬取网络信息到最终展示数据分析结果的过程,我总结了以下常用的python第三方库 

2.1 获取网页信息(requests库)

        requests是一个Python的第三方库,用于发送HTTP请求。它是基于urllib3库开发的,比urllib更加方便和简洁。

使用requests库进行爬虫可以实现以下功能:

  1. 发送GET和POST请求
  2. 设置请求头和Cookies
  3. 设置请求参数和URL编码
  4. 处理响应结果,包括获取状态码、响应头和响应内容等
  5. 保存下载的文件
  6. 处理重定向和代理
  7. 使用会话保持会话状态

常用函数:

1.发送请求

requests.get(url, params=None, **kwargs)发送GET请求,参数url为请求的URL,params为请求中的查询参数
requests.post(url, data=None, json=None, **kwargs)发送POST请求,参数url为请求的URL,data为请求中的表单数据,json为请求中的JSON数据。
requests.put(url, data=None, **kwargs)发送PUT请求,参数url为请求的URL,data为请求中的数据。
requests.patch(url, data=None, **kwargs)发送PATCH请求,参数url为请求的URL,data为请求中的数据。
requests.delete(url, **kwargs)发送DELETE请求,参数url为请求的URL。
requests.head(url, **kwargs)发送HEAD请求,参数url为请求的URL。
requests.options(url, **kwargs)发送OPTIONS请求,参数url为请求的URL。
requests.request(method, url, **kwargs)发送任意类型的HTTP请求,参数method为请求的方法,url为请求的URL。
requests.session()创建一个Session对象,用于保持会话状态
requests.get(url, params=None, **kwargs)发送GET请求,参数url为请求的URL,params为请求中的查询参数。

2.获得响应

response = requests.get(url, params=None, **kwargs)发送GET请求并返回响应对象,可以通过该对象获取响应的内容、状态码等信息。
response.text获取响应的文本内容。
response.content获取响应的二进制内容。
response.status_code获取响应的状态码。
response.json()将响应的JSON内容解析为Python对象。
response.headers获取响应的头部信息。
response.cookies获取响应的Cookies信息
response.url获取响应的URL。

拓展

可以发送HTTP请求的库不只于requests库,还有上面提到的urllib等库。综合来看,requests库使用起来最为便捷,但是在一些特定的领域使用其他的库可能会有更好的效果:

  • urllib:一系列用于操作URL的功能。
  • selenium:自动化测试工具。一个调用浏览器的 driver,通过这个库你可以直接调用浏览器完成某些操作,比如输入验证码。
  • aiohttp:基于 asyncio 实现的 HTTP 框架。异步操作借助于 async/await 关键字,使用异步库进行数据抓取,可以大大提高效率。

2.2 解析网页结构,提取数据(BeautifulSoup4)

        BeatifulSoup4是用于解析网页结构的库,它的作用是将获取到的网页HTML和XML文档进行分解。从而定位到我们需要获取的特定信息在网页中的位置。

        当使用BeautifulSoup4库解析HTML或XML文件时,它会根据指定的解析器(如html.parser、lxml等)将文件转换为文档树的形式。文档树由节点(Node)组成,每个节点代表文件中的一个元素(标签、文本等)。这些节点之间通过父子关系、兄弟关系等连接在一起,形成了树状结构。

html树状图(取自bing图库)

以下是BeautifulSoup4常用的方法和模块: 

常用方法和模块

BeautifulSoup这是BeautifulSoup4库的主要类,用于解析HTML和XML文件。可以通过指定解析器(如html.parser、lxml等)来创建一个BeautifulSoup对象,并对解析后的内容进行操作。
find_all()这是BeautifulSoup对象的一个方法,用于查找所有符合指定条件的标签。可以根据标签名、类名、属性等进行查找,并返回一个包含所有匹配标签的列表。
find()

与find_all()类似,但只返回第一个匹配的标签。

select()这是BeautifulSoup对象的另一个方法,用于通过CSS选择器语法来查找标签。可以根据标签名、类名、属性等进行查找,并返回一个包含所有匹配标签的列表
get_text()这是标签对象的方法,用于获取标签内的文本内容。
attrs这是标签对象的属性,用于获取标签的所有属性和属性值。
prettify()这是BeautifulSoup对象的方法,用于美化解析后的内容,使其更易读。

BeautifulSoup4可以结合正则表达式和CSS选择器使用,以便更加精确地解析网页结构

拓展

BeautifulSoup4功能比较全面,简单易用,因此较为常用;但在一些特殊的领域,使用一些其他的库可以达到更好的效果:

  • pyquery:jQuery 的 Python 实现,能够以 jQuery 的语法来操作解析 HTML 文档,易用性和解析速度都很好。
  • lxml:支持HTML和XML的解析,支持XPath解析方式,而且解析效率非常高。
  • tesserocr:一个 OCR 库,在遇到验证码(图形验证码为主)的时候,可直接用 OCR 进行识别。

2.3 数据分析(不包含数据可视化)

Python数据分析这一块内容丰富,常用的库非常多,一篇文章写不完。

以下是一些常用的库:

  1. NumPy:NumPy是一个用于科学计算的基础库,提供了维数组对象和一组用于操作数组的函数。

  2. Pandas:Pandas是用于数据处理和分析的强大库,提供了高性能的数据结构和数据分析工具,如DataFrame和Series。

  3.  SciPy:SciPy是一个用于科学计和技术计算的库,提供了许数学、科学和工程计算功能,如数值积分、化、线性代数等。

  4. Scikit-learn:Scikit-learn是一个用于机器学习和数据挖掘的库,提供了各种机器学习算法和工具,用于分类、回归、聚类等任务。

  5. StatsModels:Models是一个用于统计建模和计量经学的库,提供了各种统计模型和统计分析工具。

  6. TensorFlow:TensorFlow是一个用于机器学习和深度习的库,提供了各种机器学习算法和神经网络模型的实现。

2.4 数据可视化(Matplotlib)

        Matplotlib是一个广泛使用的绘图库,提供了许多函数和方法用于创建各种类型的图表。

        Matplotlib提供了丰富的绘图功能,包括线图、散点图、柱状图、饼图、3D图形等。它还支持自定义图形的颜色、样式、标签和图例等属性。Matplotlib还可以在Jupyter Notebook中以交互方式显示图形。

        Matplotlib的基本用法包括创建图形对象、添加子图、设置图形属性、绘制数据等。它还提供了一系列的函数和方法来控制坐标轴、刻度、网格、标签、标题等。

常用的绘图模块为pyplot模块,使用前应先导入

import matplotlib.pyplot as plt

以下是Matplotlib.pyplot常用的函数:

plt.plot(x, y, …)绘制折线图,可以指定x轴和y轴的数据。
plt.scatter(x, y, …)绘制散点图,可以指定x轴和y轴的数据。
plt.bar(x, y, …)绘制柱状图,可以指定x轴和y轴的数据。
plt.hist(x, …)绘制直方图,可以指定一维数据数组。
plt.pie(x, labels, …)绘制饼图,可以指定饼图的数据和标签。
plt.boxplot(x, …)绘制箱线图,可以指定一维或二维数据数组。
plt.imshow(image, …)显示图像,可以指定图像的像素数据。
plt.contour(x, y, z, …)绘制等高线图,可以指定x轴、y轴和z轴的数据。
plt.plot_surface(x, y, z, …)

绘制三维曲面图,可以指定x轴、y轴和z轴的数据。

plt.xlabel(label)设置x轴标签。
plt.ylabel(label)设置y轴标签。
plt.title(title)设置图表标题。
plt.legend()显示图例。
plt.grid()显示网格线。
plt.xlim(xmin, xmax)设置x轴的显示范围。
plt.ylim(ymin, ymax)设置y轴的显示范围。

除了matplotlib.pyplot模块之外,Matplotlib还包括其他一些模块,用于不同的功能和任务。以下是一些常用的Matplotlib模块:

  1. matplotlib.figure:该模块提供了Figure类,用于创建和管理图形对象。Figure类是图形的顶级容器,可以包含多个子图。

  2. matplotlib.axes:该模块提供了Axes类,用于绘制图表的坐标轴和图形元素。Axes类是图表的子图,用于在图形对象中放置图表元素。

  3. matplotlib.axis:该模块提供了Axis类,用于管理坐标轴的属性和刻度。Axis类负责绘制坐标轴和刻度线,并提供了一些方法用于设置刻度标签和刻度范围。

  4. matplotlib.patches:该模块提供了各种形状的Patch类,用于绘制图形元素,如矩形、圆形、多边形等。这些图形元素可以添加到Axes对象中。

  5. matplotlib.lines:该模块提供了Line2D类,用于绘制线条和曲线。Line2D类可以用于绘制折线图、曲线图等。

  6. matplotlib.text:该模块提供了Text类,用于在图表中添加文本标注。Text类可以用于添加标题、标签、注释等文本内容。

了上述模块之外,还有其他一些模块用于特定的任务,如matplotlib.colors(颜色处理)、matplotlib.colorbar(颜色条处理)、matplotlib.ticker(刻度处理)等。

三、项目实践

介绍

从豆瓣上挖取2022年250个经典电影的名单并绘制成词云图

代码

import requests
from bs4 import BeautifulSoup
from wordcloud import WordCloud
import matplotlib.pyplot as plt

# 用于绘制词云图的列表
title_list = []

#设置请求头,避免网页出现418问题
head = {
    'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/117.0.0.0 Safari/537.36 Edg/117.0.2045.47',
    'referer': 'https://movie.douban.com/subject/33447633/?from=showing'
}

# 逐页爬取
for start_num in range(0, 250, 25):
    context = requests.get(f'https://movie.douban.com/top250?start={start_num}', headers=head).text

    soup = BeautifulSoup(context, 'html.parser')
    
    # 获取标签span中class为title的对象
    all_titles = soup.findAll("span", attrs={'class': 'title'})
    
    # 将内容输入绘制词云图使用的列表
    for title in all_titles:
        title_string = title.string
        if "/" not in title_string:
            # print(title_string)
            title_list.append(title_string)

# print(title_list)
text = ' '.join(title_list)

wc = WordCloud('C:\Windows\Fonts\Microsoft YaHei UI\msyh.ttc', background_color='white', width=600,
               height=400, max_words=50).generate(text)
plt.imshow(wc, interpolation='bilinear')
plt.axis('off')
plt.show()






注:上面的print语句为调试节点,用于中途检查获取的内容和列表。

运行结果

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

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

相关文章

[Machine Learning]pytorch手搓一个神经网络模型

因为之前虽然写过一点点关于pytorch的东西,但是用的还是他太少了。 这次从头开始,尝试着搓出一个神经网络模型 (因为没有什么训练数据,所以最后的训练部分使用可能不太好跑起来的代码作为演示,如果有需要自己连上数据…

案例题--信息系统架构设计

案例题--信息系统架构设计 概念 以扩展了解为主,主要关注图 概念 架构的组成:构件,连接件,约束 构件:组成元素 连接件:构件之间的连接方式 约束:构件和连接件之间的约束 上应,下技&a…

黑豹程序员-架构师学习路线图-百科:JSON替代XML

文章目录 1、数据交换之王2、XML的起源3、JSON诞生4、什么是JSON 1、数据交换之王 最早多个软件之间使用txt进行信息交互,缺点:纯文本,无法了解其结构;之后使用信令,如:电话的信令(拨号、挂断&…

OpenCV利用Camshift实现目标追踪

目录 原理 做法 代码实现 结果展示 原理 做法 代码实现 import numpy as np import cv2 as cv# 读取视频 cap cv.VideoCapture(video.mp4)# 检查视频是否成功打开 if not cap.isOpened():print("Error: Cannot open video file.")exit()# 获取第一帧图像&#x…

nfs共享本机目录遇到错误

背景 Ubuntu部署完全分布式hadoop,需要共享本机的/home/hadoop目录 但是重启nfs服务后发现目录并未共享 详细步骤 1.安装nfs服务 sudo apt-get install nfs-kernel-server 2.编辑 /etc下exports文件 这个文件下载好nfs就有了,没下载没有 vim /etc/…

(详解)Linux常见基本指令(1)

目录 目录: 1:有关路径文件下的操作(查看,进入) 1.1 ls 1.2 pwd 1.3 cd 2:创建文件或目录 2.1 touch 2.2 mkdir 3:删除文件或目录 3.1 rm与rmdir 4:复制剪切文件 4.1 cp 4.2 mv 1:有关路径的操作 1 ls 指令 语法:ls [选项] [目录或文…

92岁高龄的创始人张忠谋谈台积电发展史

一、张忠谋和台积电 在台北一间办公室里,张忠谋最近拿出一本印有彩色图案的旧书。它的标题是《VLSI 系统导论》,这是一本研究生水平的教科书,描述了计算机芯片设计的复杂性。92岁的张先生满怀敬意地举起它。 92岁高龄的台积电创始人张忠谋 “…

POJ 2886 Who Gets the Most Candies? 树状数组+二分

一、题目大意 我们有N个孩子,每个人带着一张卡片,一起顺时针围成一个圈来玩游戏,第一回合时,第k个孩子被淘汰,然后他说出他卡片上的数字A,如果A是一个正数,那么下一个回合他左边的第A个孩子被淘…

JAVA面经整理(7)

一)什么是AQS? 1)AQS也被称之为是抽象同步队列,它是JUC包底下的多个组件的底层实现,Lock,CountDownLatch和Semphore底层都使用到了AQS AQS的核心思想就是给予一个等待队列和同步状态来实现的,它的内部使用一个先进先出…

Ubuntu使用cmake和vscode开发自己的项目,引用自己的头文件和openCV

创建文件夹 mkdir my_proj 继续创建include 和 src文件夹,形成如下的目录结构 用vscode打开项目 创建add.h #ifndef ADD_H #define ADD_Hint add(int numA, int numB);#endif add.cpp #include "add.h"int add(int numA, int numB) {return numA nu…

【springboot+vue】原生小程序电子班牌系统 智慧校园云平台源码

智慧校园云平台电子班牌系统源码 智慧班牌全套源码 智慧校园云平台电子班牌系统,集学生管理、班级管理、校园管理于一身,融合学校教务管理、教师管理、学籍管理、考勤、信息发布、班级文明建设、校园风采、家校互通等一系列应用,为校园管理现…

javaee spring整合mybatis

案例一 包含dao层 创建maven webapp项目 maven仓库需要改为阿里云 引入依赖 <?xml version"1.0" encoding"UTF-8"?><project xmlns"http://maven.apache.org/POM/4.0.0" xmlns:xsi"http://www.w3.org/2001/XMLSchema-inst…

【赠书活动第3期】《构建新型网络形态下的网络空间安全体系》——用“价值”的视角来看安全

目录 一、内容简介二、读者受众三、图书目录四、编辑推荐五、获奖名单 一、内容简介 经过30多年的发展&#xff0c;安全已经深入到信息化的方方面面&#xff0c;形成了一个庞大的产业和复杂的理论、技术和产品体系。 因此&#xff0c;需要站在网络空间的高度看待安全与网络的…

面向无线传感器网络WSN的增强型MODLEACH设计与仿真(Matlab代码实现)

&#x1f4a5;&#x1f4a5;&#x1f49e;&#x1f49e;欢迎来到本博客❤️❤️&#x1f4a5;&#x1f4a5; &#x1f3c6;博主优势&#xff1a;&#x1f31e;&#x1f31e;&#x1f31e;博客内容尽量做到思维缜密&#xff0c;逻辑清晰&#xff0c;为了方便读者。 ⛳️座右铭&a…

Spring Cloud Gateway实现数字签名与URL动态加密

文章目录 什么是数字签名&#xff1f;Spring Cloud Gateway的基础实现数字签名与URL动态加密步骤1&#xff1a;添加依赖步骤2&#xff1a;配置路由步骤3&#xff1a;实现数字签名过滤器步骤4&#xff1a;实现数字签名验证步骤5&#xff1a;实现URL动态加密 结论 &#x1f389;欢…

FFmpeg 命令:从入门到精通 | FFmpeg 解码流程

FFmpeg 命令&#xff1a;从入门到精通 | FFmpeg 解码流程 FFmpeg 命令&#xff1a;从入门到精通 | FFmpeg 解码流程流程图FFmpeg 解码的函数FFmpeg 解码的数据结构补充小知识 FFmpeg 命令&#xff1a;从入门到精通 | FFmpeg 解码流程 本内容参考雷霄骅博士的 FFmpeg 教程。 流…

视频降噪一些原理

视频降噪&#xff0c;除去部分有可能错误的信息&#xff0c;替换为猜测的可能正确的信息。 真实的细节减少。 亮度低是因为光子少。光子多亮度高。 误差存在&#xff0c;放大倍数越大&#xff0c;误差越大&#xff0c;就会显得噪点越多。 减少噪点&#xff1a; 增加进光量&a…

动图gif怎么做?分享一招超简单方法

常见的图片格式有jpg、png以及gif格式&#xff0c;其中gif格式的图片因为其画面内容丰富生动所以深受大家的喜爱。那么&#xff0c;如何将jpg、png格式的图片转换成gif格式动图呢&#xff1f;通过使用GIF中文网的gif制作&#xff08;https://www.gif.cn/&#xff09;功能&#…

[管理与领导-113]:IT人看清职场中的隐性规则 - 10 - 看清人的行动、行为、手段、方法背后的动机与背景条件

目录 前言&#xff1a; 一、冰山模型 1.1 冰山模型&#xff0c;系统思考的工具 1.2 冰山模型&#xff1a;发现人行为背后的动机 二、动机、行为模型 "说一套"&#xff1a; "做一套"&#xff1a; "演一套"&#xff1a; "学一套&quo…

C++笔记之不同buffer数量下的生产者-消费者机制

C笔记之不同buffer数量下的生产者-消费者机制 文章目录 C笔记之不同buffer数量下的生产者-消费者机制0.在不同的缓冲区数量下&#xff0c;生产者-消费者机制的实现方式和行为的区别1.最简单的生产者-消费者实现&#xff1a;抄自 https://mp.weixin.qq.com/s/G1lHNcbYU1lUlfugXn…