Python爬虫基础快速入门

目录

  • 前言
  • 一、什么是爬虫
  • 二、快速编写一个爬虫
    • 2.1 爬虫需要用到的库
    • 2.2 搭建项目工程
    • 2.3 安装三方库
    • 2.4 案例编写
  • 三、爬虫实战
    • 3.1 目标分析
    • 3.2 清洗数据
  • 四、代码改进

前言

本博客旨在分享爬虫技术相关知识,仅供学习和研究之用。使用者在阅读本博客的内容时,应自行承担风险,并严格遵守当地法律法规。本博客的作者对使用者基于本博客内容所进行的任何行为或活动不承担任何责任。

当涉及到网络数据的获取和处理时,爬虫技术无疑是一项强大而又引人注目的工具。作为一种自动化程序,爬虫能够模拟人类在互联网上的浏览行为,从而获取网页上的信息并进行处理。无论是用于数据分析、信息搜集还是网站内容更新,爬虫都扮演着至关重要的角色。

Python作为一种简洁而又功能强大的编程语言,非常适合用来编写爬虫程序。其丰富的第三方库和模块,如Requests、Beautiful Soup和Scrapy,为爬虫开发提供了极大的便利性和灵活性。通过学习Python爬虫基础知识,不仅可以深入了解网络数据的获取和处理流程,还可以掌握一种强大的工具来解决实际问题。

在这篇博客中,我们将探讨Python爬虫的基础入门知识,包括如何发送HTTP请求、解析网页内容、处理数据等方面的内容。无论是初学者还是有一定经验的开发者,都可以通过这篇博客来快速地学习和掌握Python爬虫的基础知识。

微信图片_20240403163926

一、什么是爬虫

2aacfa111950fdb7e0f2f8eb4ee3595f

==爬虫(Web crawler)==是一种自动化程序,专门用于在互联网上获取信息。爬虫通过模拟人类在网页上的浏览行为,访问并抓取网页上的数据。其主要功能是根据指定的规则和算法,自动地从互联网上的各种网站、页面中提取信息,并将这些信息进行整理、存储或分析。

爬虫通常会按照程序中设定的规则和逻辑,自动地访问网页、提取数据、解析内容,然后将数据保存到本地数据库或进行进一步处理。爬虫可以用于各种目的,包括搜索引擎的网页抓取、数据挖掘、信息监控、内容聚合等。通过爬虫技术,人们可以快速、高效地获取互联网上的海量信息,从而实现各种应用和服务。

二、快速编写一个爬虫

2.1 爬虫需要用到的库

官方文档:

Requests: 让 HTTP 服务人类 — Requests 2.18.1 文档

Beautiful Soup 4.4.0 文档 — Beautiful Soup 4.2.0 中文 文档

lxml/lxml: The lxml XML toolkit for Python (github.com)

**Requests库:**是一个功能强大且用户友好的 Python HTTP 库,用于发送各种类型的 HTTP 请求。它简化了与 Web 服务进行通信的过程,并提供了简洁的 API 以及丰富的功能,使得在 Python 中进行网络请求变得更加容易和便捷。

**BeautifulSoup4库:**是一个用于解析 HTML 和 XML 文档的 Python 库,它提供了简单而灵活的方式来从网页中提取数据。通过使用 Beautiful Soup,我们可以方便地遍历文档树、搜索特定标签和提取内容,从而实现网页数据的抓取和处理。

lxml库: 是一个高性能的 XML 和 HTML 解析库,它基于 libxml2和 libxslt库,提供了快速而稳定的解析功能。lxml 的设计目标是提供一个简单而强大的 API,使得在 Python 中处理 XML 和 HTML 文档变得更加高效和便捷。

2.2 搭建项目工程

image-20240403124853963

此处包管理器我用的poetry,其它皆可自行选择

2.3 安装三方库

poetry add beautifulsoup4
poetry add requests
poetry add lxml
poetry add fake-useragent #用于伪装User-Agent

User-Agent 是 HTTP 协议中的一个头部字段,用于标识发起 HTTP 请求的客户端信息。通常,User-Agent 头部字段包含了客户端的软件类型、操作系统、版本号等信息,以便服务器能够根据客户端的特征来做出相应的响应。在进行网络请求时,设置适当的 User-Agent 可以帮助我们模拟不同类型的客户端,从而获取不同的响应或绕过一些限制。有时候,网站可能会根据 User-Agent来识别爬虫程序或自动化请求,并做出不同的响应。

image-20240403143049625

检查相关依赖,使用pipenv或者Virtualenv的虚拟环境,记得检查requirement.txt

2.4 案例编写

import requests
from bs4 import BeautifulSoup
from fake_useragent import UserAgent
ua = UserAgent().edge
headers = {'User-Agent': ua
}
resp = requests.get(url="http://www.baidu.com", headers=headers)
soup = BeautifulSoup(resp.text, 'html.parser')
print(soup.prettify())

