热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

Python学习之Scrapy教程

介绍:这是我的Scrapy教程系列的第一篇文章,在这个Scrapy教程中,我将讨论Scrapy,BeautifulSoup

介绍:

这是我的Scrapy教程系列的第一篇文章,在这个Scrapy教程中,我将讨论Scrapy,BeautifulSoup的特性,比较它们,并帮助您决定哪个更适合您的项目。


谈论BeautifulSoup

BeautifulSoup是一个帮助程序员快速从网页中提取有效数据的工具,它的API对新手开发者非常友好,并且它也可以很好地处理格式错误的标记。但是,在大多数情况下,仅靠BeautifulSoup无法完成工作,您需要使用另一个软件包(例如urlib2requests帮助您下载网页),然后您可以使用BeautifulSoup来解析HTML源代码文档BeautifulSoup非常全面,您可以在那里获得大量示例,并快速学习如何使用它。

BeautifulSoup在Python 2和Python 3上运行良好,因此兼容性不会成为问题,下面是一个代码示例BeautifulSoup,如您所见,它对初学者非常友好。


from bs4 import BeautifulSoup
soup = BeautifulSoup html_doc 'html.parser' 链接 find_all 'A' ):打印链接获得'HREF' ))
#http://example.com/elsie
#http://example.com/lacie
#http://example.com/tillie


谈论Scrapy

Scrapy是一个开发人员编写代码的网页爬行框架spider,它定义了某个站点(或一组站点)如何被抓取最大的特点是它构建在Twisted上,这是一个异步网络库,所以Scrapy使用非阻塞(又名异步)代码实现并发性,这使得蜘蛛的性能非常好。

对于那些不知道是什么的人asynchronous,这里是一个简单的解释。


当您同步执行某项操作时,您需要等待它完成后才能继续执行其他任务。当您异步执行某些操作时,可以在完成之前转到其他任务。


Scrapy在Python 2和Python 3上也可以正常工作,所以兼容性不会成为问题。它内置了对使用XPath表达式和CSS表达式从HTML源提取数据的支持。


你应该选择哪一个?

这两个Python网页抓取工具是为了完成不同的工作而创建的。BeautifulSoup仅用于解析HTML和提取数据,Scrapy用于下载HTML,处理数据并保存它。

当你比较BeautifulSoupScrapy找出什么是最适合你的项目时,你应该考虑很多因素。


学习曲线

BeautifulSoup很容易学习,你可以快速地使用它来提取你想要的数据,在大多数情况下,你还需要一个下载器来帮助你获得HTML源代码,强烈建议使用Requests包而不是urllib2从内置的python库来实现这个功能。

既然Scrapy不仅处理内容提取,而且还有很多其他任务,比如下载HTML,学习曲线Scrapy更加陡峭,您需要阅读一些Scrapy教程或Scrapy Doc以了解它如何工作,并努力成为Scrapy专家。

如果你是一位新手开发者,没有太多的编程经验并想完成一项小型工作,BeautifulSoup可能是你的选择,因为它不太可能让你失望。


生态系统

在比较网页抓取工具时,很少有人谈论过这个问题。想想为什么人们喜欢使用Wordpress来构建CMS而不是其他框架,关键是ecosystem如此多的主题,插件可以帮助人们快速构建符合要求的CMS。

Scrapy有很多相关的项目,在Github等开源网站上的插件,以及关于StackOverflow的许多讨论可以帮助您解决潜在的问题。例如,如果您想在您的蜘蛛项目中使用代理,可以scrapy-proxies使用列表中的随机代理来检查项目帮助您发送HTTP请求。所有你需要的只是改变一些设置。


可扩展性

该体系结构Scrapy设计良好,您可以轻松开发定制中间件或管道来添加自定义功能。您的Scrapy项目既强大又灵活。在开发了几个Scrapy项目后,您将从架构中受益,并喜欢它的设计,因为从现有Scrapy蜘蛛项目迁移到另一个项目非常容易。

