Python爬虫从端到端抓取网页

news2024/11/17 4:53:32

网页抓取和 REST API 简介

网页抓取是使用计算机程序以自动方式从网站提取和解析数据的过程。这是创建用于研究和学习的数据集的有用技术。虽然网页抓取通常涉及解析和处理 HTML 文档,但某些平台还提供 REST API 来以机器可读格式(如 JSON)检索信息。在本教程中,我们将使用网络抓取和 REST API 创建真实的数据集。

如何运行代码

  学习材料的最佳方法是执行代码并亲自进行实验。本教程是一个可执行的 Jupyter 笔记本。

您还可以选择“Run on Colab”或“Run on Kaggle”,但您需要在 Google Colab 或 Kaggle 上创建帐户才能使用这些平台等。

我将在该项目中做什么

1)选择一个网站并描述您的目标

2)使用requests库下载网页

3)使用Beautiful Soup解析和提取信息

4)使用提取的信息创建 CSV 文件

5)编写一个函数:

  1. 从主题页面获取主题列表
  2. 从各个主题页面获取顶级存储库列表
  3. 对于每个主题,创建该主题的顶级存储库的 CSV

GitHub 主题的热门存储库

 GitHub URL“ https://github.com/dineshmalappagari/Web-Scraping ”来检查项目。

1)选择一个网站并描述您的目标

——浏览不同的网站并选择进行抓取。查看“项目创意”部分以获取灵感。

— - 确定您想要从网站上抓取的信息。决定输出 CSV 文件的格式。

— -在 Juptyer 笔记本中总结您的项目想法并概述您的策略。使用上面的“新建”按钮。

1)我要抓取“ https://github.com/topics”

2)在网站中,我们按字母顺序排列主题。在主题中,我将从主题中选取前 25 个存储库

3)从每个存储库中,我将获取 Repo_name、用户名、Stars 和 URL

2)使用requests库下载网页

— -检查网站的 HTML 源代码并确定要下载的正确 URL。

— -使用requests库将网页下载并保存到本地。

— -创建一个功能来自动下载不同主题/搜索查询。

使用下载网页requests

我们应该安装 !pip 安装请求

requests.get返回一个响应对象,其中包含页面内容和一些使用状态代码指示请求是否成功的信息。在此处了解有关 HTTP 状态代码的更多信息:

让我们将内容保存到具有.html扩展名的文件中。

现在,您可以使用 Jupyter 中的“文件 > 打开”菜单选项并单击显示的文件列表中的3D .html查看该文件。这是打开文件时您将看到的内容:

如果我想编辑文件

检查网页的 HTML 源代码

  正如前面提到的,网页是用一种称为 HTML(超文本标记语言)的语言编写的。HTML 是一种       相 当简单的语言,由标签(也称为节点元素)组成,例<a href="https://jovian.ai"   target="_blank">Go to Jovian</a>。HTML 标    签由三部分组成:

  1. 名称:(htmlheadbodydiv等)指示标签代表什么以及浏览器应如何解释其中的信息。
  2. 属性:(hreftargetclassid等)浏览器使用标签的属性来自定义标签的显示方式并决定用户交互时发生的情况。
  3. 子级:标签可以在开始段和结束段之间包含一些文本或其他标签或两者都包含,例如<div>Some content</div>

HTML 文档内部

这是一个简单的 HTML 文档,其中使用了许多常用标签:

<html>
  <head>
    <title>All About Python</title>
  </head>
  <body>
    <div style="width: 640px; margin: 40px auto">
      <h1 style="text-align:center;">Python - A Programming Language</h1>
      <img src="https://www.python.org/static/community_logos/python-logo-master-v3-TM.png" alt="python-logo" style="width:240px;margin:0 auto;display:block;">
      <div>
        <h2>About Python</h2>
        <p>
          Python is an <span style="font-style: italic">interpreted, high-level and general-purpose</span> programming language. Python's design philosophy emphasizes code readability with its notable use of significant indentation. Its language constructs and object-oriented approach aim to help programmers write clear, logical code for small and large-scale projects. Visit the <a href="https://docs.python.org/3/">official documentation</a> to learn more.
        </p>
      </div>
      <div>
        <h2>Some Python Libraries</h2>
        <ul id="libraries">
          <li>Numpy</li>
          <li>Pandas</li>
          <li>PyTorch</li>
          <li>Scikit Learn</li>
        </ul>
      </div>
      <div>
        <h2>Recent Python Versions</h2>
        <table id="versions-table">
          <tr>
            <th class="bordered-table">Version</th>
            <th class="bordered-table">Released on</th>
          </tr>
          <tr>
            <td class="bordered-table">Python 3.8</td>
            <td class="bordered-table">October 2019</td>
          </tr>
          <tr>
            <td class="bordered-table">Python 3.7</td>
            <td class="bordered-table">June 2018</td>
          </tr>
        </table>
          <style>
              .bordered-table { 
                  border: 1px solid black; padding: 8px;
              }
          </style>
      </div>
    </div>
  </body>
</html>

