如何用 Python 构建一个简单的网页爬虫

您想学习如何使用 Python 构建网络爬虫吗?现在就一起来阅读我们关于如何构建一个简单的网络爬虫的文章。

 您有没有想过程序员如何构建用于从网站中提取数据的网络抓取工具?如果你有,那么这篇文章就是专门为你写的。我们生活在一个数据驱动的世界已经不是什么新闻了,企业需要的大部分数据都只能找到。通过使用称为网络抓取工具的自动化机器人,您可以高速从网站中提取所需的数据。谷歌、雅虎、Semrush、Ahref 和许多其他数据驱动的网站都是如此。

我选择为本教程构建这个网络抓取工具,因为它是我个人可以使用的东西——而且构建起来很简单。让我们从问题定义开始。


准备

尽管本教程是初级教程,但我希望您知道如何用Python编写一些代码。您应该了解 Python 数据结构,例如整数、字符串、列表、元组和字典。您还应该知道如何使用 for-in 循环遍历列表。了解如何创建函数和类,因为代码是以面向对象的编程 (OOP) 范式编写的。您还应该知道如何读取和编写 HTML 以检查要抓取的数据。

所需的工具只有两个 - Requests BeautifulSoup

这是 Python 的 HTTP 库。该库用于发送 HTTP 请求。虽然您可以使用标准库中的 urllib 模块,但 Requests 是更好的选择。使用“pip install requests”命令安装这个库。

BeautifulSoup 是 Python 的 HTML 和 XML 文档解析器。使用此库,您可以解析网页中的数据。安装这个也很容易,只需在命令提示符中使用“pip install beautifulsoup4”命令即可。

如果没有安装上述两个库,您将无法学习本教程。在我们继续之前请安装它们。


Python 网页抓取教程:分步式

1 步:检查 Google 搜索引擎结果页 (SERP) HTML

每个网页抓取练习的第一步是检查页面的 HTML。这是因为当您向页面发送 HTTP GET 请求时,将下载整个页面。您需要知道在何处查找您感兴趣的数据。只有这样您才能提取数据。

  • 首先搜索短语“python 教程”,然后向下滚动到显示相关关键字列表的页面底部。
  • 右键单击相关关键字部分,然后选择“检查元素”。
  • 您将看到相关搜索关键字的整个部分都嵌入在具有 class 属性的 div 元素中 – card-section
  • 通常,本节中的关键字有八 (8) 个数字,分为两 (2) 列 – 每列包含四 (4) 个关键字。这两个关键字中的每一个都嵌入在具有类属性brs-col的 div 元素中
  • 对于 4 个关键字的每一列,关键字作为锚元素 (<a>) 嵌入具有类属性 - nVcaUb的段落元素 <p> 中。

综上所述,要达到8个关键词中的任何一个,都需要走这条路——div(class:card-section)->div(class:brs-col)->p(class:nVcaUb)->a .

 

2 步:导入所需的库

启动您想要的 IDE。对我来说,PyCharm 是首选的 Python IDE。但是对于本教程,我使用了在我的系统上安装 Python 时附带的 Python IDLE。启动 IDLE 后,创建一个新的 python 文件 (.py) 并将其命名为“KeywordScraper.py”,然后导入所需的模块。

 

3 步:创建一个辅助函数来为关键字添加加号

关键字“python 教程的搜索 URL https://www.google.com/search?q=python+tutorials。Google 生成的方式很简单。没有关键字的搜索 URL 是https://www.google.com/search?q=。关键字通常紧跟在 q= 之后附加到字符串中。

但是在附加关键字之前,每个单词之间的所有空格都被替换为加号(+),因此“python tutorials”被转换为“python+tutorials”。然后,搜索 URL 变为https://www.google.com/search?q=python+tutorials

 

第4步:创建一个KeywordScraper类并初始化

创建一个只接受一个参数的 KeywordScraper ——也就是关键字。创建类后,使用以下变量对其进行初始化。

  • 关键字– 用于存储要搜索的关键字
  • plusified_keyword – 用于存储上面的关键字,但单词之间的空格转换为加号 (+)。从下面的屏幕截图中可以看出,转换中使用了 add_plus 辅助函数。
  • Keywords_scraped – 一个空列表,用于保存抓取的关键字。初始化为空列表 ([])。
  • search_string – 保存您的关键字的 Google 搜索 URL。查看如何附加“plusified”关键字以形成完整的 URL。