所以如果你的项目很小,逻辑不是很复杂,而且你想尽快完成工作,你可以用它BeautifulSoup来保持你的项目简单。如果你的项目需要更多的定制,如代理,数据管道,那么Scrapy这里可能是你的选择。


性能

与此同时Scrapy,蜘蛛可以同时发送很多请求,所以download_delay在大多数情况下需要设置以避免被禁止,网页可以被快速抓取。但是,BeautifulSoup没有这个功能,所以很多人都说这BeautifulSoup很慢。实际上,这是错误的,你可以通过导入multiprocessing来加速整个进程,但是我必须说很多人使用BeautifulSoup可能不知道如何使用multiprocessing

因此,如果您想开发一种可以在短时间内抓取许多数据集的高效蜘蛛,可以为Scrapy您节省大量时间。如果你没有经验的Python开发人员,那么BeautifulSoup不应该在这里选择你的选择。


结论

那么哪一个更好?没有可靠的答案,答案很大程度上取决于实际情况。以下是一个快速参考表。


骨架BeautifulSoupScrapy
学习曲线非常容易学习,对初学者友好学习曲线Scrapy更加陡峭,您需要阅读一些Scrapy教程或Scrapy Doc才能开始,并努力成为Scrapy专家。
生态系统没有太多相关的项目或插件许多相关项目,开源网站上的插件(如Github)以及关于StackOverflow的许多讨论可以帮助您解决潜在的问题。
可扩展性不太容易扩展该项目您可以轻松开发自定义中间件或管道来添加自定义功能,便于维护。
性能您需要导入multiprocessing才能使其运行更快非常高效的网页可以在短时间内被抓取,另一方面,在很多情况下,您需要设置download_delay以避免被禁止。

总之,如果你没有太多的编程经验,这项工作是一个非常简单的项目,那么BeautifulSoup你可以选择。如果你想要一个更强大和灵活的网络爬虫,或者你确实有一些编程经验,那么Scrapy这里肯定是赢家.