练习:复制上面的 HTML 代码并将其粘贴到名为webpage.html. 要创建新文件,请从菜单栏中选择“文件 > 打开”,然后选择“新建 > 文本”文件。查看保存的文件。你能看到浏览器如何以不同的方式显示不同的标签吗?

练习:对里面的代码进行一些更改webpage.html。保存文件并再次查看。您看到自己的改变得到体现了吗?尝试一下文件的结构。尝试打破事物并修复它们!

常用标签和属性

   以下是一些最常用的 HTML 标签:

  • html
  • head
  • title
  • body
  • div
  • span
  • h1h6
  • p
  • img
  • ul,olli
  • tabletr,thtd
  • style
  • ……

每个标签支持多个属性。以下是用于修改标签行为的一些常见属性:

  • id
  • style
  • class
  • href(与 一起使用<a>
  • src(与 一起使用<img>

使用 Beautiful Soup 从 HTML 中提取信息

要以编程方式从网页的 HTML 源代码中提取信息,我们可以使用Beautiful Soup库。让我们安装该库并BeautifulSoupbs4模块导入该类。

3)使用Beautiful Soup解析和提取信息

— -使用 Beautiful soup 解析和探索下载的网页的结构。

——使用正确的属性和方法来提取所需的信息。

— -创建函数以从页面提取到列表和字典中。

— -(可选)如果需要,使用 REST API 获取其他信息。

我想抓取 gitHub 中的所有主题

我想获取 gitHub 中所有主题的描述

我想为主题 3D 创建 URL

网址已创建

我想创建主题列表

我想创建列表中所有主题的描述

我想为每个主题创建 URL 列表

4)使用提取的信息创建 CSV 文件

— -为下载、解析和保存 CSV 的端到端过程创建函数。

— -使用不同的输入执行该函数以创建 CSV 文件的数据集。

— -使用 Pandas 读回 CSV 文件来验证其中的信息。

我想为我的信息创建数据框

从主题页面获取信息

我想将 '92.6k' 转换为 '92600'

我想使用函数添加我的所有数据

我想将信息存储到我指定列名称的列中

我想检查我的代码如何工作

我们检查一下我们的代码在一行中是如何工作的

我要为文件写的代码不应该重复

  os.path 模块始终是适合 Python 运行的操作系统的路径模块,因此可用于本地路径。

最终代码

 导入操作系统

def scrape_topic(topic_url, path):
if os.path.exists(path):
print(“文件 {} 已存在。正在跳过…”.format(path))
return
topic_df = get_topic_repos(get_topic_page(topic_url))
topic_df.to_csv (路径,索引=无)

5)编写一个函数:

  1. 从主题页面获取主题列表
  2. 从各个主题页面获取顶级存储库列表
  3. 对于每个主题,创建该主题的顶级存储库的 CSV

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

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

相关文章

平面设计找素材就上这6个网站

平面设计师找素材就上这6个网站&#xff0c;免费下载&#xff0c;建议收藏&#xff01; 1、菜鸟图库 https://www.sucai999.com/?vNTYxMjky 菜鸟图库是一个非常大的素材库&#xff0c;站内包含设计、办公、自媒体、图片、电商等各行业素材。网站还为新手设计师提供免费的素材…

使用sersync实现数据实时同步

使用sersync实现数据实时同步 sersync诞生过程部署前提配置rsync部署sersync配置sersync的path变量 修改sersync配置文件sersync常用参数使用服务文件实现开机自启动实时同步服务debug sersync诞生过程 sersync作者&#xff1a;前金山公司周洋(花椒直播&#xff09; 数据实时同…

(leetcode)二叉树最大深度

个人主页&#xff1a;Lei宝啊 愿所有美好如期而遇 目录 题目&#xff1a; 思路&#xff1a; 代码&#xff1a; 图解&#xff1a; 题目&#xff1a; 给定一个二叉树 root &#xff0c;返回其最大深度。 二叉树的 最大深度 是指从根节点到最远叶子节点的最长路径上的节点数…

数据挖掘十大算法

参考&#xff1a; ICDM&#xff1a;数据挖掘十大算法

go语言 实现正向代理

正向代理 我们无法访问外网 就需要VPN 这里的VPN相当于是一个代理服务器&#xff0c;我们将请求的数据给代理服务器&#xff0c;让代理帮我们转发并接收请求消息 代码 package mainimport ("fmt""io""net""net/http""strings&…

华为分布式新核心全面升级金融级PaaS能力:数字化时代“分工”再深化

文 | 螳螂观察 作者 | 李永华 金融领域一向是数字化转型升级最难啃的硬骨头&#xff0c;无数厂商在此深耕&#xff0c;但由于行业数字化需求复杂而艰深&#xff0c;实现深入突破的并不多&#xff0c;尤其是在关系到账户数据的核心系统方面&#xff0c;有所建树的少之又少。 …

Python日期处理库:掌握时间的艺术

&#x1f482; 个人网站:【工具大全】【游戏大全】【神级源码资源网】&#x1f91f; 前端学习课程&#xff1a;&#x1f449;【28个案例趣学前端】【400个JS面试题】&#x1f485; 寻找学习交流、摸鱼划水的小伙伴&#xff0c;请点击【摸鱼学习交流群】 日期和时间在计算机编程…

