资讯详情

Scarpy2.5从入门到高级系列教程(一):快速了解Scrapy框架

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感知),用于尝试使用CSSXPath表达式来抓取数据,在编写或调试蜘蛛时非常有用。

  • 内置支持以多种格式(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项目。 谢谢你的关注!

标签: jl14系列连接器

锐单商城拥有海量元器件数据手册IC替代型号,打造 电子元器件IC百科大全!

锐单商城 - 一站式电子元器件采购平台