Python学习之Scrapy教程
介绍:
这是我的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
这里肯定是赢家.
Python学习之Scrapy教程相关推荐
- python自学平台-Python学习交流平台与教程推荐
Python学习交流平台与教程推荐 目录 一.有编程问题怎么办? 1 Stack Overflow 2 Github 3 CSDN-专业IT技术社区 二.Python教程 1 跟我读Python文档 ...
- Python学习入门基础教程(learning Python)--5.6 Python读文件操作高级
前文5.2节和5.4节分别就Python下读文件操作做了基础性讲述和提升性介绍,但是仍有些问题,比如在5.4节里涉及到一个多次读文件的问题,实际上我们还没有完全阐述完毕,下面这个图片的问题在哪呢? 问 ...
- 2个Python学习网站制作教程
最近次条总结了一些2个Python学习网站制作教程的一些核心技术,这里整理了下一些目录,分别是两个网站,大部分技术都在前端,熟悉前端的话直接可以查看网页源码对应去了解学习,这些教程重在理解思路,思路通 ...
- Python学习入门基础教程(learning Python)--6.3 Python的list切片高级
上节"6.2 Python的list访问索引和切片"主要学习了Python下的List的访问技术:索引和切片的基础知识,这节将就List的索引index和切片Slice知识点做进一 ...
- Python学习入门基础教程(learning Python)--2.3.5Python返回多个值问题
本节主要学习Python的函数是如何同时返回多个值的问题. 在学习Python的时候惊奇的发现,Python的函数可以同时返回多个值,很有意思. [python]view plaincopy #def ...
- Python学习入门基础教程(learning Python)--5.3 Python写文件基础
前边我们学习了一下Python下如何读取一个文件的基本操作,学会了read和readline两个函数,本节我们学习一下Python下写文件的基本操作方法. 这里仍然是举例来说明如何写文件.例子的功能是 ...
- Python学习入门基础教程(learning Python)--5.5 Python写操作详解
在前文5.3节我们简单的学习了如何在Python里进行文件的写操作,所举例里写入的都是字符串数据,那我们现在想写入数值型数据可以直接写入么?我们先看看下边的程序是否能正常运行? wfile = ope ...
- Python学习入门基础教程(learning Python)--5.4 Python读文件详解
问题1.多余的'\n' 在5.2节里我们基本掌握了Python下的文件读文件操作基本方法,但是也存在一些小小问题,细心的读者会发现下面这幅图的问题. 上图每次打印输出words时,先打印了一行从文件里 ...
- Python学习入门基础教程(learning Python)--4.3 Python的for嵌套
Python下的循环体和其他高级语言一样循环体也是可以嵌套的! 我们做个小例子看看,从而结束本章的学习. 任务:打印矩阵下三角 BASE_SIZE = 8for r in range(BASE_SIZ ...
最新文章
- Nat. Commun. 速递:虚拟颅内脑电与神经动力学模型
- C# 写入和读出文本文件
- 菜鸟学Java(十九)——WEB项目测试好帮手,Maven+Jetty
- Openlayers下载与加载geoserver的wms服务显示地图
- html中单选框颜色怎么改,如何更改单选按钮的颜色?
- 怎样自动提取邮件的内容_这些最新的外贸搜索开发工具(图灵搜、谷歌搜索提取工具、易查查),你会使用吗?...
- [阅读笔记]Zhang Y. 3D Information Extraction Based on GPU.2010.
- 五、Web服务器——MVC开发模式 EL表达式 JSTL 学习笔记
- 助力全站WebP ,阿里云云上FPGA 团队发布 WebP图片解决方案
- linux 程序占内存,linux下,一个运行中的程序,究竟占用了多少内存
- 复练-面试的科技树-我是谁、我喜欢、我能够
- 面试系列26 如何基于dubbo进行服务治理、服务降级、失败重试以及超时重试
- web元件库、axure元件库、通用元件库、常用web组件、常用表单、框架、数据表单、导航栏、边框、图标、列表、日期时间选择器、评分组件、穿梭框、输入框、步骤条、图表组件、数据可视化、后台模板、时间轴
- iic调试软件上时钟芯片测试,时钟芯片的测试方法和系统 Clock chip testing methods and systems...
- IIS网站的应用程序与虚拟目录的区别及应用
- python extractor_Python extractor
- 南邮计算机学院考研论坛,考南邮的心得,但愿对大家有所帮助!!!
- matlab 模拟光源,基于 Matlab 的激光光斑模拟.pdf
- 【钉钉-场景化能力包】会展入场
- 止咳绝招 献给身边咳嗽的人