Scrapy 快速一览
Scrapy 它是一个用于抓取网站和提取结构化数据的应用程序框架,可用于数据挖掘、信息处理或历史存档等各种有用的应用程序。
尽管 Scrapy 最初是为了捕获网页元素而设计的,但也可以使用Apis提取数据,如亚马逊的服务务界面,或者抓取网页元素的一般目的。
蜘蛛的例子
向您展示 Scrapy
我们将向您展示它带来了什么 Scrapy Spider
以最简单的方式操作蜘蛛为例。
下面是爬虫的代码,它来自网站 http://quotes.toscrape.com 爬名言,遵循分页:
# 导入scrapy库 import scrapy # 创建蜘蛛类 # 这将在创建爬虫项目后自动生成 # 默认继承scrapy中的Spider类 class QuotesSpider(scrapy.Spider): # 定义蜘蛛名,这个在后期,你使用命令行创建的时候, # 与命令行中的名称一致,当然也可以选择不一致 name = 'quotes' # 定义爬取的url,它是列表 start_urls = [ 'http://quotes.toscrape.com/tag/humor/', ] # 回调函数,重写继承类 # 这个response是你要求的url的响应结果 def parse(self, response): # 遍历你发现的名言 # 通过yield生成迭代器并抛出它 for quote in response.css('div.quote'): yield {
'author': quote.xpath('span/small/text()').get(), 'text': quote.css('span.text::text').get(), } # 获取下一页数据 next_page = response.css('li.next a::attr("href")').get() # 如果有下一页的数据,请回调parse,重新分析 if next_page is not None: yield response.follow(next_page, self.parse)
创建一个py在命令终端下执行文件并进入相应的文件目录
文件格式:.jl 类别:Julia Source Code File。JL文件保存为文本格式,可以用任何文本编辑器编辑。
scrapy runspider quotes_spider.py -o quotes.jl
完成后,同级目录下,会多一个文件,quotes.jl
文件中将包含 JSON
行格式的引号列表,其中包含文本和作者,如下所示:
{
"author": "Jane Austen", "text": "\u201cThe person, be it gentleman or lady, who has not pleasure in a good novel, must be intolerably stupid.\u201d"}
{
"author": "Steve Martin", "text": "\u201cA day without sunshine is like, you know, night.\u201d"}
......
这些都是怎么发生的呢
当您运行命令 scrapy runspider quotes_spider.py -o quotes.jl
时,Scrapy
会查找你定义的蜘蛛类 QuotesSpider
,之后自动使用爬虫引擎(框架的核心)运行它。
这个爬取的过程由制造一些请求开始,请求的url
就是你蜘蛛类中定义的start_url
(这是一个url
列表),请求完成后,会调取默认回调函数parse
,且会将请求的响应response
作为一个参数传递给parse
回调函数。在回调函数中,这里使用了css
选择器先获取了页面中所有的元素,然后循环每一句名言,并使用yield函数生成一个python字典,这个数据是被抛出的,你在文件中看到了,然后我们查询是否还有下一页数据,如果存在,我们就使用相同的回调方法,重新执行一遍这个过程,直到没有下一页为止。
在这里您会注意到 Scrapy
的主要优势之一: 请求是异步调度和处理的。
- 这意味着
Scrapy
不需要等待请求完成和处理,它可以在此期间发送另一个请求或做其他事情。 - 这也意味着即使某些请求失败或在处理它时发生错误,其他请求也可以继续进行。
虽然这使您可以进行非常快速的爬网(以容错方式同时发送多个并发请求),但 Scrapy
还让您可以通过一些设置来控制爬网的礼貌。
你可以做一些事情,比如设置每个请求之间的下载延迟,限制每个域或每个 IP
的并发请求数量,甚至使用自动限制扩展来尝试自动找出这些。
上面这些设置,后面我们会涉及到,现在不着急了解具体是怎么设置的。
对数据储存,你可以选择多种方式,导出格式可以使用:json\XML\csv
。或者写item pipline
存储到数据库上。
还有其它?
您已经了解了如何使用 Scrapy
从网站中提取和存储项目,但这只是表面。
Scrapy
提供了许多强大的功能来使抓取变得简单高效,例如:
-
内置的
css
选择器和xpath
表达式以及辅助正则表达式,来帮助我们提取数据. -
一个交互式
shell
控制台(IPython
感知),用于尝试使用CSS
和XPath
表达式来抓取数据,在编写或调试蜘蛛时非常有用。 -
内置支持以多种格式(
JSON、CSV、XML
)生成提要导出并将它们存储在多个后端(FTP、S3、本地文件系统
) -
强大的编码支持和自动检测,用于处理外部、非标准和损坏的编码声明。
-
强大的可扩展性支持,允许您使用
signals
和定义良好的(middlewares, extensions, and pipelines)
插入自己的功能。 -
用于处理的各种内置扩展和中间件:
- HTTP features like compression, authentication, caching
- user-agent spoofing
- robots.txt
- crawl depth restriction
-
一个 Telnet 控制台,用于连接到在
Scrapy
进程中运行的Python 控制台
,以检查和调试您的爬虫 -
加上其他好东西,比如可重复使用的蜘蛛类,从
Sitemap和 XML/CSV
提要中抓取url
、用于自动下载与抓取的项目相关联的图像(或任何其他媒体)的媒体管道、缓存DNS
解析器等等!
下一步
安装 Scrapy
,按照教程学习如何创建一个成熟的 Scrapy
项目。 谢谢你的关注!