短剧推广和小说推文在哪里授权介绍

短剧推广和小说推文都属于很热门的赛道&#xff0c;都可以通过“巨量推文”进行授权 在巨量推文找到想推广的小说或者短剧后申请推广即可&#xff0c;小说需要有回填作品信息&#xff0c;短剧为全自动&#xff0c;出数据后实时同步到平台

Maven高级---分模块设计,继承(继承关系/版本锁定/自定义属性)

目录 分模块设计 继承与聚合 继承关系 ​案例​ 版本锁定 自定义属性/引用属性 分模块设计 把一个项目拆分成不同的模块 我们可以把原来一个项目包中的东西单独提出来作为一个模块,也是解耦的思想 然后我们可以通过引入依赖的方式将这两个模块引入,如下 继承与聚合 继…

JavaScript小案例-树形菜单(菜单数据为数组)

菜单层级理论上可以无限多&#xff0c;因为是递归渲染。 gif演示图&#xff1a; 代码&#xff1a; 树形菜单.html <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8"><meta name"viewport" content&quo…

全球南方《乡村振兴战略下传统村落文化旅游设计》许少辉八一著辉少许

全球南方《乡村振兴战略下传统村落文化旅游设计》许少辉八一著辉少许

第八章 排序

一、插入排序 不带哨兵 void InsertSort(int A[], int n){int i, j, temp;for (i1; i<n; i){if (A[i]<A[i-1]){temp A[i];for (ji-1; j>0 && A[j]>temp; --j){A[j1] A[j];}A[j1] temp;}} }带哨兵 void InsertSort(int A[], int n){int i, j;for (i2;…

微信小程序 实现滑块是矩形的slider组件

我发现大多数前端UI库都是圆形的滑块&#xff0c;而且圆形的滑块都没有紧贴进度条&#xff0c;都是超出了首尾端&#xff0c;所以亲自写一个矩形的滑块&#xff0c;我使用了微信小程序的wxs的事件通信写法&#xff0c;官方说这样写好&#xff0c;也不知道好哪里了。样式如下图&…

AWS入列CNCF基金会

7月27日&#xff0c;IT之家曾经报道&#xff0c;微软加入Linux旗下CNCF基金会&#xff0c;在这之后不到一个月的今天&#xff0c;亚马逊AWS也宣布&#xff0c;以铂金身份加入此基金会。 CNCF&#xff0c;全称Cloud Native Computing Fundation&#xff0c;该基金会旨在使得容器…

Java中Hashset存储原理底层深挖

上课老师讲了Hashset的添加元素方法&#xff0c;感觉不甚准确&#xff0c;于是下课扒一扒底层源码&#xff0c;这一看&#xff0c;霍&#xff01; 原来如此。现在小丁来捋一遍他的存储原理。 public boolean add(E e) {return map.put(e, PRESENT)null;} 可以看到PRESENT是一…

HTTPS 证书生成脚本详细讲解

前言 HTTPS证书的作用是用于保障网站的安全性。在HTTPS协议中&#xff0c;通过使用证书来实现客户端与服务器之间的认证和数据加密&#xff0c;防止中间人攻击、信息泄漏等安全问题的发生。https证书也就是SSL证书&#xff0c;我们首先要确定好需要 https 安全连接的域名&…

IMX6ULL移植篇-Linux内核源码目录分析一

一. Linux内核源码目录 之前文章对 Linux内核源码的文件做了大体的了解&#xff0c;如下&#xff1a; IMX6ULL移植篇-Linux内核源码文件表_凌肖战的博客-CSDN博客 本文具体说明 Linux内核源码的一些重要文件含义。 二. Linux内核源码中重要文件分析 1. arch 目录 这个目录…

Spring的后处理器

Spring后处理器 Spring后处理器是Spring对外开放的重要拓展点&#xff08;让我们可以用添加自己的逻辑&#xff09;&#xff0c;允许我们介入到Bean的整个实例化流程中来&#xff0c;以达到动态注册BeanDefinition&#xff08;向BeanDefitionMap中添加BeanDefition对象的过程&…

【视觉SLAM入门】8. 回环检测,词袋模型,字典,感知,召回,机器学习

"见人细过 掩匿盖覆” 1. 意义2. 做法2.1 词袋模型和字典2.1.2 感知偏差和感知变异2.1.2 词袋2.1.3 字典 2.2 匹配(相似度)计算 3. 提升 前言&#xff1a; 前端提取数据&#xff0c;后端优化数据&#xff0c;但误差会累计&#xff0c;需要回环检测构建全局一致的地图&…

数据结构与算法(C语言版)P5---栈

1、栈 1.1、栈的概念及结构 栈&#xff1a;一种特殊的线性表&#xff0c;其只允许在固定的一端进行插入和删除元素操作。__进行数据插入和删除操作的一端称为栈顶&#xff0c;另一端称为栈底。__栈中的数据元素遵守__后进先出&#xff08;先进后出&#xff09;__LIFO&#xf…