【Python网络爬虫入门教程1】成为“Spider Man”的第一课:HTML、Request库、Beautiful Soup库

news2024/11/27 10:44:17

Python 网络爬虫入门:Spider man的第一课

  • 写在最前面
    • 背景知识介绍
    • 蛛丝发射器——Request库
    • 智能眼镜——Beautiful Soup库
  • 第一课总结

写在最前面

有位粉丝希望学习网络爬虫的实战技巧,想尝试搭建自己的爬虫环境,从网上抓取数据。

前面有写一篇博客分享,但是内容感觉太浅显了
【一个超简单的爬虫demo】探索新浪网:使用 Python 爬虫获取动态网页数据

本期邀请了擅长爬虫的朋友@PoloWitty,来撰写这篇博客。通过他的专业视角和实战经验,一步步引导我们入门,成为一名数据探索的“Spider Man”。

【Python网络爬虫入门教程1】成为“Spider Man”的第一课:HTML、Request库、Beautiful Soup库
【Python网络爬虫入门教程2】成为“Spider Man”的第二课:观察目标网站、代码编写


随着互联网数据的指数级增长,了解如何有效地提取这些信息变得越来越重要。无论是文本模型如ChatGPT,还是视觉模型如Stable Diffusion,它们的训练数据大多来源于互联网的海量数据。在这个日新月异的大数据时代,爬虫也算是其中不得不点的一项基础技能树了。

本系列文章将深入浅出地介绍Python网络爬虫的基础知识和技术,从 Requests 库到 Scrapy 框架的 入门级 使用,为你开启python网络爬虫的大门,成为spider man的一员,并最终以ScrapeMe网站作为目标示例,爬取下网站上的可爱又有趣的宝可梦照片。

在开始之前,还要啰嗦几句叠个甲,网络爬虫虽然强大,但在使用时必须遵守法律法规和网站的爬虫协议。不违法爬取数据,遵守相关法律法规哦~

请添加图片描述

这是本系列的第一篇文章,将会介绍在编写网络爬虫的过程中需要了解的互联网前端背景知识,以及两个简洁易用的相关库的使用。

通过本教程,你将学会如何开始使用Python进行网络爬虫,从而在这个数据驱动的时代中,更好地利用可用的网络资源。我们期待看到你成为一名数据探索的“Spider Man”!

欢迎在评论分享在爬虫中遇到的问题,让我们一起讨论和学习!

背景知识介绍

要成功编写一个Python爬虫,关键在于对目标网站进行精确的定制化设计。同时,面对常见的反爬虫机制,你还需要具备应对策略的准备。Python爬虫的技能树广泛而深入,即使是最基础的爬虫,也涉及到HTML、CSS和JavaScript等前端知识。在此,我们将简要介绍这些基础知识,为你的爬虫之旅打下坚实的基础。

HTML是网页构建的骨架,通过各种标记语言来定义页面内容。比如<img>标签用来标记图像,<a>标签用来标记链接,而文本可以用<p>(段落)或者<h1><h6>(标题)来标记,在爬取的过程中就需要根据这些来对内容进行筛选。CSS则是美化大师,最常用的就是给HTML中的元素加上类名(class)来定义样式。比如,你可以给所有标题元素指定相同的样式,这样就能保持一致风格。

接下来是JS,它让页面动起来!一个常见的用法是使用document.getElementBy这类方法获取页面上的元素。比如,document.getElementById('someId')可以获取带有特定ID的元素,而document.getElementsByClassName('someClass')可以获取所有拥有相同类名的元素。通过这些方法,你能轻松捕获页面上的各种东西,让爬虫更精准地抓取你需要的信息!

当然,这里提到的都只是在编写爬虫的过程中可能最经常会用到的相关知识,如果想要获取更多相关内容,可以在网上搜索相关系列课程进行学习(比如菜鸟教程),这里就不再深入展开了。

接下来咱们来看看在编写爬虫过程中我们会用到的第一个库:request库。

蛛丝发射器——Request库

