Python爬虫从端到端抓取网页

2023-09-19 19:58:28

网页抓取和 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

更多推荐

算法通过村第七关-树(递归/二叉树遍历)白银笔记|递归实战

文章目录前言1.深入理解前中后序遍历从小到大递推分情况讨论,明确结束条件组合出完整的方法:从大到小画图推演总结前言提示:没有客观公正的记忆这回事,所有的记忆都是偏见,都是为自己的存活而重组过的经验。--国强生《断代》1.深入理解前中后序遍历深度优先遍历有前中后序三种情况,大部分人看过后就可以写出来,但是很多人只是记住了

在比特币上使用可检索性证明支付存储费用

我们为用户开发了一种为云存储付费的新方法。与亚马逊的S3等传统云存储相比,用户不必信任服务器。我们使用比特币智能合约来确保支付取决于服务器的可检索性证明(PoR),该证明只能在数据仍然可用且需要时可以检索的情况下生成。可检索性证明(PoR)许多人通过将他们的数据(如音乐、照片和文档)上传到远程服务器来外包存储,以确保可

mock技术在测试中的应用

技术简介mock技术又叫测试桩、挡板在软件测试中,对于一些不容易构造、获取的对象,用一个虚拟的对象来代替它,以达到相同的效果,这个虚拟的对象就是mock。mock技术并不是只有测试领域用,最早是在开发领域应用,典型例子:前后端联调。比如一个功能,前端功能写完了,但是后端还没做好,前端可以使用mock技术模拟后端发过来的

10:STM32------I2C通信

目录​​​​​​​一:I2C通信协议1:I2C简历2:硬件电路3:I2C时序基本单元A:开/终条件2:发送一个字节3:接收一个字节4:应答机制4:I2C时序1:指定地址写2:当前地址读3:指定地址读二:MPU60501:简历2:参数3:硬件电路4:框图5:寄存器地址三:案例A:软件I2C读写MPU60501:连接图2:

前端面试合集(三——浏览器)

浏览器的页面渲染1.浏览器是如何渲染页面的?2.什么是reflow(重排)?3.什么是repaint(重绘)?4.为什么transform效率高?1.浏览器是如何渲染页面的?当浏览器的网络线程收到HTML文档之后,会产生一个渲染任务,并将其传递给渲染主线程的消息队列。在事件循环机制的作用下,渲染主线程取出消息队列中的渲

005-第一代光电小工具(一)

第一代光电小工具(一)文章目录第一代光电小工具(一)项目介绍大致原理描述核心控件QCustomPlot关于QCustomPlot播放音频软件截图关键字:Qt、Qml、QCustomPlot、曲线、SQLite项目介绍欢迎来到我们的QML&C++项目!这个项目结合了QML(QtMeta-ObjectLanguage)和C

Pluma 插件管理框架

1.概述Pluma是一个用C++开发的可用于管理插件的开源架构,其官网地址为:http://pluma-framework.sourceforge.net/。该架构是个轻量级架构,非常易于理解。Pluma架构有以下基本概念:1)插件的外在行为体现为一个纯虚类,可以叫作插件接口;2)继承于同一个插件接口的若干派生类,被认

异地远程访问本地SQL Server数据库【无公网IP内网穿透】

文章目录1.前言2.SeaFile云盘设置2.1Owncould的安装环境设置2.2SeaFile下载安装2.3SeaFile的配置3.cpolar内网穿透3.1Cpolar下载安装3.2Cpolar的注册3.3Cpolar云端设置3.4Cpolar本地设置4.公网访问测试5.结语1.前言现在我们身边的只能设备越来越多

工作、生活常用免费api接口大全

手机号码归属地:提供三大运营商的手机号码归属地查询。全国快递物流查询:1.提供包括申通、顺丰、圆通、韵达、中通、汇通等600+快递公司在内的快递物流单号查询。2.与官网实时同步更新。3.自动识别快递公司。IP归属地-IPv4区县级:根据IP地址查询归属地信息,包含43亿全量IPv4,支持到中国地区(不含港台地区)区县级

弹跳小球-第15届蓝桥杯第一次STEMA测评Scratch真题精选

[导读]:超平老师的《Scratch蓝桥杯真题解析100讲》已经全部完成,后续会不定期解读蓝桥杯真题,这是Scratch蓝桥杯真题解析第152讲。第15届蓝桥杯第1次STEMA测评已于2023年8月20日落下帷幕,编程题一共有6题,分别如下:行走的螃蟹飞驰的高铁旋转的正方体弹跳小球比较身高数据计算弹跳小球,本题是202

每天一道大厂SQL题【Day26】脉脉真题实战(二)活跃时长的均值

文章目录每天一道大厂SQL题【Day26】脉脉真题实战(二)活跃时长的均值每日语录第26题中级题:活跃时长的均值1.需求列表思路分析答案获取加技术群讨论附表文末SQL小技巧后记每天一道大厂SQL题【Day26】脉脉真题实战(二)活跃时长的均值大家好,我是Maynor。相信大家和我一样,都有一个大厂梦,作为一名资深大数据

热文推荐