该爬虫仅向百度发起请求,然后传入BeautifulSoup(过后称为bs4)并返回其实例

返回的就是www.baidu.com的网页源码,真正的爬虫在请求完成后,还要通过bs4解析搜索特定的数据,完成数据的清理

image-20240403143759574

三、爬虫实战

爬取本人CSDN个人页相关信息(总访问量、原创文章数、排名、粉丝数),并将数据存储至本地

image-20240403144147158

3.1 目标分析

image-20240403145917096

所有信息都在这一层级下

3.2 清洗数据

import randomimport requests
from ip_pool import ip_pool
from fake_useragent import UserAgent
from bs4 import BeautifulSoup
from lxml import etreeua = UserAgent().edge
# 目标url
url = "https://blog.csdn.net/m0_50281408?spm=1010.2135.3001.5421"
# 请求头信息
headers = {'User-Agent': ua
}
resp = requests.get(url=url, headers=headers)
# 第一次清洗
soup = BeautifulSoup(resp.text, 'lxml')
part = soup.find('div', class_='user-profile-head-info-r-c')
temp = BeautifulSoup(str(part), 'lxml')
# 第二次清洗
final_num = temp.findAll('div', class_='user-profile-statistics-num')
final_name = temp.findAll('div', class_='user-profile-statistics-name')
result = {}
for x, y in zip(final_name, final_num):result[str(x.string)] = str(y.string)
print(result)

image-20240403163337460

四、代码改进

在执行爬虫的过程中,有网站会有反爬措施,有许多可以绕过的手段,比如IP代理池,本文便使用到了IP代理池技术,扫码可以免费试用一段时间,这个还是非常好用,配置也非常简单

微信图片_20240403163926

import requestsAPI = ("试用它提供的API接口")
proxyusernm = "****"  # 代理帐号
proxypasswd = "****"  # 代理密码def get_ip_pool(api: str) -> list:pool: dict[str] = dict(requests.get(api).json())final_ip_pool: list[str] = []for x in pool["result"]:final_ip_pool.append(f"http://{proxyusernm}:{proxypasswd}@{x['ip']}:{x['port']}")return final_ip_pool#以列表的形式返回代理池
ip_pool = get_ip_pool(API)

然后在requests请求中添加上代理

image-20240403164316609

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

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

相关文章

Qt/C++推流组件使用说明

2.1 网络推流 公众号:Qt实战,各种开源作品、经验整理、项目实战技巧,专注Qt/C软件开发,视频监控、物联网、工业控制、嵌入式软件、国产化系统应用软件开发。 公众号:Qt入门和进阶,专门介绍Qt/C相关知识点学…

镗床工作台开槽的作用

镗床工作台开槽的作用主要有以下几点: 改善工作台的刚度和稳定性:开槽可以增加工作台的刚度,使其能够承受更大的切削力和振动力,提高工作台的稳定性。 方便工件夹紧和定位:开槽可用于夹紧和定位工件,使其能…

ChatGPT利器:让论文写作更高效更精准

ChatGPT无限次数:点击直达 ChatGPT利器:让论文写作更高效更精准 引言 在当今信息爆炸的时代,论文写作是许多学者和专业人士必不可少的任务。然而,即使对于有经验的专业人士,写作仍然是一个繁琐且耗时的过程。在这样的背景下&…

【DM8】序列

创建序列 图形化界面创建 DDL CREATE SEQUENCE "TEST"."S1" INCREMENT BY 1 START WITH 1 MAXVALUE 100 MINVALUE 1;参数&#xff1a; INCREMENT BY < 增量值 >| START WITH < 初值 >| MAXVALUE < 最大值 >| MINVALUE < 最小值…

PostgreSQL入门到实战-第十弹

PostgreSQL入门到实战 PostgreSQL数据过滤(三)官网地址PostgreSQL概述PostgreSQL中OR操作理论PostgreSQL中OR实操更新计划 PostgreSQL数据过滤(三) 了解PostgreSQL OR逻辑运算符以及如何使用它来组合多个布尔表达式。 官网地址 声明: 由于操作系统, 版本更新等原因, 文章所列…

MQ之————如何保证消息的可靠性

MQ之保证消息的可靠性 1.消费端消息可靠性保证&#xff1a; 1.1 消息确认&#xff08;Acknowledgements&#xff09;&#xff1a; 消费者在接收到消息后&#xff0c;默认情况下RabbitMQ会自动确认消息&#xff08;autoAcktrue&#xff09;。为保证消息可靠性&#xff0c;可以…

Thingsboard PE智慧运维仪表板实例(二)【智慧排口截污实例】

ThingsBoard 的仪表板是一个用于可视化和监控物联网数据的重要组件。 它具有以下特点: 1. 可定制性:用户可以根据自己的需求创建各种类型的图表、表格和指标。 2. 数据可视化:以直观的方式展示设备数据,帮助用户快速了解系统状态。 3. 实时更新:实时反映设备的最新数据…