现在,咱们来谈谈requests库。requests库就像是蜘蛛侠的蛛丝发射器!想象一下,蜘蛛侠用蛛丝发射器轻松地抓住高楼大厦上的东西,requests库也能轻松地抓取网页上的数据!

就像蜘蛛侠能迅速把蛛丝射向目标一样,requests.get()方法能迅速向网站发出请求,抓取你想要的信息。而且,就像蜘蛛侠可以根据需要调整蛛丝的力度和角度一样,你也可以用requests库的不同参数调整请求,让它更适合你的需求!

有时候,你得给服务器点提示,告诉它你是谁。那就用requestsheaders参数,就像是在门口留个便条一样。而且,如果你要往网站发送数据,比如登录信息或者表单内容,requests库也能搞定!

下面来举个例子实操一下:

import requests
import json

url = 'http://t.weather.sojson.com/api/weather/city/101010100'
response = requests.get(url) # 发送请求并得到返回结果

obj = json.loads(response.text) # 加载获取的json格式数据
print(obj)  

通过上面的代码,就可以利用天气api获取到北京市的天气。然后这个api返回的内容其实是个json格式的对象,我们可以使用json.loads()方法将其加载为一个python对象。

好了,学习到这里,你其实就已经可以利用request库和一些api服务设计出一些很炫酷的东西了hhh,比方说利用天气的api再加上一些网页的前端知识,你也可以自己做一个天气预报程序了 ^o^/


但是,如果有小伙伴尝试把上面的url换成https://www.baidu.com,可能就会发现response.text获取到的东西有点怪异。别慌!这是因为网页的内容以一种和平常不一样的编码形式展现出来了。

幸运的是,这时就该请出BeautifulSoup登场了!就像spider man的智能眼镜一样,BeautifulSoup库能帮你将那些乱七八糟的字符瞬间变成你看得懂的语言,让你轻松读懂网页的内容!

智能眼镜——Beautiful Soup库

当直接使用request库去请求https://www.baidu.com时,返回的其实是网页的文本表示,大家一般会使用DOM(文档对象模型)来对它进行解释。当你在浏览器中打开一个网页时,浏览器会下载网页的HTML、CSS和JavaScript文件,然后解析这些文件,构建成一个DOM树。这个树形结构代表了网页的层级结构,比如标题、段落、链接等等元素以及它们的嵌套关系。

Beautiful Soup就是专为网页解析设计的,它对于DOM(文档对象模型)树的解析简直游刃有余。用Beautiful Soup,你可以像操作树一样操作这个DOM树,轻松找到你想要的内容。比如,你可以用find()find_all()方法按标签名或者类名查找元素,就像在树中找到特定类型的分支一样。

如果我们拿百度页面举例,假设你想找到其中所有的链接,现在就可以用类似这样的代码来进行实现:

import requests
from bs4 import BeautifulSoup

url = 'https://www.baidu.com'
response = requests.get(url)
soup = BeautifulSoup(response.text, 'html.parser')

# 找到所有的链接
links = soup.find_all('a')

# 输出所有链接的地址
for link in links:
    print(link.get('href'))

除了获取所有的链接,我们还可以利用bs4实现各种各样的功能,比方说,我们如果将上面的代码中的'a'替换成'img',将'href'替换成'src',我们便可以获取到百度页面中所有图片的链接,如果再利用request库对这些链接地址进行一下请求,我们就可以轻松的爬取下该页面下所有的图片了!

第一课总结

通过本系列教程的第一课,你应该已经了解到了使用python编写爬虫的一些基础知识,并且对于requests库和Beautiful Soup库有了一定的认识。利用本节课上学到的知识,你就已经可以编写一些简单的爬虫程序啦 ^ o^y

在下一课中,将会利用本堂课上学到的基础知识,使用requests库和Beautiful Soup库编写针对宝可梦图片的简单版爬虫程序。

欢迎持续关注本系列课程!

简单的爬虫程序啦 ^ o^y

在下一课中,将会利用本堂课上学到的基础知识,使用requests库和Beautiful Soup库编写针对宝可梦图片的简单版爬虫程序。

欢迎持续关注本系列课程!

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

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

