python爬虫入门(实践)

news2025/1/18 7:23:26

python爬虫入门(实践)

一、对目标网站进行分析

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

二、博客爬取

  1. 获取博客所有h2标题的路由

    1. 确定目标,查看源码
      在这里插入图片描述

    2. 代码实现

      """
      获取博客所有h2标题的路由
      """
      
      url = "http://www.crazyant.net"
      
      import requests
      from bs4 import BeautifulSoup
      
      #发送请求,获取页面所有内容
      r = requests.get(url)
      if r.status_code != 200:
          raise Exception("请求失败") # 抛出异常
      html_doc = r.text
      
      # 解析html,获取对应信息
      soup = BeautifulSoup(html_doc,"html.parser")
      
      h2_nodes = soup.find_all("h2",class_="entry-title")
      
      for h2_node in h2_nodes:
          link = h2_node.find("a")
          print(link["href"],link.get_text())
      
  2. 通过标题爬取所有博客文章

    """
    爬取所有博客文章
    """
    import re
    
    from utils import url_manager
    import requests
    from bs4 import BeautifulSoup
    
    root_url="http://www.crazyant.net"
    
    # 将root_url添加到urls中
    urls = url_manager.UrlManager()
    urls.add_new_url(root_url)
    
    # 获取所有页面内容,并保存到文件
    fout = open("craw_all_pages.txt","w",encoding="utf-8")
    while urls.has_new_url():
        curr_url = urls.get_url()
        r = requests.get(curr_url,timeout=2)
        if r.status_code != 200:
            print("请求失败",curr_url)
            continue
        soup = BeautifulSoup(r.text,"html.parser")
        title = soup.title.string # 获取标题
    
        fout.write('%s\t%s\n' % (curr_url, title))# 写入文件
        fout.flush()# 刷新缓冲区,直接写入文件
        print("success: %s, %s, %d"%(curr_url,title,len(urls.new_urls)))
    
        # 获取所有链接, 并添加到urls中
        links = soup.find_all("a")
        for link in links:
            href = link.get("href")
            if href is None:
                continue
            pattern = r"^http://www.crazyant.net/\d+.html$" # 匹配规则,匹配以http://www.crazyant.net/开头,并且以.html结尾的url
            # 正则匹配, 返回一个匹配对象,如果没有匹配到,返回None
            if re.match(pattern,href):
                urls.add_new_url(href)
    
    fout.close()
    
  • 运行结果
    在这里插入图片描述

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

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

相关文章

简历_使用优化的Redis自增ID策略生成分布式环境下全局唯一ID,用于用户上传数据的命名以及多种ID的生成

系列博客目录 文章目录 系列博客目录WhyRedis自增ID策略 Why 我们需要设置全局唯一ID。原因:当用户抢购时,就会生成订单并保存到tb_voucher_order这张表中,而订单表如果使用数据库自增ID就存在一些问题。 问题:id的规律性太明显、…

win32汇编环境,窗口程序中对多行编辑框的操作

;运行效果 ;win32汇编环境,窗口程序中对多行编辑框的操作 ;比如生成多行编辑框,显示文本、获取文本、设置滚动条、捕获超出文本长度消息等。 ;直接抄进RadAsm可编译运行。重点部分加备注。 ;下面为asm文件 ;>>>>>>>>>>>>>&g…

【Flink系列】5. DataStream API

5. DataStream API DataStream API是Flink的核心层API。一个Flink程序,其实就是对DataStream的各种转换。具体来说,代码基本上都由以下几部分构成: 5.1 执行环境(Execution Environment) Flink程序可以在各种上下文…

探索未来:Leap Motion JavaScript框架——开启VR与手势控制的无限可能

探索未来:Leap Motion JavaScript框架——开启VR与手势控制的无限可能 leapjs JavaScript client for the Leap Motion Controller 项目地址: https://gitcode.com/gh_mirrors/le/leapjs 项目介绍 欢迎来到Leap Motion JavaScript框架的世界!Lea…

PCM5142集成32位384kHz PCM音频立体声114dB差分输出DAC编解码芯片

目录 PCM5142 简介PCM5142功能框图PCM5142特性 参考原理图 PCM5142 简介 PCM514x 属于单片 CMOS 集成电路系列,由立体声数模转换器 (DAC) 和采用薄型小外形尺寸 (TSSOP) 封装的附加支持电路组成。PCM514x 使用 TI 最新一代高级分段 DAC 架构产品,可实现…

技术领衔 互学互鉴|ZASM召开2024年度技术交流会

1月16日,ZASM组织召开了“2024年度企业员工技术交流活动”。公司总经理,技术部门负责人及项目经理参加本次会议。 会上,公司所属各项目技术负责人围绕“三维模型切割模块的基础操作与模型发布缓存的技术演示”、“J18微型智能空中作业平台的…

UI自动化测试:异常截图和page_source

