python爬虫入门(理论)

python爬虫

学习网站

在这里插入图片描述
在这里插入图片描述

一、准备

  1. 环境搭建

    • requests

    • beautifulsoup4

    • selenium

  2. 爬虫架构

在这里插入图片描述

  • URL管理器:管理URL,存储已爬取或待爬取的URL

  • 网页下载器:破解网页,进行下载

  • 网页解析器:对网页的HTML样式、连接的URL等进行解析

二、架构详解

  1. request网页下载器

    在这里插入图片描述

    • request:发送请求

    • response:返回数据
      在这里插入图片描述

  2. requests的使用

    1. url输入
    2. requests.get(url)获取
    3. status_code判断200/400
    4. headers获取各关键字段,encoding获取或修改编码类型,r.text获取文本
  3. URL管理器

    在这里插入图片描述

    • 对外接口:URL的获取和新增

    • 逻辑:取出时状态变成已爬取,新增时判断存在

    • 数据存储:

  4. URL管理器代码实现

    1. 整体思路:

      • 初始化:新旧路由列表存储
      • 新增URL:判断路由是否在新旧列表里,否add
      • 新增URL列表:判断路由是否存在,后循环调用↑
      • 获取URL:将url从新路由列表中取出并存入旧路由列表后返回此url
      • 判断URL是否已经存在:返回新列表长度>0
    2. 代码实现

      class UrlManager:"""url路由器"""# 初始化def __init__(self):self.new_urls = set()self.old_urls = set()#新增urldef add_new_url(self,url):if url is None or len(url) == 0:returnif url in self.new_urls or url in self.old_urls:returnself.new_urls.add(url)#新增url列表(批量)def add_new_urls(self,urls):if urls is None or len(urls) == 0:returnfor url in urls:self.add_new_url(url)#获取一个urldef get_url(self):if self.has_new_url():url = self.new_urls.pop() # 将url从new_urls中取出self.old_urls.add(url) # 添加到已经访问过的url中return urlelse:return None#判断url是否已经存在def has_new_url(self):return len(self.new_urls) > 0 # 判断是否为空# 测试,外界访问此类时,不会会执行此函数
      if __name__ == "__main__":url_manager = UrlManager()url_manager.add_new_url("url1")url_manager.add_new_urls(["url1","url2"])print(url_manager.new_urls,url_manager.old_urls)print("#"*30)new_url = url_manager.get_url()print(url_manager.new_urls,url_manager.old_urls)print("#" * 30)new_url = url_manager.get_url()print(url_manager.new_urls, url_manager.old_urls)print("#" * 30)new_url = url_manager.get_url()print(url_manager.new_urls, url_manager.old_urls)
      
  5. Beaytifulsoup解析HTML的实例

    • test.heml文件
    <!DOCTYPE html>
    <html lang="en">
    <head><meta http-equiv=Content-Type content="text/html;charset=utf-8"><title>网页标题</title>
    </head>
    <body><h1>标题1</h1><h2>标题2</h2><h3>标题3</h3><h4>标题4</h4><div id="content" class="default"><p>段落</p><a href="http://www.baidu.com">百度</a> <br/><a href="http://www.crazyant.net">疯狂的蚂蚁</a> <br/><a href="http://www.igiyi.com">爱奇艺</a> <br/><img src="https://ww.python.org/static/img/python-logo.png"/>
    </div>
    </body>
    </html>
    
    • test.py
    from bs4 import BeautifulSoup# 读取html文件,不用关闭
    with open('./test.html',encoding='utf-8') as fin:html_doc  = fin.read()# 创建BeautifulSoup对象
    soup = BeautifulSoup(html_doc,"html.parser")# 定位,查找div标签
    div_node = soup.find("div",id="content")
    print(div_node)#检查print("#"*10)# 查找div标签下的所有a标签
    links = div_node.find_all('a')
    for link in links:print(link.name,link["href"],link.get_text())# 查找div标签下的img标签
    img = div_node.find("img")
    print(img["src"])

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

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