5 步:在 KeywordScraper 类中创建抓取 SERP 的方法

类中的方法名称是scrape_SERP。正如你在下面看到的,第一个变量是一个字典(dic),变量名是-header作为 User-Agent 值传递的字符串是我浏览器的用户代理。这个非常重要。Google 提供不同版本的网页,具体取决于用户的用户代理。

我尝试在没有用户代理的情况下在我的移动 IDE 上运行相同的代码,但它无法通过,因为交付的 HTML 文档与我在解析时使用的文档不同。您可以尝试使用不同的标头来查看哪些适用于此代码,哪些不适用于此代码。

内容变量包含关键字“Python 教程 Google SERP 的整个 HTML 字符串。这是使用请求库的 get 方法下载的——您可以看到作为 requests.get() 参数添加的 headers 变量。此时,页面已经被下载并存储在 content 变量中。需要的是解析.

BeautifulSoup 用于解析下载的页面。要了解如何使用 BeautifulSoup,请访问BeautifulSoup 文档网站。查看代码,您将看到 BeautifulSoup 有两个参数——要解析的内容和要使用的解析引擎。初始化之后,就可以开始搜索需要的数据了。

如您所见,代码首先搜索相关关键字容器(类为card-section div 元素)。在此之后,它然后搜索两个 div,每个 div 代表一个类名为brs-col 的列,每个包含 4 个关键字。

然后代码循环遍历两个 div,搜索类名为nVacUb p 元素。每个都包含一个锚元素(链接),其名称为关键字。获取每个关键字后,将其添加到 self.keywords_scraped 变量中。

 

 6 步:创建数据库写入方法

综上所述,有些人会争辩说您已经成功抓取了所需的数据。但是我选择说除非你把它保存在持久存储中,否则教程是不完整的。您将数据保存在哪个存储器中?有很多选择;您可以将数据保存在 CSV 文件、数据库系统(如 SQLite)甚至 MySQL 中。在这个简单的教程中,我们将把我们的数据保存在一个 .txt 文件中。

 

7 步:运行代码

要运行该脚本,请创建 KeywordScraper 类的一个实例——我将变量命名为“ s”并将关键字“python tutorials”作为参数传递。您可以传递任何有意义的关键字,例如“Best games pc”,您将获得作为参数传递的该关键字的关键字。

创建类的实例后,调用scrape_SERP方法,然后调用write_to_file方法。完成此操作后,您就完成了代码的编写。是时候运行您的代码了。现在运行它,如果一切顺利,只需检查脚本所在的文件夹,您将看到一个名为“scraped keyword.txt”的新文本文件。打开文件,您将看到为您抓取的关键字。


 如何改进这个网络爬虫

毫无疑问,这个网络爬虫不像你在大多数教程中看到的虚拟爬虫,这实际上对 SEO 很有用。但是,还有很大的改进空间。

正如我之前所说,它不处理异常——这应该是你应该做的第一个改进来处理不同的错误情况,比如关键字没有相关的关键字被抓取。除了关键字之外,您甚至可以进一步抓取相关问题。使 Web 抓取器多任务以一次抓取更多页面也会使其更好。

事实是,您无法使用此工具抓取数千个关键字,因为 Google 会发现您正在使用机器人并阻止您。为了防止任何形式的块,您应该扩展机器人以使用代理。对于谷歌,我建议你使用住宅代理


结论

构建一个简单的网页抓取工具并不是一项艰巨的任务,因为您可能有一个网站要抓取,而且网页是结构化的。它也不需要多线程,并且如果您不打算每分钟发送大量请求,当然不必考虑请求限制。

当您开发复杂的网络抓取工具时,主要问题就出现了。即便如此,通过适当的计划和学习,问题也可以克服。

想要了解更多Python, 爬虫等技术方面的文章,请关注我们的网站:https://www.bestproxyreviews.com/

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值