自动化测试过程中,是否遇到过脚本执行中途出错却不知道原因的情况?测试人员面临的不仅是问题的复现,还有对错误的快速定位和分析。而异常截图与页面源码(Page Source)的结合,正是解决这一难题的利器。 在实…

OSI七层协议——分层网络协议

OSI七层协议,顾名思义,分为七层,实际上七层是不存在的,是人为的进行划分,让人更好的理解 七层协议包括,物理层(我),数据链路层(据),网络层(网),传输层(传输),会话层(会),表示层(表),应用层(用)(记忆口诀->我会用表…

浅谈计算机网络04 | 现代网络需求与技术支撑

现代网络需求与技术支撑 一、网络和因特网流量的类型剖析1.1 弹性流量的自适应特征1.2 非弹性流量的刚性特征1.3 实时流量特性 二、特定领域的网络需求解析2.1 大数据环境下的网络需求分析2.2 云计算环境下的网络需求分析2.3 移动数据环境下的网络需求分析 三、QoS和QoE&#x…

微服务架构下的负载均衡:Spring Cloud如何实现高效流量分配

在Spring Cloud中,实现服务的负载均衡,主要是为了让多个服务实例能够均匀分担请求压力,就像把一堆东西分给几个人拿,确保大家都不太累。 假设你开了一个网店,有很多顾客会同时来买东西(这就是并发请求&…

L3自动驾驶开始落地,AI交通时代离我们有多远?

2025年,自动驾驶领域迎来了一个重要的里程碑——L3级别自动驾驶技术的逐步落地。据《中国汽车报》报道,多家汽车制造商已获得L3级自动驾驶的量产资质,这意味着车辆能够在特定条件下完全接管驾驶任务,而驾驶员可以在车内进行其他活…

动手学大数据-2常见的查询优化器

目录 什么是查询优化器 查询优化器分类 Top-downOptimizer Bottom-upOptimizer RBO-关系代数 RBO-优化原则 RBO-列裁剪 RBO-谓词下推 RBO-传递闭包 RBO-RuntimeFilter 小结 CBO(Cost-basedOptimizer) 概念 CBO-统计信息 CBO-统计信息…

ctfshow复现2024ciscn第一场web

2024ciscn第一场 本章内容均在ctfshow复现 图片若显示失败请参考我的blog👇 ddl08.github.io sanic python污染 源码 from sanic import Sanic from sanic.response import text, html from sanic_session import Session import pydash # pydash5.1.2 ​ ​…

Java快速入门之数组、方法

一、数组 1、数组的概念: 数组指的是一种容器,可以用来存储同种数据类型的多个值,但是数组容器在存储数据的时候,需要结合隐式转换考虑。 例如: 定义了一个int类型的数组,那么boolean、double类型的数据是…

STM32 FreeRTOS任务通知

目录 任务通知的简介 任务通知相关API函数介绍 任务通知的简介 任务通知是 FreeRTOS 中一种用于任务间通信的机制,它允许一个任务向其他任务发送简单的通知或信号,以实现任务间的同步和协作。任务通知通常用于替代二值信号量或事件标志组,提…

Chrome谷歌浏览器如何能恢复到之前的旧版本

升级了谷歌最新版不习惯,如何降级版本 未完待续。。 电脑中的Chrome谷歌浏览器升级到了最新版本,但是有种种的不适应,如何能恢复到之前的旧版本呢?我们来看看操作步骤,而且无需卸载重装。 怎么恢复Chrome 之前版本&a…

前端实习第二个月小结

时间飞快,第一次实习已经过去两个多月,作一些简单的总结和分享。 注:文章整体会比较轻松,提及的经历、经验仅作参考。 一、关于实习/工作内容 1、工作内容 近期做的是管理后台方面的业务,技术栈:前端re…

阿里云 Serverless 助力盟主直播:高并发下的稳定性和成本优化

在直播场景中,阿里云 Serverless 应用引擎 SAE 提供的无缝弹性伸缩与极速部署能力,确保直播间高并发时的流畅体验,降低了我们的运营成本,简化了运维流程。结合阿里云云原生数据库 PolarDB 的 Serverless 能力,实现了数…

flutter的web页面

有几个服务器 有几个后台 直接通过web端进去虽然说很方便,但… 于是把web页面镶嵌到应用里面去, 这样就换了个方式打开web页面了 比如这里有有个列表 这里是写死了,活的列表可以通过io去获取 import package:flutter/material.dart; imp…

【Rust自学】13.1. 闭包 Pt.1:什么是闭包、如何使用闭包

13.1.0. 写在正文之前 Rust语言在设计过程中收到了很多语言的启发,而函数式编程对Rust产生了非常显著的影响。函数式编程通常包括通过将函数作为值传递给参数、从其他函数返回它们、将它们分配给变量以供以后执行等等。 在本章中,我们会讨论 Rust 的一…