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相关知识点学…

镗床工作台开槽的作用

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

【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. 实时更新:实时反映设备的最新数据…

Vant DropdownMenu 下拉菜单带搜索功能

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

PVE下安装配置openwrt和ikuai

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

java操作linux

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

百度驾驶证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;大致如下&#…

vue3移动端H5 瀑布流显示列表

以上效果 是之前发送的改进版 waterList <template><view class"pro-cons" v-if"data.length"><view class"cons-left"><template v-for"(item, index) in data"><template v-if"(index 1) % 2 1…

NLP在搜索召回领域中的应用场景

自然语言处理&#xff08;NLP&#xff09;在搜索召回领域中的应用场景非常广泛&#xff0c;它通过理解和分析人类语言&#xff0c;提高了信息检索的准确性和效率。以下是一些具体的应用场景&#xff1a; 1. 搜索引擎优化 NLP技术可以用于优化搜索引擎的查询处理&#xff0c;通…

【DM8】外部表

外部表是指不存在于数据库中的表。 通过向达梦数据库定义描述外部表的元数据&#xff0c;可以把一个操作系统文件当成一个只读的数据库表&#xff0c;对外部表将像普通定义的表一样访问。 外部表的数据存储在操作系统文件中&#xff0c;建立外部表的时候&#xff0c;不会产生…

下载安装JDK17(windows)

官网地址 Oracle | Cloud Applications and Cloud Platform 点击Products拉倒最下面点击java 点击右下角Download Java 选择JDK17 点击Windows&#xff0c;下载第二个 下载完成点击一下步安装就好了 认真看这段话 ​ JDK 17 binaries are free to use in production and free…

代码整洁之道【2】--函数

关于函数部分的总结 一、函数只做一件事 函数应该只做一件事、做好这件事、只做这件事。 判断函数是否不止做了一件事&#xff0c;还有一个方法&#xff0c;就是看是否能再拆出一个函数&#xff0c;该函数不仅只是单纯地重新 二、函数尽量不要太长 按照作者的理论&#xff…

【算法】双指针算法

个人主页 &#xff1a; zxctscl 如有转载请先通知 题目 1. 283. 移动零1.1 分析1.2 代码 2. 1089. 复写零2.1 分析2.2 代码 3. 202. 快乐数3.1 分析3.2 代码 4. 11. 盛最多水的容器4.1 分析4.2 代码 5. LCR 179. 查找总价格为目标值的两个商品5.1 分析5.2 代码 6. 15. 三数之和…

大语言模型开源数据集

本文目标&#xff1a;汇聚目前大语言模型预训练、微调、RM/RL、评测等全流程所需的常见数据集&#xff0c;方便大家使用&#xff0c;本文持续更新。文章篇幅较长&#xff0c;建议收藏后使用。 一、按语料类型分类 1、维基百科类 No.1 Identifying Machine-Paraphrased Plagia…

企业微信认证后可以修改主体吗?

企业微信变更主体有什么作用&#xff1f;如果原有的公司注销了&#xff0c;或者要更换一家公司主体来运营企业微信&#xff0c;那么就可以进行变更主体&#xff0c;变更主体后才可以保留原来企业微信上的所有用户&#xff0c;否则就只能重新申请重新积累用户了。企业微信变更主…