相关文章

windows-本地部署Git仓库-安装Gitea

windows-本地部署Git仓库-安装Gitea 初始化MysQL数据库下载运行后关闭配置服务初始化打开防火墙指定端口入站规则 初始化MysQL数据库 create database gitea character set utf8mb4; 下载 运行后关闭 配置服务 初始化 打开防火墙指定端口入站规则

CV 图像处理基础笔记大全(超全版哦~)!!!

一、图像的数字化表示 像素 数字图像由众多像素组成&#xff0c;是图像的基本构成单位。在灰度图像中&#xff0c;一个像素用一个数值表示其亮度&#xff0c;通常 8 位存储&#xff0c;取值范围 0 - 255&#xff0c;0 为纯黑&#xff0c;255 为纯白。例如&#xff0c;一幅简单的…

Android-目前最稳定和高效的UI适配方案

谈到适配&#xff0c;首先需要介绍几个基本单位&#xff1a; 1、密度无关像素&#xff08;dp&#xff09;&#xff1a; 含义&#xff1a;density-independent pixel&#xff0c;叫dp或dip&#xff0c;与终端上的实际物理像素点无关 单位&#xff1a;dp&#xff0c;可以保证在…

Leetcode 91. 解码方法 动态规划

原题链接&#xff1a;Leetcode 91. 解码方法 自己写的代码&#xff1a; class Solution { public:int numDecodings(string s) {int ns.size();vector<int> dp(n,1);if(s[n-1]0) dp[n-1]0;for(int in-2;i>0;i--){if(s[i]!0){string ts.substr(i,2);int tmpatoi(t.c…

【算法】枚举

枚举 普通枚举1.铺地毯2.回文日期3.扫雷 二进制枚举1.子集2.费解的开关3.Even Parity 顾名思义&#xff0c;就是把所有情况全都罗列出来&#xff0c;然后找出符合题目要求的那一个。因此&#xff0c;枚举是一种纯暴力的算法。一般情况下&#xff0c;枚举策略都是会超时的。此时…

网络分析仪测试S参数

S参数的测试 一&#xff1a;S参数的定义 S参数&#xff08;Scattering Parameters&#xff0c;散射参数&#xff09;是一个表征器件在射频信号激励下的电气行为的工具&#xff0c;它以输入信号、输出信号为元素的矩阵来表现DUT的“传输”和“散射”效应&#xff0c;输入、输出…

RabbitMQ与Kafka的比较及应用

引言 在构建分布式系统和微服务架构时&#xff0c;数据库与中间件的选择至关重要。它们不仅是数据流转的桥梁&#xff0c;更是确保系统高效、稳定运行的关键组件。本文将深入探讨两种流行的消息中间件——RabbitMQ与Kafka&#xff0c;从架构特点、优势、应用场景到常见问题解决…

Word中如何格式化与网页和 HTML 内容相关的元素

在 Microsoft Word 中&#xff0c;HTML变量、HTML打字机、HTML地址、HTML定义、HTML键盘、HTML缩写、HTML样本、HTML引文 等样式是针对在文档中处理与 HTML 相关内容时&#xff0c;方便格式化特定类型的文本元素。以下是每个样式的详细说明及其使用场景&#xff1a; 1. HTML 变…

联通用户管理系统(一)

#联通用户管理系统&#xff08;一&#xff09; 1.新建项目 如果你是windows的话&#xff0c;界面应该是如下的&#xff1a; 2.创建app python manage.py startapp app01一般情况下&#xff1a;我们是在pycharm的终端中运行上述指令&#xff0c;但是pychrm中为我们提供了工具…

迅为RK3576开发板Android 多屏显示

迅为iTOP-3576开发板采用瑞芯微RK3576高性能、低功耗的应用处理芯片&#xff0c;集成了4个Cortex-A72和4个Cortex-A53核心&#xff0c;以及独立的NEON协处理器。它适用于ARM PC、边缘计算、个人移动互联网设备及其他多媒体产品。 1.1 Android 多屏同显 iTOP-RK3576 开发板支持…