推荐阅读
  • 在对WordPress Duplicator插件0.4.4版本的安全评估中,发现其存在跨站脚本(XSS)攻击漏洞。此漏洞可能被利用进行恶意操作,建议用户及时更新至最新版本以确保系统安全。测试方法仅限于安全研究和教学目的,使用时需自行承担风险。漏洞编号:HTB23162。 ... [详细]
  • 数字图书馆近期展出了一批精选的Linux经典著作,这些书籍虽然部分较为陈旧,但依然具有重要的参考价值。如需转载相关内容,请务必注明来源:小文论坛(http://www.xiaowenbbs.com)。 ... [详细]
  • 为了确保iOS应用能够安全地访问网站数据,本文介绍了如何在Nginx服务器上轻松配置CertBot以实现SSL证书的自动化管理。通过这一过程,可以确保应用始终使用HTTPS协议,从而提升数据传输的安全性和可靠性。文章详细阐述了配置步骤和常见问题的解决方法,帮助读者快速上手并成功部署SSL证书。 ... [详细]
  • Java Socket 关键参数详解与优化建议
    Java Socket 的 API 虽然被广泛使用,但其关键参数的用途却鲜为人知。本文详细解析了 Java Socket 中的重要参数,如 backlog 参数,它用于控制服务器等待连接请求的队列长度。此外,还探讨了其他参数如 SO_TIMEOUT、SO_REUSEADDR 等的配置方法及其对性能的影响,并提供了优化建议,帮助开发者提升网络通信的稳定性和效率。 ... [详细]
  • Python 程序转换为 EXE 文件:详细解析 .py 脚本打包成独立可执行文件的方法与技巧
    在开发了几个简单的爬虫 Python 程序后,我决定将其封装成独立的可执行文件以便于分发和使用。为了实现这一目标,首先需要解决的是如何将 Python 脚本转换为 EXE 文件。在这个过程中,我选择了 Qt 作为 GUI 框架,因为之前对此并不熟悉,希望通过这个项目进一步学习和掌握 Qt 的基本用法。本文将详细介绍从 .py 脚本到 EXE 文件的整个过程,包括所需工具、具体步骤以及常见问题的解决方案。 ... [详细]
  • Web开发框架概览:Java与JavaScript技术及框架综述
    Web开发涉及服务器端和客户端的协同工作。在服务器端,Java是一种优秀的编程语言,适用于构建各种功能模块,如通过Servlet实现特定服务。客户端则主要依赖HTML进行内容展示,同时借助JavaScript增强交互性和动态效果。此外,现代Web开发还广泛使用各种框架和库,如Spring Boot、React和Vue.js,以提高开发效率和应用性能。 ... [详细]
  • PHP预处理常量详解:如何定义与使用常量 ... [详细]
  • 本文详细介绍了定时器输入捕捉技术的原理及其应用。通过配置定时器通道的引脚模式为输入模式,并设置相应的捕获触发条件,可以实现对外部信号的精确捕捉。该技术在实时控制系统中具有广泛的应用,如电机控制、频率测量等场景。文中还提供了具体的配置步骤和示例代码,帮助读者更好地理解和应用这一技术。 ... [详细]
  • 为了优化用户体验,本文探讨了如何调整下拉菜单的宽度。通过合理设置宽度,可以提升界面的美观性和易用性。文章提供了具体的代码示例,帮助开发者实现这一目标。例如,可以通过 CSS 或 JavaScript 来动态调整下拉菜单的宽度,确保其在不同设备和屏幕尺寸上都能保持良好的显示效果。 ... [详细]
  • 为开发者提供了一系列实用的参考网站和资源链接,包括HTML速查手册( 和 ),帮助开发者快速查找和学习相关技术知识。此外,还涵盖了其他重要的开发工具和文档,为编程工作提供全面支持。 ... [详细]
  • Python全局解释器锁(GIL)机制详解
    在Python中,线程是操作系统级别的原生线程。为了确保多线程环境下的内存安全,Python虚拟机引入了全局解释器锁(Global Interpreter Lock,简称GIL)。GIL是一种互斥锁,用于保护对解释器状态的访问,防止多个线程同时执行字节码。尽管GIL有助于简化内存管理,但它也限制了多核处理器上多线程程序的并行性能。本文将深入探讨GIL的工作原理及其对Python多线程编程的影响。 ... [详细]
  • 本文全面解析了JavaScript中的DOM操作,并提供了详细的实践指南。DOM节点(Node)通常代表一个标签、文本或HTML属性,每个节点都具有一个nodeType属性,用于标识其类型。文章深入探讨了DOM节点的创建、查询、修改和删除等操作,结合实际案例,帮助读者更好地理解和掌握DOM编程技术。 ... [详细]
  • 本文探讨了 Java 中 Pair 类的历史与现状。虽然 Java 标准库中没有内置的 Pair 类,但社区和第三方库提供了多种实现方式,如 Apache Commons 的 Pair 类和 JavaFX 的 javafx.util.Pair 类。这些实现为需要处理成对数据的开发者提供了便利。此外,文章还讨论了为何标准库未包含 Pair 类的原因,以及在现代 Java 开发中使用 Pair 类的最佳实践。 ... [详细]
  • 如何使用 `org.apache.poi.openxml4j.opc.PackagePart` 类中的 `loadRelationships()` 方法及其代码示例详解 ... [详细]
  • 本文探讨了在多DHCP服务器环境中如何创建和管理作用域,并提出了一种有效的备用DHCP服务器方案,以确保网络服务的高可用性和稳定性。通过详细的技术分析和实践操作,本文为网络管理员提供了一套完整的解决方案,帮助其更好地应对复杂的网络环境。 ... [详细]
author-avatar
mobiledu2502882663
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有