作者:mobiledu2502882663 | 来源:互联网 | 2023-09-04 17:52
介绍:
这是我的Scrapy教程系列的第一篇文章,在这个Scrapy教程中,我将讨论Scrapy,BeautifulSoup的特性,比较它们,并帮助您决定哪个更适合您的项目。
谈论BeautifulSoup
BeautifulSoup是一个帮助程序员快速从网页中提取有效数据的工具,它的API对新手开发者非常友好,并且它也可以很好地处理格式错误的标记。但是,在大多数情况下,仅靠BeautifulSoup无法完成工作,您需要使用另一个软件包(例如urlib2
或requests
帮助您下载网页),然后您可以使用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,处理数据并保存它。
当你比较BeautifulSoup
和Scrapy
找出什么是最适合你的项目时,你应该考虑很多因素。
学习曲线
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
不应该在这里选择你的选择。
结论
那么哪一个更好?没有可靠的答案,答案很大程度上取决于实际情况。以下是一个快速参考表。
骨架 | BeautifulSoup | Scrapy |
---|
学习曲线 | 非常容易学习,对初学者友好 | 学习曲线Scrapy 更加陡峭,您需要阅读一些Scrapy教程或Scrapy Doc才能开始,并努力成为Scrapy专家。 |
生态系统 | 没有太多相关的项目或插件 | 许多相关项目,开源网站上的插件(如Github)以及关于StackOverflow的许多讨论可以帮助您解决潜在的问题。 |
可扩展性 | 不太容易扩展该项目 | 您可以轻松开发自定义中间件或管道来添加自定义功能,便于维护。 |
性能 | 您需要导入multiprocessing 才能使其运行更快 | 非常高效的网页可以在短时间内被抓取,另一方面,在很多情况下,您需要设置download_delay以避免被禁止。 |
总之,如果你没有太多的编程经验,这项工作是一个非常简单的项目,那么BeautifulSoup
你可以选择。如果你想要一个更强大和灵活的网络爬虫,或者你确实有一些编程经验,那么Scrapy
这里肯定是赢家.