相关文章

移动到末尾(蓝桥杯)

#include <stdio.h> #include <stdlib.h>#define N 1000 //双指针思想 int main(int argc, char *argv[]) {int n;int s[N];scanf("%d",&n);for(int i 0 ; i < n ; i)scanf("%d",&s[i]);int j 0; for(int i 0 ; …

SSM与SpringBoot面试题总结

什么是spring&#xff1f;谈谈你对IOC和AOP的理解。 Spring:是一个企业级java应用框架&#xff0c;他的作用主要是简化软件的开发以及配置过程&#xff0c;简化项目部署环境。 Spring的优点: 1、Spring低侵入设计&#xff0c;对业务代码的污染非常低。 2、Spring的DI机制将…

什么是神经网络的非线性

大家好啊&#xff0c;我是董董灿。 最近在写《计算机视觉入门与调优》&#xff08;右键&#xff0c;在新窗口中打开链接&#xff09;的小册&#xff0c;其中一部分说到激活函数的时候&#xff0c;谈到了神经网络的非线性问题。 今天就一起来看看&#xff0c;为什么神经网络需…

Linux中的SNAT与DNAT实践

Linux中的SNAT与DNAT实践 1、SNAT的介绍1.1&#xff0c;SNAT概述1.2&#xff0c;SNAT源地址转换过程1.3&#xff0c;SNAT转换 2、DNAT的介绍2.1&#xff0c;DNAT概述2.2&#xff0c;DNAT转换前提条件2.3&#xff0c;DNAT的转换 3、防火墙规则的备份和还原4、tcpdump抓包工具的运…

kafka学习笔记--如何保证生产者数据可靠、不重复、有序

本文内容来自尚硅谷B站公开教学视频&#xff0c;仅做个人总结、学习、复习使用&#xff0c;任何对此文章的引用&#xff0c;应当说明源出处为尚硅谷&#xff0c;不得用于商业用途。 如有侵权、联系速删 视频教程链接&#xff1a;【尚硅谷】Kafka3.x教程&#xff08;从入门到调优…

改进YOLOv8注意力系列一:结合ACmix、Biformer、BAM注意力机制

🗝️改进YOLOv8注意力系列一:结合ACmix、Biformer、BAM注意力机制 代码ACmixBiFormerBAMBlock加入方法各种yaml加入结构本文提供了改进 YOLOv8注意力系列包含不同的注意力机制以及多种加入方式,在本文中具有完整的代码和包含多种更有效加入YOLOv8中的yaml结构,读者可以获…

特征驱动开发

FDD 方法来自于一个大型的新加坡银行项目。FDD 的创立者 Jeff De Luca 和 Peter Coad 分别是这个项目的项目经理和首席架构设计师。在 Jeff 和 Peter 接手项目时&#xff0c;客户已经经历了一次项目的失败&#xff0c;从用户到高层都对这个项目持怀疑的态度&#xff0c;项目组士…

WLAN配置实验

本文记录了WLAN配置实践的过程&#xff0c;该操作在华为HCIA中属于相对较复杂的实验&#xff0c;记录过程备忘。这里不就WLAN原理解释&#xff0c;仅进行配置实践&#xff0c;可以作为学习原理时候的参考。本文使用华为ENSP进行仿真。实验拓扑图如下&#xff1a; 1.WLAN工作流程…

基于OpenCV的流水线包装箱检测计数应用(附源码)

导 读 本文主要介绍基于OpenCV的流水线包装箱检测计数应用,并给出源码。 资源下载 完整代码和视频下载地址: https://github.com/freedomwebtech/rpi4-conveyor-belt-boxces-counter 核心代码如下(cboxtest.py): import cv2import numpy as npfrom tracker import*cap=c…

javaSwing酒店管理

一、介绍 在这篇博客中&#xff0c;我们将介绍一个基于MySQL数据库、Java编程语言和Swing图形用户界面的简单酒店管理系统。该系统包括了查询房客信息、查询房客状态、修改房客信息、添加房间信息、添加住户、退房管理、预定管理、退订管理、入账管理、出账管理、修改资料等多…

