介绍:

这是我的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不应该在这里选择你的选择。

结论

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

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

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

Python学习之Scrapy教程相关推荐

  1. python自学平台-Python学习交流平台与教程推荐

    Python学习交流平台与教程推荐 目录 一.有编程问题怎么办? 1 Stack Overflow 2 Github 3 CSDN-专业IT技术社区 二.Python教程 1 跟我读Python文档 ...

  2. Python学习入门基础教程(learning Python)--5.6 Python读文件操作高级

    前文5.2节和5.4节分别就Python下读文件操作做了基础性讲述和提升性介绍,但是仍有些问题,比如在5.4节里涉及到一个多次读文件的问题,实际上我们还没有完全阐述完毕,下面这个图片的问题在哪呢? 问 ...

  3. 2个Python学习网站制作教程

    最近次条总结了一些2个Python学习网站制作教程的一些核心技术,这里整理了下一些目录,分别是两个网站,大部分技术都在前端,熟悉前端的话直接可以查看网页源码对应去了解学习,这些教程重在理解思路,思路通 ...

  4. Python学习入门基础教程(learning Python)--6.3 Python的list切片高级

    上节"6.2 Python的list访问索引和切片"主要学习了Python下的List的访问技术:索引和切片的基础知识,这节将就List的索引index和切片Slice知识点做进一 ...

  5. Python学习入门基础教程(learning Python)--2.3.5Python返回多个值问题

    本节主要学习Python的函数是如何同时返回多个值的问题. 在学习Python的时候惊奇的发现,Python的函数可以同时返回多个值,很有意思. [python]view plaincopy #def ...

  6. Python学习入门基础教程(learning Python)--5.3 Python写文件基础

    前边我们学习了一下Python下如何读取一个文件的基本操作,学会了read和readline两个函数,本节我们学习一下Python下写文件的基本操作方法. 这里仍然是举例来说明如何写文件.例子的功能是 ...

  7. Python学习入门基础教程(learning Python)--5.5 Python写操作详解

    在前文5.3节我们简单的学习了如何在Python里进行文件的写操作,所举例里写入的都是字符串数据,那我们现在想写入数值型数据可以直接写入么?我们先看看下边的程序是否能正常运行? wfile = ope ...

  8. Python学习入门基础教程(learning Python)--5.4 Python读文件详解

    问题1.多余的'\n' 在5.2节里我们基本掌握了Python下的文件读文件操作基本方法,但是也存在一些小小问题,细心的读者会发现下面这幅图的问题. 上图每次打印输出words时,先打印了一行从文件里 ...

  9. Python学习入门基础教程(learning Python)--4.3 Python的for嵌套

    Python下的循环体和其他高级语言一样循环体也是可以嵌套的! 我们做个小例子看看,从而结束本章的学习. 任务:打印矩阵下三角 BASE_SIZE = 8for r in range(BASE_SIZ ...

最新文章

  1. Nat. Commun. 速递:虚拟颅内脑电与神经动力学模型
  2. C# 写入和读出文本文件
  3. 菜鸟学Java(十九)——WEB项目测试好帮手,Maven+Jetty
  4. Openlayers下载与加载geoserver的wms服务显示地图
  5. html中单选框颜色怎么改,如何更改单选按钮的颜色?
  6. 怎样自动提取邮件的内容_这些最新的外贸搜索开发工具(图灵搜、谷歌搜索提取工具、易查查),你会使用吗?...
  7. [阅读笔记]Zhang Y. 3D Information Extraction Based on GPU.2010.
  8. 五、Web服务器——MVC开发模式 EL表达式 JSTL 学习笔记
  9. 助力全站WebP ,阿里云云上FPGA 团队发布 WebP图片解决方案
  10. linux 程序占内存,linux下,一个运行中的程序,究竟占用了多少内存
  11. 复练-面试的科技树-我是谁、我喜欢、我能够
  12. 面试系列26 如何基于dubbo进行服务治理、服务降级、失败重试以及超时重试
  13. web元件库、axure元件库、通用元件库、常用web组件、常用表单、框架、数据表单、导航栏、边框、图标、列表、日期时间选择器、评分组件、穿梭框、输入框、步骤条、图表组件、数据可视化、后台模板、时间轴
  14. iic调试软件上时钟芯片测试,时钟芯片的测试方法和系统 Clock chip testing methods and systems...
  15. IIS网站的应用程序与虚拟目录的区别及应用
  16. python extractor_Python extractor
  17. 南邮计算机学院考研论坛,考南邮的心得,但愿对大家有所帮助!!!
  18. matlab 模拟光源,基于 Matlab 的激光光斑模拟.pdf
  19. 【钉钉-场景化能力包】会展入场
  20. 止咳绝招 献给身边咳嗽的人

热门文章

  1. C语言文件详解(超级详细,记得收藏~~~)
  2. 也谈析构:析构函数何时被调用
  3. easyexcel功能扩展:读取excel日期格式(包括日期格式和文本格式)
  4. makefile文件编写
  5. 微信小程序canvas的撤销功能
  6. 交换机启用光口命令_cisco交换机通过命令行查看光纤接口类型
  7. 数字系统实验—第13周任务(3位数码管动态扫描显示实验含工程与优化)
  8. VC++下SYSTEMTIME时间与C#下DateTime时间的相互转换
  9. mpdf使用踩坑总结
  10. 输入本金和年份并算出利息本金和