【机器学习:二十三、迁移学习】

1. 迁移学习的定义与背景 定义 迁移学习&#xff08;Transfer Learning&#xff09;是机器学习中的一种方法&#xff0c;它通过将一个领域中学到的知识&#xff08;通常称为源领域&#xff09;应用到另一个相关领域&#xff08;目标领域&#xff09;来完成任务。传统机器学习…

apidoc thinkphp likeadmin 遇到解析报错

报错: [Semantical Error] The annotation "notes" in method app\adminapi\controller\article\ArticleCateController::lists() was never imported. Did you maybe forget to add a "use" statement for this annotation? 解决办法: config/apidoc…

大模型相关资料、基础技术和排行榜

大模型排行榜 测试集CEval中文多个学科测试集排名MMLU大规模多任务语言理解英文排名&#xff0c;介绍斯坦福排行榜Math-VMath-VistaOpen LLMs LeaderboardCMMLU 大模型数据集 标题简介19个大模型常用的评估数据集和训练数据集汇总19个大模型常用的评估数据集和训练数据集汇总最…

【Axure】配色库

配色库是一个专为设计师和创意工作者打造的在线资源平台&#xff0c;旨在提供丰富的色彩解决方案&#xff0c;帮助用户轻松找到或创造美观和谐的色彩搭配。其中&#xff0c;一个典型的配色库包含了以下几个核心元素&#xff1a; 渐变色&#xff1a;提供多样化的渐变色方案&…

设计和优化用于 AR、HUD 和高级显示系统的表面浮雕光栅

表面浮雕光栅是许多光学系统中的关键组件&#xff0c;在控制增强现实 &#xff08;AR&#xff09; 显示器、平视显示器 &#xff08;HUD&#xff09; 和其他先进光子器件中的光传播方面发挥着关键作用。作为在这个领域工作的工程师和设计师&#xff0c;您了解针对特定应用优化这…

港科夜闻 | 香港科大与微软亚洲研究院签署战略合作备忘录,推动医学健康教育及科研协作...

关注并星标 每周阅读港科夜闻 建立新视野 开启新思维 1、香港科大与微软亚洲研究院签署战略合作备忘录&#xff0c;推动医学健康教育及科研协作。根据备忘录&#xff0c;双方将结合各自于科研领域的优势&#xff0c;携手推动医学健康领域的交流与合作。合作方向将涵盖人才培训、…

HAL库 相关单词注解表示(持续更新)

SET/RESET------&#xff08;1/0&#xff09; 通常用于表示将某个位、寄存器或标志设置为特定的值&#xff08;通常 SET 表示设置为 1 &#xff0c;RESET 表示设置为 0 counter------计数器--/ˈkaʊntə(r)/ counting------计数 create------创造 “create” 作动词&…

机器学习第一道菜(一):线性回归的理论模型

机器学习第一道菜&#xff08;一&#xff09;&#xff1a;线性回归的理论模型 一、问题&#xff1a;千金买笑1.1 散点图1.2 机器学习能搞啥 二、模型的建立2.1 线性回归2.2 回归模型 前面讲了机器学习的“四大绝技”&#xff0c;今天&#xff0c;开始研究第一绝技“回归”&…

spring mvc源码学习笔记之十一

pom.xml 内容如下 <?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-instance"xsi:schemaLocation"http://maven.apache.org/P…

【Python】数据容器:列表,元组,字符串,集合字典及通用操作

文章目录 一.序列1.1list列表定义常用操作列表的遍历 1.2tuple元组定义常见操作元组的遍历 1.3str字符串定义常见操作字符串的遍历 1.4序列常用操作——切片 二.set集合定义常见操作集合的遍历 三.dict字典定义常用操作字典的嵌套 *数据容器对比总结四.数据容器的通用操作4.1通…