HarmonyOS4.0从零开始的开发教程11给您的应用添加弹窗

HarmonyOS&#xff08;十&#xff09;给您的应用添加弹窗 概述 在我们日常使用应用的时候&#xff0c;可能会进行一些敏感的操作&#xff0c;比如删除联系人&#xff0c;这时候我们给应用添加弹窗来提示用户是否需要执行该操作&#xff0c;如下图所示&#xff1a; 弹窗是一种…

5.题目:编号1624 小蓝吃糖果

题目: ### 这道题主要考察poriority_queue优先队列 #include<bits/stdc.h> using lllong long; using namespace std; int main(){ios::sync_with_stdio(0),cin.tie(0),cout.tie(0);int n;cin>>n;priority_queue<int> pq;ll sum0,x;for(int i1;i<n;i){c…

基于SSM的java衣服商城

基于SSM的java衣服商城 一、系统介绍二、功能展示四、其他系统实现五、获取源码 一、系统介绍 项目类型&#xff1a;Java EE项目 项目名称&#xff1a;基于SSM的美衣商城 项目架构&#xff1a;B/S架构 开发语言&#xff1a;Java语言 前端技术&#xff1a;Layui等 后端技术…

数据结构:数和二叉树

树概念及结构 树的结构&#xff1a; 树是一种非线性的数据结构&#xff0c;它是由n个有限节点组成一个具有层次关系的集合。把它叫做树是因为它看起来像一棵倒挂的树&#xff0c;即根朝上&#xff0c;叶朝下。 有一个特殊的节点&#xff0c;成为根节点&#xff0c;根节点没有…

详解ZNS SSD基本原理

ZNS SSD的原理是把namespace空间划分多个zone空间&#xff0c;zone空间内部执行顺序写。这样做的优势&#xff1a; 降低SSD内部的写放大&#xff0c;提升SSD的寿命 降低OP空间&#xff0c;host可以获得更大的使用空间 降低SSD内部DRAM的容量&#xff0c;降低整体的SSD成本 降…

15、lambda表达式、右值引用、移动语义

前言 返回值后置 auto 函数名 (形参表) ->decltype(表达式) lambda表达式 lambda表达式的名称是一个表达式 (外观类似函数)&#xff0c;但本质绝非如此 语法规则 [捕获表] (参数表) 选项 -> 返回类型 { 函数体; }lambda表达式的本质 lambda表达式本质其实是一个类…

Windows汇编调用printf

VS2022 汇编 项目右键 生成依赖项 生成自定义 勾选masm 链接器 高级 入口点 main X86 .686 .model flat,stdcall option casemap:none includelib ucrt.lib includelib legacy_stdio_definitions.libEXTERN printf:proc.data szFormat db %s,0 szStr db hello,0.code main…

AI 绘画 | Stable Diffusion 艺术字与光影效果

前言 这篇文章教会你如何使用Stable Diffusion WEB UI扩展插件ControlNet控制光影模型实现艺术字与图片的光影效果。艺术字主要原理是用到了Depth (深度)算法和模型,光影效果是用到了control_v1p_sd15_brightness(亮度)和control_v1p_sd15_illumination(光亮)两个模型其中…

力扣每日一题day32[104. 二叉树的最大深度]

给定一个二叉树 root &#xff0c;返回其最大深度。 二叉树的 最大深度 是指从根节点到最远叶子节点的最长路径上的节点数。 示例 1&#xff1a; 输入&#xff1a;root [3,9,20,null,null,15,7] 输出&#xff1a;3示例 2&#xff1a; 输入&#xff1a;root [1,null,2] 输出…

Spring Boot 3 集成 Druid 连接池详解

在现代的Java应用中&#xff0c;使用一个高效可靠的数据源是至关重要的。Druid连接池作为一款强大的数据库连接池&#xff0c;提供了丰富的监控和管理功能&#xff0c;成为很多Java项目的首选。本文将详细介绍如何在Spring Boot 3项目中配置数据源&#xff0c;集成Druid连接池&…