初步了解
Scrapy是一个用于爬取网站并提取结构化数据的应用程序框架,可用于各种有用的应用程序,例如数据挖掘,信息处理或历史档案。
Scrapy最初是为Web抓取而设计的,它还可以用于使用API??(例如Amazon Associates Web Services)或作为通用Web搜寻器来提取数据。
示例spider的演练
为了展示Scrapy带来了什么,我们将使用最简单的运行蜘蛛的方法向介绍Scrapy Spider的示例。
以下是在分页之后从网站http://quotes.toscrape.com抓取著名报价的spider的代码:
import scrapy class QuotesSpider(scrapy.Spider): name = ‘quotes‘ start_urls = [ ‘http://quotes.toscrape.com/tag/humor/‘, ] def parse(self, response): 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() if next_page is not None: yield response.follow(next_page, self.parse)
将其放在文本文件中,将其命名为quotes_spider.py的python文件,然后使用runspider命令运行spider程序:
scrapy runspider quotes_spider.py -o quotes.json
完成此操作后,我们将在quotes.json文件中具有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": "Groucho Marx", "text": "\u201cOutside of a dog, a book is man‘s best friend. Inside of a dog it‘s too dark to read.\u201d" }, { "author": "Steve Martin", "text": "\u201cA day without sunshine is like, you know, night.\u201d" }, ...]
那么这一段代码发生了什么呢?
当运行命令scrapy runspider quotes_spider.py
时,Scrapy会在其中查找Spider定义,并通过其搜寻器引擎运行它。
爬虫开始于对start_urls属性中定义的URL发出请求,并调用默认的回调方法parse,并将响应对象作为参数传递。在解析回调中,我们使用CSS选择器循环引用元素,生成包含提取的引用文本和作者的Python dict,查找指向下一页的链接,并使用与回调相同的解析方法安排另一个请求。
在这里,您会注意到Scrapy的主要优势之一:请求是异步调度和处理的。这意味着Scrapy无需等待请求完成和处理,它可以同时发送另一个请求或执行其他操作。这也意味着即使某些请求失败或在处理过程中发生错误,其他请求也可以继续执行。
虽然这使您能够进行非常快速的爬虫,但是Scrapy还使您可以通过一些设置来控制爬虫的操作。您可以执行以下操作,例如设置每个请求之间的下载延迟,限制每个域或每个IP的并发请求数量。
原文:https://www.cnblogs.com/Iloveyy/p/12825885.html