当前位置: 首页 > article >正文

python爬虫入门(实践)

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.kler.cn/a/513058.html

相关文章:

  • BottomNavigationBar组件的用法
  • 从 Spark 到 StarRocks:实现58同城湖仓一体架构的高效转型
  • vue2使用flv.js在浏览器打开flv格式视频
  • KubeSphere 与 Pig 微服务平台的整合与优化:全流程容器化部署实践
  • SQL Server查询计划操作符——查询计划相关操作符(4)
  • 微软宣布Win11 24H2进入新阶段!设备将自动下载更新
  • 基于Springboot+Redis秒杀系统 demo
  • 【2024年华为OD机试】 (JavaScriptJava PythonC/C++)
  • 网络安全态势感知技术综述
  • Apache Hive 聚合函数与 OVER 窗口函数:从基础到高级应用
  • Oracle审计
  • SecureUtil.aes数据加密工具类
  • 通义万相:阿里巴巴 AI 生成式多模态平台解析与实战应用
  • 细说STM32F407单片机电源低功耗StandbyMode待机模式及应用示例
  • AI编程工具使用技巧:在Visual Studio Code中高效利用阿里云通义灵码
  • 如何提升IP地址查询数据服务的安全?
  • controlnet 多 condition 融合
  • 网安篇(一)日志分析——从给的登录日志中找出攻击IP和使用的用户名
  • 数据结构学习记录-树和二叉树
  • 堆的实现(C语言详解版)
  • yolo系列模型为什么坚持使用CNN网络?
  • LeetCode:37. 解数独
  • [Easy] leetcode-500 键盘行
  • Pix2Pix:图像到图像转换的条件生成对抗网络深度解析
  • 实现一个自己的spring-boot-starter,基于SQL生成HTTP接口
  • 分布式系统通信解决方案:Netty 与 Protobuf 高效应用