springboot websocket 持续打印 pod 日志

springboot 整合 websocket 和 连接 k8s 集群的方式参考历史 Java 专栏文章 修改前端页面<!DOCTYPE html> <html><head><meta charset="utf-8"><title>Java后端WebSocket的Tomcat实现</title><script type="text/javasc…

java八股文是什么?

"Java八股文"是一个来自中国程序员圈子的术语&#xff0c;用来指代那些在Java编程语面试中常被问到的基础知识点、理论概念和技术细节。这个词源于中国古代科举考试中的“八股文”&#xff0c;指的是一种固定格式和套路的文章。在现代编程面试中&#xff0c;"Ja…

Vant DropdownMenu 下拉菜单带搜索功能

Vant DropdownMenu 下拉菜单带搜索功能 效果图&#xff1a; 上代码&#xff1a; <van-dropdown-menu active-color"#E33737"><van-dropdown-item ref"dropdownItem"><template #title><span>{{ dropdownItem.text }}</span…

【LeetCode热题100】【二叉树】二叉树的直径

题目链接&#xff1a;543. 二叉树的直径 - 力扣&#xff08;LeetCode&#xff09; 要找两个节点之间最多的边数&#xff0c;这个最多的边数必定是某个节点的左右子树的深度之和&#xff0c;因此递归计算每个子树的深度&#xff0c;过程中记录最大和即可 class Solution { pub…

轻松上手,使用Go语言操作Redis数据库

在 Go 语言中使用 Redis 非常简单&#xff0c;可以使用第三方的 Redis 客户端库来与 Redis 服务器进行交互。在 Go 中&#xff0c;一些常用的 Redis 客户端库包括 "github.com/go-redis/redis/v8"、"github.com/gomodule/redigo/redis" 等。 Go 操作 Redi…

PVE下安装配置openwrt和ikuai

开端 openwrt 和 ikuai 是比较出名的软路由系统。我最早接触软路由还是因为我的一个学长要改自己家里的网络&#xff0c;使用软路由去控制网络。我听说后便来了兴致&#xff0c;也在我家搞了一套软路由系统。现在我已经做完了&#xff0c;就想着写个文章记录一下。 软路由简介…

Centos7 部署Zabbix6.0 LTS

官网&#xff1a;Download and install Zabbix 为您的平台安装和配置Zabbix a.安装Zabbix存储库 # yum install zabbix-proxy-mysql zabbix-sql-scripts zabbix-selinux-policy # rpm -Uvh https://repo.zabbix.com/zabbix/6.4/rhel/7/x86_64/zabbix-release-6.4-1.el7.no…

java操作linux

文章目录 远程连接服务器执行linux命令或shell脚本介绍Process的方法相关类UML 工具类基本工具类依赖第三方的工具类 远程连接服务器 java程序远程linux服务器有两个框架分别是&#xff1a;jsch与ganymed-ssh2框架。推荐使用jsch框架&#xff0c;因为ganymed-ssh2框架不支持麒…

IDEA 宝贝插件

1. Codota— 代码智能提示 Codota还包含一个网站&#xff1a;https://www.codota.com/code 2.Alibaba Java Code Guidelines— 阿里巴巴 Java 代码规范 3. SequenceDiagram —— 调用链路自动生成时序图 4. google-java-format —— 代码自动格式化

百度驾驶证C++离线SDK V1.1 C#接入

百度驾驶证C离线SDK V1.1 C#接入 目录 说明 效果 项目 代码 下载 说明 自己根据SDK封装了动态库&#xff0c;然后C#调用。 SDK包结构 效果 项目 代码 using Newtonsoft.Json; using OpenCvSharp; using System; using System.Collections.Generic; using System.D…

C++矩阵库Armadillo出现warning solve() system is singular错误的解决

本文介绍使用C 语言的矩阵库Armadillo时&#xff0c;出现报错system is singular; attempting approx solution的解决方法。 在之前的文章中&#xff0c;我们介绍过Armadillo矩阵库在Visual Studio软件C环境中的配置方法&#xff08;https://blog.csdn.net/zhebushibiaoshifu/a…

使用midjourney搞出一套三国人物画像!

当下已进入如火如荼的全民AI时代&#xff0c;最近体验了下midjourney&#xff0c;使用它的以图生图功能生成出来一套三国人物画像&#xff0c;和大家分享下使用心得。 使用midjourney的准备工作 下载工具 使用midjourney生产图片依赖的工具和流程&#xff0c;大致如下&#…

ssh远程压测断网,导致程序中断,解决方案

解决方案是用tmux功能&#xff0c;很好用&#xff0c;亲测有效 tmux是一种终端复用工具&#xff0c;它允许用户在单个终端窗口中同时运行多个终端会话。tmux提供了多个窗口和面板的功能&#xff0c;使用户可以轻松地切换和管理多个终端会话。 使用tmux可以实现以下功能&#x…